【メモ】 CircleCI 2.0 でGitHubのmasterブランチとS3を同期させる

circleci.png


version: 2.1
orbs:
aws-cli: circleci/aws-cli@0.1.13
jobs:
build:
working_directory: ~/repo
environment:
- AWS_S3_BUCKET_NAME: your-s3-bucket-name
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}/ --delete --storage-class REDUCED_REDUNDANCY
fi


事情があってあれこれ試行錯誤したんですけど、最終的にはこちらの記事を全面的に参考にしてあっさり終わりました。


CircleCIからAWS S3にアップロードする – Qiita




実は1.0からの移行でした

最近よく出てくる昨年末に退職した前任者が設計した職場の開発環境の話です。

現在進行中のプロジェクトにおいて、masterブランチにマージすると自動的にS3に同期される(実質的にデプロイ)仕組みが組み込まれています。プロジェクト自体、masterブランチをそのまま公開することを目的としたものではない(非公開領域でサイトの制作が完成したことを確認したのち、現行の本番環境で移行作業を行う)ので、このデプロイはいわゆるリリースではなくてあくまで非技術者向け動作確認のためのリリースを目的としたものです。業務の流れはこんな感じ。

  1. サンプル用ディレクトリに静的ページのデザインサンプルを作成する
  2. ローカルで確認後、masterにpush
  3. 自動で発行されるS3のURLをクライアントに送信
  4. 動作確認後、仕様の調整を行って1に戻る


めちゃくちゃ便利!っていうほどではないけれど、S3に上げるのはまあまあ面倒なので維持しておきたい機能ではあります。
(個人的にはmasterブランチじゃない方が良かったんじゃないの?と思いますが)


が、引き継ぎ後のバタバタでプロジェクトがしばらく停止している間に、CircleCI 1.0が停止されてしまいまして、この機能を維持したかったら2.0に合わせて設定を変えなくてはならなくなりました。

やることはシンプルで、

  • circle.ymlを2.0の書式に変更する
  • .circleci/config.ymlとしてアップロードする

の2つだけです。

しかしそれがねえ……書式が全然違うんでわかりにくいんですよね。一応公式の移行ツールはあるんですけど、まったく役に立ちませんでした。移行ツールで作られたconfig.ymlには、S3にsyncするコマンドがないでやんの。意味ないじゃん。


仕方がないので「移行」は諦めて、欲しい機能を検索してイチから作ることにしました。作り込んでなくて良かった。助かった。

……ということで出来たのが上にあるymlファイルです。



ちなみにAWSのSECRET_KEYなどの設定について、従来はCircleCIのプロジェクトに設定することになっていましたが、いまは仕様が変わって自分で設定ファイルを用意する必要があるようです……ってまだやってないんですけど。これも動かなくなるんだろうか。そのうち対応します。