从 CodeBuild buildspec.yml 读取 CodePipeline 中设置的环境变量

问题描述 投票:0回答:1

我设置了一个名为 test-pipeline-flow 的 AWS CodePipeline。

Source 步骤已设置为使用名为 test-repoAWS CodeCommit

Build 步骤已设置为使用名为 test-build-repoAWS CodeBuild。此 CodeBuild 具有以下 buildspec.yml

version: 0.2
phases:
  build:
    commands:
       - echo $FOO
       - echo $BAR

CodeBuild test-build-repo 我还通过 环境 > 附加配置小节设置了 环境变量

所以这里的问题是,当我触发 AWS CodePipeline test-pipeline-flow

CloudWatch 日志显示 $FOO 持有

whatever
(如预期),并且 $BAR 实际上持有
#{codepipeline.PipelineExecutionId}
而不是实际的 执行 ID

我还缺少什么不允许 $BAR 解析为 AWS CodePipeline 提供的正确值?

amazon-web-services yaml environment-variables aws-codepipeline aws-codebuild
1个回答
0
投票

根据您的屏幕截图,您似乎正在尝试在

CodePipeline
 配置页面上使用 
CodeBuild
变量语法。如果是这样,您需要在CodePipeline页面/控制台中设置环境变量。

此页面详细描述了变量在管道内的范围及其操作:https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-variables.html

当您从 cloud-shell 或本地计算机运行以下命令时,您应该看到类似这样的内容:

注意我们正在查看管道,而不是代码构建项目

# ref https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-variables.html

aws codepipeline get-pipeline --name <pipeline-name>

{
    "name": "Build",
    "actions": [
        {
            "outputArtifacts": [
                {
                    "name": "BuildArtifact"
                }
            ],
            "name": "Build",
            "configuration": {
                "EnvironmentVariables": "[{\"name\":\"Execution_ID\",\"value\":\"#{codepipeline.PipelineExecutionId}\",\"type\":\"PLAINTEXT\"},{\"name\":\"Commit_ID\",\"value\":\"#{SourceVariables.CommitId}\",\"type\":\"PLAINTEXT\"}]",
                "ProjectName": "env-var-test"
            },
            "inputArtifacts": [
                {
                    "name": "SourceArtifact"
                }
            ],
            "region": "us-west-2",
            "actionTypeId": {
                "provider": "CodeBuild",
                "category": "Build",
                "version": "1",
                "owner": "AWS"
            },
            "runOrder": 1
        }
    ]
},
© www.soinside.com 2019 - 2024. All rights reserved.