如何从 AWS Codepipeline 中的 json 文件中读取值?
How to read a value from a json file in AWS Codepipeline?
我的问题: Codepipeline 如何读取 SourceCodeArtifact
中的 json 文件中的字段值?
我的 Gthub 存储库包含一个文件 imageManifest.json
,如下所示:
{
"image_id": "docker.pkg.github.com/my-org/my-repo/my-app",
"image_version": "1.0.1"
}
我希望我的 AWS Codepipeline Source 阶段能够从 imageManifest.json
中读取 image_version
的值,并将其作为参数传递给管道后续阶段中的 CloudFormation 操作。
供参考,这是我的源阶段。
Stages:
- Name: GitHubSource
Actions:
- Name: SourceAction
ActionTypeId:
Category: Source
Owner: ThirdParty
Version: '1'
Provider: GitHub
OutputArtifacts:
- Name: SourceCodeArtifact
Configuration:
Owner: !Ref GitHubOwner
Repo: !Ref GitHubRepo
OAuthToken: !Ref GitHubAuthToken
这是我的部署阶段:
- Name: DevQA
Actions:
- Name: DeployInfrastructure
InputArtifacts:
- Name: SourceCodeArtifact
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
StackName: !Ref AppName
Capabilities: CAPABILITY_NAMED_IAM
RoleArn: !GetAtt [CloudFormationRole, Arn]
ParameterOverrides: !Sub '{"ImageId": "${image_version??}"}'
请注意,上面最后一行中的 image_version
只是我理想的占位符,用于说明我希望如何使用 image_version
json 值。
Codepipeline 如何读取 SourceCodeArtifact
中的 json 文件中的字段值?
步骤函数?拉姆达? CodeBuild?
您可以在源代码和部署阶段之间使用 CodeBuild 步骤。
在 CodeBuild 步骤中,从 SourceArtifact(源阶段生成的工件)读取 image_version
并写入工件 'Template configuration' 文件 1,这是一个配置 属性 CloudFormation 操作。此文件可以保存您的 CloudFormation 堆栈的参数值。使用此文件代替您当前使用的 ParameterOverrides
。
Fn::GetParam
就是你想要的。它可以 returns 来自 JSON 格式文件中键值对的值。 JSON 文件必须包含在工件中。
这是文档,它为您提供了一些示例:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-parameter-override-functions.html#w2ab1c13c20b9
应该是这样的:
ParameterOverrides: |
{
"ImageId" : { "Fn::GetParam" : ["SourceCodeArtifact", "imageManifest.json", "image_id"]}
}
我的问题: Codepipeline 如何读取 SourceCodeArtifact
中的 json 文件中的字段值?
我的 Gthub 存储库包含一个文件 imageManifest.json
,如下所示:
{
"image_id": "docker.pkg.github.com/my-org/my-repo/my-app",
"image_version": "1.0.1"
}
我希望我的 AWS Codepipeline Source 阶段能够从 imageManifest.json
中读取 image_version
的值,并将其作为参数传递给管道后续阶段中的 CloudFormation 操作。
供参考,这是我的源阶段。
Stages:
- Name: GitHubSource
Actions:
- Name: SourceAction
ActionTypeId:
Category: Source
Owner: ThirdParty
Version: '1'
Provider: GitHub
OutputArtifacts:
- Name: SourceCodeArtifact
Configuration:
Owner: !Ref GitHubOwner
Repo: !Ref GitHubRepo
OAuthToken: !Ref GitHubAuthToken
这是我的部署阶段:
- Name: DevQA
Actions:
- Name: DeployInfrastructure
InputArtifacts:
- Name: SourceCodeArtifact
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: CloudFormation
Version: '1'
Configuration:
StackName: !Ref AppName
Capabilities: CAPABILITY_NAMED_IAM
RoleArn: !GetAtt [CloudFormationRole, Arn]
ParameterOverrides: !Sub '{"ImageId": "${image_version??}"}'
请注意,上面最后一行中的 image_version
只是我理想的占位符,用于说明我希望如何使用 image_version
json 值。
Codepipeline 如何读取 SourceCodeArtifact
中的 json 文件中的字段值?
步骤函数?拉姆达? CodeBuild?
您可以在源代码和部署阶段之间使用 CodeBuild 步骤。
在 CodeBuild 步骤中,从 SourceArtifact(源阶段生成的工件)读取 image_version
并写入工件 'Template configuration' 文件 1,这是一个配置 属性 CloudFormation 操作。此文件可以保存您的 CloudFormation 堆栈的参数值。使用此文件代替您当前使用的 ParameterOverrides
。
Fn::GetParam
就是你想要的。它可以 returns 来自 JSON 格式文件中键值对的值。 JSON 文件必须包含在工件中。
这是文档,它为您提供了一些示例:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline-parameter-override-functions.html#w2ab1c13c20b9
应该是这样的:
ParameterOverrides: |
{
"ImageId" : { "Fn::GetParam" : ["SourceCodeArtifact", "imageManifest.json", "image_id"]}
}