AWS将变量传递到CodePipeline中的buildspec.yml

use*_*403 36 aws-codepipeline

我有一个AWS CodePipeline,它在Build Stage中调用CodeBuild.

问题是我如何从CodePipeline中传入一个可以在CodeBuild的buildspec.yml中读取的环境变量?

我知道我可以在CodeBuild中设置环境变量,但是我想为dev,qa和prod环境使用相同的CodeBuild项目.我没有看到如何从CodePipeline传递环境变量,使其一直到buildspec.yml

示例buildspec.yml

version: 0.1

phases:   
  build:
    commands:
      - npm install
      - npm build -- --env ${CURRENT_ENVIRONMENT}
Run Code Online (Sandbox Code Playgroud)

其中CURRENT_ENVIRONMENT将是我在CodePipeline Stage操作中设置的变量.

Vik*_*yol 17

从今天开始,您可以为管道中的 CodeBuild 构建作业设置环境变量。这一改进使得可以将相同的构建项目重用于多个操作,并简化在管道中的临时和生产环境的部署。

name: Build
actions:
  - name: MyBuildJob
    actionTypeId:
      category: Build
      owner: AWS
      provider: CodeBuild
      version: '1'
    runOrder: 1
    configuration:
      ProjectName: my-build-project
      PrimarySource: MyApplicationSource1
      EnvironmentVariables: '[{"name":"CURRENT_ENVIRONMENT","value":"Production","type":"PLAINTEXT"},
                              {"name":"UseParamStore","value":"CURRENT_ENVIRONMENT","type":"PARAMETER_STORE"}]'
Run Code Online (Sandbox Code Playgroud)

https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CodeBuild.html#action-reference-CodeBuild-config


Tim*_*imB 13

此功能目前无法使用.

解决方法是为具有不同环境变量的每个阶段创建不同的CodeBuild项目.

您可以在此处找到有关在builspec.yml命令中使用环境变量的详细信息:http://docs.aws.amazon.com/codebuild/latest/userguide/build-spec-ref.html

  • 整整一年,此功能仍然无法使用? (12认同)

小智 9

  1. 创建一个 Codebuild 项目。
  2. 在 Codepipline 中创建一个管道项目。
  3. 添加 CodeBuild 操作并在此操作中定义变量。
    例如:
    变量名称是:TAG
    变量值是:staging

在此输入图像描述

使用您在 Codebuild 项目的 Codepipline Buildspec 文件中定义的变量: 在此输入图像描述

记录结果: 在此输入图像描述


Ash*_*wal 6

您实际上可以在CodeBuild cloudformation中传递环境变量,如下所示:

Build:
    Type: AWS::CodeBuild::Project
    Properties:
      Name:
        !Sub Build-${AWS::StackName}
      Description: Build your project
      Environment:
        Type: LINUX_CONTAINER
        ComputeType: BUILD_GENERAL1_SMALL
        Image: node8
        EnvironmentVariables:
          - Name: CURRENT_ENVIRONMENT
            Type: PLAINTEXT
            Value: staging
Run Code Online (Sandbox Code Playgroud)

而且buildspec.yml您可以参考这样的环境,

version: 0.2

phases:
  install:
    commands:
      - npm install

  build:
    commands:
      - npm build -- --env ${CURRENT_ENVIRONMENT}
Run Code Online (Sandbox Code Playgroud)


Joh*_*ier 5

您可以使用构建环境变量npm build通过检测正在运行的 CodeBuild 作业或 CodePipeline 作业来有条件地从构建规范传递到构建规范。例如,如果您有一个 CodePipeline 监听 /dev 提交,而另一台 CodePipeline 监听 /master 提交,则这非常有效。

下面是一个运行不同的 PROD 与 DEV 构建的示例:

  build:
    commands:
   - |
     if expr "${CODEBUILD_BUILD_ARN}" : ".*build/MyProjectDev-" >/dev/null; then
       yarn run build-dev;
     fi
   - |
     if expr "${CODEBUILD_BUILD_ARN}" : ".*build/MyProject-" >/dev/null; then
       yarn run build-prod;
     fi
Run Code Online (Sandbox Code Playgroud)