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分かかることになりました。この辺の処理時間的にはまだまだ改善の余地はありそうです。