#目的
CircleCIとGitHubのキャッチアップのため、前回作ったS3静的サイトを更新するCD環境を作ってみました。
#流れ
1.GitHubの準備
2.CircleCIとGitHubとS3の連携
3.検証
##1.GitHubの準備
S3とローカルに保存しているだけでしたので、休眠していたGitHubアカウントを復活させ、ローカルGitと接続しました。
https://employment.en-japan.com/engineerhub/entry/2017/01/31/110000
##2.CircleCIとGitHubとS3の連携
@kenta_ojapi さんの記事を参考にさせて頂きました。ありがとうございました。
https://qiita.com/kenta_ojapi/items/221dd147944b87cee479
#検証での気づき
##1.隠しファイルも一緒にS3に保存されてしまう。
手順のyamlファイルをそのまま利用させて頂きS3とaws s3 syncコマンドを動かすことができましたが、隠しファイルの.gitファイルと.circleciファイルも同時に保存されてしましました。
そこでちょっと調べて、S3 syncのオプションに「--exclude」というものがありましたので、下記のように「AWS_S3_BUCKET_EXCLUDE」のパラメータを追加し、.gitと.circleciをS3 syncから除外してみました。
version: 2
jobs:
build:
working_directory: ~/repo
environment:
- AWS_S3_BUCKET_NAME: my-bucket-name
- AWS_S3_BUCKET_EXCLUDE: .*/*
docker:
- image: innovatorjapan/awscli:latest
steps:
- checkout
- run:
name: Deploy to S3 if branch is Master.
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then
aws s3 sync ~/repo s3://${AWS_S3_BUCKET_NAME}/ --exact-timestamps --delete --exclude "${AWS_S3_BUCKET_EXCLUDE}"
fi
##2.environmentのパラメータ値の前に半角スペースが必要
これはCircleCiのエラーで気づいたミスなのですが、「AWS_S3_BUCKET_NAME:my-bucket-name」ではなく「AWS_S3_BUCKET_NAME: my-bucket-name」のようにパラメータの値の前に半角スペースが必要でした。
#今後について
Test環境と本番環境のmaster/branchへのPushの挙動に合わせ、デプロイ先を変更するようなCircleCIの設定(まだ何というかわからない)に変えていきたいと考えてます。他人の作ったJenkinsのbuild.xml数十ファイルを読み解いて頃を思い出し、各種設定のパラメータ化に努めたいです。。。