docker-composeをサポートしたCodefreshというCIサービスを使ってみた

CodefreshというDockerを使えるCIサービスがあるので雑に触ってみたというエントリです。

Docker-Native Continuous Integration and Delivery with Codefresh

プラン

プランについては各自確認してほしいんですが、基本的にPublicなリポジトリを扱い並列ビルドが要らなければ無料で使うことができます。

  • Open SourceプランでもGitHub/BitBucket/DockerHub/Slackは対応
  • Basic($99/month)からは並列ビルドができ、プライベートリポジトリも扱うことができる
  • Pro($299/month)からはJenkinsやbintrayとも連携ができ、インフラは共有領域ではなく専有領域を用意してもらえる。**On-Premise Git Support**という記述があるので、GitHub EnterpriseやGitlabも使えそう

使ってみる

早速使ってみる。CIしたいリポジトリをポチポチ選択していくというよくあるスタイルだし、手順は以下のドキュメント見ればわかるのでここでは割愛。

Codefresh | Docs

Goで適当なWebサーバを書いてみて、そいつを連携してみました。ポチポチやってくとビルドが始まります。

Codefreshでは、これはServiceと定義しています。1リポジトリがServiceという考え方。

Lanuchする

基本的にBuildLaunchのアクションがあって、ビルドしてできあがったDockerイメージからDockerコンテナをLanuchから走らせることができます。普通のCIの機能とngrokの機能を合わせ持ったという感じでしょうか。

LanuchされたService(コンテナ)はEnvironmentで確認できます。

デプロイされたURLが表示されるので、実際に以下のようにHTTPリクエストを投げられます。

$ curl http://cf-aec1-docker-node-0009.cf-cd.com:32795/
Hello!%

Composition

その他にCompositionという概念があります。何かというと、テストしたいサービスが他のミドルウェアやMicroservicesに依存している場合、このComposition機能を使ってその依存コンポーネントを作ることができます。

Compositionはdocker-compose V2形式のYAMLで定義することができるというのが大きな特徴。なので、依存するミドルウェアやMicroservicesをdocker-composeで動かすことができるように整備しておけば、コンポーネント連携したテスト・動作確認が可能ということですね。

さっきのService(コンテナ)とCompositionを連携させるには、Service側でCompositionを指定してやればOK。

しかし、既にServiceが1つあがっているので新たにCompositionを立ち上げることができなかった。

OpenSourceプランではConcurrencyが1つまでなので、Compositionが力を発揮するのは課金してからだと思う。

感想

ビルドしてそのままコンテナをLanunchできるのはなかなか面白い。CircleCIとかでもdocker-compose入れてやればCompositionは実現できそう(すごい手間そうだけど)。