circleciのorbを使でECR/ECSにgoアプリをデプロイするやつのテンプレ書いた

成果物

github.com

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できた。

  • AWS_ECR_ACCOUNT_URLを環境変数ぽくしない 最初、AWS_ECR_ACCOUNT_URLを ${AWS_ECR_ACCOUNT_URL} と書いたら以下のエラーが出た。
#!/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初めて触ったが項目が少ないので良い。