我有一个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)
小智 9
TAG staging使用您在 Codebuild 项目的 Codepipline Buildspec 文件中定义的变量:

您实际上可以在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)
您可以使用构建环境变量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)
| 归档时间: |
|
| 查看次数: |
14714 次 |
| 最近记录: |