CodefreshというDockerを使えるCIサービスがあるので雑に触ってみたというエントリです。
プラン
プランについては各自確認してほしいんですが、基本的にPublicなリポジトリを扱い並列ビルドが要らなければ無料で使うことができます。
- Open SourceプランでもGitHub/BitBucket/DockerHub/Slackは対応
- Basic($99/month)からは並列ビルドができ、プライベートリポジトリも扱うことができる
- Pro($299/month)からはJenkinsやbintrayとも連携ができ、インフラは共有領域ではなく専有領域を用意してもらえる。On-Premise Git Supportという記述があるので、GitHub EnterpriseやGitlabも使えそう
使ってみる
早速使ってみる。CIしたいリポジトリをポチポチ選択していくというよくあるスタイルだし、手順は以下のドキュメント見ればわかるのでここでは割愛。
Goで適当なWebサーバを書いてみて、そいつを連携してみました。ポチポチやってくとビルドが始まります。
Codefreshでは、これはServiceと定義しています。1リポジトリがServiceという考え方。
Lanuchする
基本的にBuildとLaunchのアクションがあって、ビルドしてできあがった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は実現できそう(すごい手間そうだけど)。