首页 > 解决方案 > 将 AWS CodePipeline 变量传递给操作

问题描述

我正在尝试将 CodePipeline 变量 #{codepipeline PipelineExecutionId} 传递给 codeBuild 操作和部署操作。

我了解此变量可随时用于所有操作,如AWS 文档中所述。

但是,我在语法上遇到了困难,因为参数没有传递到操作中。

我一直在使用以下代码:

对于构建操作:

        - Name: "Build-Docker-Container"
          Actions:
            - Name: "Build-Docker-Container"
              ActionTypeId:
                Category: Build
                Owner: AWS
                Provider: CodeBuild
                Version: "1"
              Configuration:
                ProjectName: !Sub ${ProjectName}-build-${BranchName}
                EnvironmentVariables:
                  - Name: IMAGE_TAG
                    Type: PLAINTEXT
                    Value: "#{codepipeline.PipelineExecutionId}"
              InputArtifacts:
                - Name: !Ref ProjectName
              RunOrder: 3

对于部署操作:

        - Name: "Deploy-Services"
          Actions:
            - Name: "Deploy-Services"
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Provider: CloudFormation
                Version: "1"
              Configuration:
                ActionMode: CREATE_UPDATE
                StackName: !Sub "${ProjectName}-services-${BranchName}"
                TemplatePath: !Sub "${ProjectName}::aws/03-services.yml"
                Capabilities: "CAPABILITY_NAMED_IAM"
                RoleArn: !GetAtt DeployRole.Arn
                ParameterOverrides: !Sub |
                  {
                    "ProjectName": "${ProjectName}",
                    "ExecutionId": "#{codepipeline.PipelineExecutionId}"
                  }
              InputArtifacts:
                - Name: !Ref ProjectName
                - Name: InfrastructureOutput
              RunOrder: 4

更新代码实际上很好;我只需要更新 CloudFormation 管道堆栈即可应用它(我认为 github webhook 会触发此操作,但它只会更新管道内的操作)

标签: amazon-web-servicesamazon-cloudformationaws-codepipelineaws-codebuild

解决方案


我可以确认您在部署操作中使用的语法是正确的:

                ParameterOverrides: !Sub |
                  {
                    "ProjectName": "${ProjectName}",
                    "ExecutionId": "#{codepipeline.PipelineExecutionId}"
                  }

我通过CloudFormation 提供商在我的管道上验证了这一点。我还可以确认这按预期工作

如果您编辑有问题的 CFN 操作,您可以在控制台中检查参数是否正确设置:

在此处输入图像描述

目前我无法验证构建操作,但从外观上看,它似乎也很好。


推荐阅读