ScalaプロジェクトをCircleCIで特定のブランチのみビルドしてDockerHubにプッシュしてみた
本当なら前回で片つけるつもりだったんですが、踏み抜いてしまいましたので別エントリに。ってか今回はほぼ公式をなぞっただけ。
CircleCIでDockerイメージをビルドしてDockerHubにpushする
公式にそのまんまサンプルがあるので参考にしましょう。
やるべきことは circle.yml にdockerのサービス連携の設定を追加するのと、DockerHubへのpushする処理を追加してあげるだけです。
machine:
services:
- docker
general:
artifacts:
- "target/scala-2.11/coverage-report"
dependencies:
cache_directories:
- graphviz-2.38.0
- "~/.ivy2"
- "~/.sbt"
pre:
- wget -q https://dl.bintray.com/sbt/debian/sbt-0.13.8.deb
- sudo dpkg -i sbt-0.13.8.deb
- wget -O graphviz.tar.gz --quiet http://www.graphviz.org/pub/graphviz/ARCHIVE/graphviz-2.38.0.tar.gz
- tar -zxf graphviz.tar.gz
- graphviz-2.38.0/configure --silent
- make --silent --ignore-errors && make --silent --ignore-errors install > /dev/null
- echo 'which dot && version:'
- which dot
- dot -V
- sudo apt-get -y install pandoc
test:
override:
- "sbt clean coverage test"
post:
- "sbt coveralls"
deployment:
hub:
branch: master
commands:
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- sbt dockerBuildAndPush
machine に設定しているのがdockerのサービス連携です。これで、CircleCIのコンテナの中でdockerコマンドが使えるようになります。また、特に sudo はいらない模様。
delopyment に設定しているのがDockerHubへのpush設定です。対象ブランチをmasterのみにして、DockerHubへのpushをしています。DockerHubリポジトリのログイン情報はCircleCIプロジェクトの環境変数として設定、イメージのbuildとpushはsbtプラグインを使っています。
developに変更をpush
とりあえずdevelopブランチで変更をpushして、DockerHubにpushされていないことを確認しましょうか。

テスト後のデプロイ処理が走っていません。
masterにmerge
プルリクエストを出してmasterにmergeします。

テスト後のデプロイ処理がちゃんと走っています。
まとめ
開発の足回りを整備して、CI/CDを回せるようにしてみました。大抵のことは無料のサービスでできる時代になりましたね。足回りのメンテナンスにあまり手をかけなくていいので、素晴らしいことです。
ちなみに、デプロイまでちゃんとやろうとすると11分かかることになりました。この辺の処理時間的にはまだまだ改善の余地はありそうです。