先日公開したPHPマニュアル日本語版ビルド用Dockerイメージ(iwamot/phd-ja)について、CircleCI でテストにパスした場合にだけ、イメージを Docker Hub にプッシュするようにしてみました。
ただ、なんでもかんでもプッシュするわけにはいかないので、下記のように処理させています。
- master ブランチを GitHub リポジトリにプッシュした場合
- CircleCI 上でイメージをビルドし、テストにパスした場合にだけ、latest イメージが Docker Hub にプッシュされます。
- タグを GitHub リポジトリにプッシュした場合
- CircleCI 上でイメージをビルドし、テストにパスした場合にだけ、同名タグ付きのイメージと latest イメージが Docker Hub にプッシュされます。
- master 以外のブランチを GitHub リポジトリにプッシュした場合
- CircleCI 上でイメージをビルドし、テストします。パスしても Docker Hub にはプッシュしません。
- パスしなかった場合、そのブランチから master ブランチへのプルリクエストはマージできません(GitHub の「Branch protection rules」を利用)。
処理の詳細は .circleci/config.yml で定義されています。実装にあたっては「CircleCI2.0でDockerをビルドしてDocker HubにPushするまで」という記事がたいへん参考になりました。
なお、テストフェーズでは「ビルドされたマニュアルのトップページが参照できること」を確認しています。下記が該当部分です。
- run: name: Run test command: docker run --network container:phd-ja appropriate/curl --retry 10 --retry-connrefused http://localhost/phd-ja/
今回ご紹介したCI環境で今は満足していますが、改善すべき点があるかもしれません。何かお気づきの方は、お知らせいただければ幸いです。