この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは!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を運用している場合でも切り替えが容易なので、適用をご検討してみてください!