CircleCI 2.0 で AWS CodeDeploy を使う
まず、 CircleCI 1.0 で CodeDeploy を使っているという前提で話を進めます。
そのため、デプロイ先のインスタンスへの CodeDeploy エージェントインストールなどについては触れません。
先に示すこれは失敗する例です。
成功する例はこの記事の一番最後に書いてあります。
.circleci/config.yml
version: 2 jobs: deploy: working_directory: ~/repo docker: - image: naughtldy/circleci-node-awscli:8 steps: - checkout - run: name: zip command: "zip -r master ../repo" - run: name: zip upload command: aws s3 cp master.zip s3://{バケット名}/{ファイル名} --region ap-northeast-1 - run: name: Deploy Staging command: | aws deploy create-deployment \ --application-name bot-ryuzu \ --deployment-group-name ryuzu-prod \ --s3-location bucket="{バケット名}",bundleType="zip",eTag=`aws s3api head-object --bucket {バケット名} --key {ファイル名} | jq .ETag`,key="{ファイル名}" \ --region ap-northeast-1 workflows: version: 2 deploy: jobs: - deploy: filters: branches: only: master
実行結果は、 appspec.yml が無いという理由でデプロイに失敗します。
CircleCI 1.0 で動いていたので、ファイルが不足するなどの理由はないはずなので CircleCI 1.0 のときと比較してみます。
デプロイしたソースコードは、 CodeDeploy によるデプロイ先インスタンスの
/opt/codedeploy-agent/deployment-root/{英数字の羅列}/
ここにデプロイIDごとにディレクトリが分かれて入っています。
以前の成功していた時のものを見てみると、デプロイIDのディレクトリの中身は
bundle.tar deployment-archive logs
となっています。
CodeDeploy でデプロイするソースコードなどは deployment-archive
の中に入ってます。
失敗する場合は
bundle.tar deployment-archive repo
となります。
repo
はCircleCIでのソースコード展開先のディレクトリ名です。
そうすると、 CodeDeploy のイベント BeforeInstall
で、ディレクトリ deployment-archive
の中に appspec.yml が無いというエラーで CodeDeploy の実行に失敗します。
確認してみると deployment-archive
の中身が空で、ソースコードなどは repo
に入っています。
こちらが成功する例です。
.circleci/config.yml
version: 2 jobs: deploy: working_directory: ~/deployment-archive docker: - image: naughtldy/circleci-node-awscli:8 steps: - checkout - run: name: zip command: "zip -r master ../deployment-archive" - run: name: zip upload command: aws s3 cp master.zip s3://{バケット名}/{ファイル名} --region ap-northeast-1 - run: name: Deploy Staging command: | aws deploy create-deployment \ --application-name bot-ryuzu \ --deployment-group-name ryuzu-prod \ --s3-location bucket="{バケット名}",bundleType="zip",eTag=`aws s3api head-object --bucket {バケット名} --key {ファイル名} | jq .ETag`,key="{ファイル名}" \ --region ap-northeast-1 workflows: version: 2 deploy: jobs: - deploy: filters: branches: only: master
working_directory: ~/deployment-archive
で、 CircleCI のソースコード展開先ディレクトリ名を deployment-archive
にしたことで、 デプロイ先インスタンスの deployment-archive
にソースコードが入り今まで通りにデプロイできるようになりました。