冥冥乃志

ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。

follow us in feedly

ScalaプロジェクトをCircleCIで特定のブランチのみビルドしてDockerHubにプッシュしてみた

本当なら前回で片つけるつもりだったんですが、踏み抜いてしまいましたので別エントリに。ってか今回はほぼ公式をなぞっただけ。

CircleCIでDockerイメージをビルドしてDockerHubにpushする

circleci.com

公式にそのまんまサンプルがあるので参考にしましょう。

やるべきことは 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されていないことを確認しましょうか。

f:id:mao_instantlife:20151021074057p:plain

テスト後のデプロイ処理が走っていません。

masterにmerge

プルリクエストを出してmasterにmergeします。

f:id:mao_instantlife:20151021074109p:plain

テスト後のデプロイ処理がちゃんと走っています。

まとめ

開発の足回りを整備して、CI/CDを回せるようにしてみました。大抵のことは無料のサービスでできる時代になりましたね。足回りのメンテナンスにあまり手をかけなくていいので、素晴らしいことです。

ちなみに、デプロイまでちゃんとやろうとすると11分かかることになりました。この辺の処理時間的にはまだまだ改善の余地はありそうです。