CodePipelineからCodeBuildの環境変数が設定できるようになりました!

2019.10.16

はじめに

こんにちは!AWS事業本部の島川です。

CodePipelineからCodeBuildの環境変数が設定ができるようになりました。
AWS CodePipeline Enables Setting Environment Variables on AWS CodeBuild Build Jobs

You can now set environment variables for CodeBuild build jobs in your pipeline.

これまでは複数環境下の場合、環境ごとにCodeBuildプロジェクトを用意⇒環境変数を設定するということが必要でした。
CodePipelineもその分の数が必要でした。

それが今回のアップデートにより、1つのCodeBuildプロジェクトのみで複数環境に対応できるようになりました。
CodePipelineの追加だけで済むようになります!

やってみた

CodeBuild の Docker サンプル(DockerイメージをECRにプッシュする)を使って、CodePipelineからCodeBuildの環境変数を設定してみます。

GitHubにコードをアップする。

今回はソース元をGitHubを選択しました。
まずは検証で使うDockerfileとbuildspec.ymlをGitHubにアップします。
どちらもrootに配置します。

  • Dockerfile
FROM golang:1.12-alpine AS build
#Install git
RUN apk add --no-cache git
#Get the hello world package from a GitHub repository
RUN go get github.com/golang/example/hello
WORKDIR /go/src/github.com/golang/example/hello
# Build the project and send the output to /bin/HelloWorld
RUN go build -o /bin/HelloWorld

FROM golang:1.12-alpine
#Copy the build's output binary from the previous build container
COPY --from=build /bin/HelloWorld /bin/HelloWorld
ENTRYPOINT ["/bin/HelloWorld"]
  • buildspec.yml
version: 0.2

phases:
  install:
    runtime-versions:
      docker: 18
  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

CodePipelineの設定をする。

マネジメントコンソールから設定していきます。

パイプラインの作成をクリックします。

[Step1]パイプラインの名前とロール名を入力。

[Step2]ソースステージはGitHubを選択(先ほどコードをアップしたレポジトリを選択します)

[Step3]ビルドステージはもちろんCodeBuildを選択します。
今回はここからCodeBuildも作成します。

CodeBuildの設定内容は画像をご参照ください。

追加されていることを確認します。

お...!環境変数の追加という項目見つけました。今回は一旦CodePipeline作成をしてしまい、あとから設定をいじることにします。

また、CodeBuild作成時にロールも一緒に作成されましたがそのロールに"ecr:CreateRepository"の権限を付与する必要があります。今回はすでに存在するAmazonEC2ContainerRegistryPowerUserのポリシーを付与で対応します。

[Step4]ECRへのプッシュが目的なのでデプロイはスキップします。

設定内容を確認してパイプラインを作成します。
作成後自動的にパイプラインが動きますが、環境変数設定してない&ECRレポジトリが存在していないので失敗します。

ECRレポジトリを作成する。

プッシュ先が必要なのでECRレポジトリを作成します。環境変数でも設定するので覚えておきましょう。

CodePipelineから環境変数を設定する。

作成したCodePipelineのステージを編集します。

展開されたらここをクリックします。

環境変数を追加します。

buildspec.ymlで以下4つの環境変数を定義しているのでそれを埋めて保存します。

名前 入力
AWS_DEFAULT_REGION ap-northeast-1(リージョン) プレーンテキスト
AWS_ACCOUNT_ID 123456789012(AWSアカウントID) プレーンテキスト
IMAGE_TAG latest(イメージのタグ) プレーンテキスト
IMAGE_REPO_NAME test-ecr(ECRレポジトリ名) プレーンテキスト

実行

変更をリリースします。

成功したようなので、ECRでちゃんとアップできているか確認します。

できました!

さいごに

CodePipeline側でCodeBuildの環境変数の設定ができることを確認しました。汎用的なCodeBuildを用意しておけばCodePipelineのみの設定で済むようになり、設定の見通しが良くなったと思います。

既にCodePipelineを運用している場合でも切り替えが容易なので、適用をご検討してみてください!