首页 > 解决方案 > 如何将环境变量传递给 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 和生产。有没有一种方法可以让我在这里自动执行同步命令,以便在我进行代码构建时使用某种变量来改变环境。也许我可以通过命令行传递环境名称。

标签: amazon-web-servicesamazon-s3gatsbyaws-codebuild

解决方案


创建代码构建时,您可以传递环境变量。

{
  "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


推荐阅读