circleciのorbを使でECR/ECSにgoアプリをデプロイするやつのテンプレ書いた
成果物
aws-ecr/build_and_push_image
指定したDockerfileからイメージをECRのpushするOrb、使う前は毎回Loginしたりしていたので非常に便利になった。 https://circleci.com/orbs/registry/orb/circleci/aws-ecr
ポイント
aws-ecr/build_and_push_image
にBuildしたバイナリデータを渡す
今回、一つ前のjobでバイナリを作成しコンテナに詰める設計なので、生成バイナリをこのJobに持ってこないとDocker imageを作成できない。 しかしaws-ecrではstep実行を行うことができないのでrestore_cache
が使えない……。
対応としてattach-workspace
という設定項目を使った。
attach-workspace
とはtrueにするとworkspaceをこのJobsで使う事ができる項目らしい。
今回はbuildのjobを/go/src/github.com/MizukiSonoko/goapp-template/
で行ったのでaws-ecr/build_and_push_image
に合わせるために移動させた。(ここの設定を間違えていたので空のdocker imageをpushしてて辛かった)
あとはpersist_to_workspace
を使って/home/circleci/project/
を永続化すると次のJobでも使えるようになる。
- run: name: move an artifact command: | mkdir /home/circleci/project/ mv /go/src/github.com/MizukiSonoko/goapp-template/build /home/circleci/project/build - persist_to_workspace: root: /home/circleci/project/ paths: - .
- aws-ecr/build_and_push_image: account-url: AWS_ECR_ACCOUNT_URL repo: '<repo name>' tag: '${CIRCLE_SHA1}' dockerfile: .circleci/Dockerfile attach-workspace: true filters: branches: only: - master requires: - base
これで生成バイナリを含んだコンテナをpushできた。
#!/bin/sh -eo pipefail # Error calling workflow: 'build_and_deploy' # Error calling job: 'aws-ecr/build_and_push_image' # Type error for argument account-url: expected type: env_var_name, actual value: \"${AWS_ECR_ACCOUNT_URL}\" (type string) # # ------- # Warning: This configuration was auto-generated to show you the message above. # Don't rerun this job. Rerunning will have no effect. false
なのでAWS_ECR_ACCOUNT_URLのまま書こう。
Ref
Persist_to_workspace Hanging - 2.0 Support - CircleCI Discuss
aws-ecs/deploy-service-update
あまりにシンプルだったのでメモがない
感想
Orb初めて触ったが項目が少ないので良い。