amazon-web-services - 如何将环境变量传递给 AWS 代码构建的 buildspec.yml
问题描述
我的 gatsby 站点根目录中的 buildspec.yml 文件中有以下命令。
version: 0.2
phases:
install:
commands:
- npm i npm@latest -g
- npm install --global gatsby-cli
- npm install
- pip install --upgrade pip
- pip install --upgrade awscli
build:
commands:
- gatsby build
post_build:
commands:
- aws s3 sync public/ s3://stagging
我有 2 个环境,staggin 和生产。有没有一种方法可以让我在这里自动执行同步命令,以便在我进行代码构建时使用某种变量来改变环境。也许我可以通过命令行传递环境名称。
解决方案
创建代码构建时,您可以传递环境变量。
{
"name": "sample-docker-project",
"source": {
"type": "S3",
"location": "codebuild-region-ID-account-ID-input-bucket/DockerSample.zip"
},
"artifacts": {
"type": "NO_ARTIFACTS"
},
"environment": {
"type": "LINUX_CONTAINER",
"image": "aws/codebuild/docker:17.09.0",
"computeType": "BUILD_GENERAL1_SMALL",
"environmentVariables": [
{
"name": "AWS_DEFAULT_REGION",
"value": "region-ID"
},
{
"name": "AWS_ACCOUNT_ID",
"value": "account-ID"
},
{
"name": "IMAGE_REPO_NAME",
"value": "Amazon-ECR-repo-name"
},
{
"name": "IMAGE_TAG",
"value": "latest"
}
]
},
"serviceRole": "arn:aws:iam::account-ID:role/role-name",
"encryptionKey": "arn:aws:kms:region-ID:account-ID:key/key-ID"
}
然后在您的 buildspec.yml 中,您可以像使用$IMAGE_REPO_NAME的常规环境变量一样引用它们。
version: 0.2
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- $(aws ecr get-login --no-include-email --region $AWS_DEFAULT_REGION)
build:
commands:
- echo Build started on `date`
- echo Building the Docker image...
- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
- docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
post_build:
commands:
- echo Build completed on `date`
- echo Pushing the Docker image...
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
您不能做的是只创建 1 个代码构建并将变量像脚本一样传递给它,因此您需要创建 2 个代码构建,但需要创建 1 个 buildspec.yml。
更多信息在这里: https ://docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html
推荐阅读
- firebase - 使用 GCS 生成缩略图云函数错误
- c++ - 想知道为什么这只删除节点#2
- codenameone - 容器中的可点击地图
- ionic-framework - 离子标签应用程序在新标签添加时抛出错误
- r - 删除不满足 R 中条件的迭代
- ssh - 如何通过恢复 Web 控制台 DigitalOcean 启用 root 登录和密码身份验证?
- c++ - CodeChef 显示 gets() 未在任何范围内声明。虽然在代码块上正常工作
- r - R 和 Rcpp 中的多个多元正态密度值
- android - 如何在android O及以上版本中向服务器发出重复的后台请求
- angular7 - 如何使用 ngx-leaflet-draw 为 ngx-leaflet 创建自定义绘制按钮