1. yamotuki

    Posted

    yamotuki
Changes in title
+ElasticBeanstalk の複数環境に対してCircleCI Workflowで同じアプリケーションバージョンのコードをデプロイする
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,69 @@
+
+CircleCI Workflow ではテストを通した後に待たせておいて、任意のタイミングでワンクリックでデプロイするという 方法をとることができます。
+この記事では特に、AWS ElasticBeanstalk の複数の環境に一気通貫で同じバージョンのアプリケーションをデプロイする方法について書きます。
+具体的用途としては、WebアプリケーションとWorker環境の二つに同じコードがある必要がある場合に両方に同じコードをデプロイしておきたいというような形を想定しています。
+
+こちらはCircleCI Workflow 実行時の画面イメージです。
+![貼り付けた画像_2019_11_22_12_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144064/c115a12e-1ea1-769a-c1c2-e4fcaf50910b.png)
+
+テストが通った状態で止まっており、 require-testsのところがクリック可能になって、クリックするとデプロイが始まります(テスト終わった直後は一回リロードしないとクリック可能にならないのでそこだけ注意)
+
+`.circleci/config.yml` に CircleCI Workflow の設定を書くことができます。
+前提となるセットアップについては省略し、公式ドキュメントなどにお任せします。
+
+```.circleci/config.yml
+version: 2
+jobs:
+ test-js:
+ # ここは今回は省略
+ test-php:
+ # ここは今回は省略
+
+ deploy-to-dev:
+ docker:
+ - image: circleci/python:3.6.4
+ working_directory: ~/repo
+ steps:
+ - checkout
+ - run:
+ name: Install awscli
+ command: |
+ sudo pip install --upgrade pip
+ sudo pip install awsebcli --upgrade
+ - run:
+ name: Create AWS credentials manually
+ command: |
+ mkdir ~/.aws
+ touch ~/.aws/config
+ chmod 600 ~/.aws/config
+ echo "[profile eb-cli]" > ~/.aws/config
+ echo "aws_access_key_id=$AWS_ACCESS_KEY_ID" >> ~/.aws/config
+ echo "aws_secret_access_key=$AWS_SECRET_ACCESS_KEY" >> ~/.aws/config
+ - run:
+ name: Deploying to dev app 1
+ command: eb deploy my-appliation-1 > /tmp/eb_deploy_output
+ - run:
+ name: Deploying to dev app 2
+ # こういう感じのアウトプットを期待してダブルクオートの中を取り出しています。 => Creating application version archive "app-2019-11-18-2-57-gd83f8-6547657_104221".
+ command: eb deploy my-application-2 --label `cat /tmp/eb_deploy_output | grep "version archive" | sed -E 's/.*\"(.*)\".*/\1/'`
+
+workflows:
+ version: 2
+ build-and-test-approval-deploy:
+ jobs:
+ - test-js
+ - test-php:
+ requires:
+ - test-js
+ # 前提としてtestが通っていて、許可したらデプロイするというのをするなら type: approval を使う。
+ - require-tests:
+ type: approval
+ requires:
+ - test-php
+ - deploy-to-dev:
+ requires:
+ - require-tests
+```
+
+`--label` を**指定せずに** eb deploy を複数回実行することもできるかと思いますが、それだと環境が増えるとElasticbeanstalkの管理コンソール上でみれるアプリケーションバージョンが複数発行されてしまい、邪魔になってしまいます。
+`--label` で以前のバージョンを指定すればその問題が起こりません。1回目の eb deploy のアウトプットを取得して整形し、2回目のeb deployコマンドの`--label`オプションの引数に渡しています。