将 AWS CodePipeline 变量传递给操作

Pass AWS CodePipeline variable to actions

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

我了解此变量可用于所有操作,如 AWS docs 中所述。

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

我一直在使用以下代码:

对于构建操作:

        - 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

对于部署操作:[​​=13=]

        - 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

UPDATE 代码确实不错;我只需要更新 CloudFormation 管道堆栈即可应用它(我认为 github webhook 会触发它,但它只会更新管道内的操作)

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

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

验证 在我的管道上使用 CloudFormation 提供程序。我还可以 确认这是否按预期工作

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

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