Go言語でのCI環境構築

kashihara
エンジニア

2015-12-01 10:55:56

PFNの柏原です。Go言語製のソフトウェアのCI(Continuous Integration, 継続的インテグレーション)環境の構築方法(導入方法)について解説します。想定としてはgithub上にホストしているOSSプロジェクトのソースツリーをCIの対象とします。OSSのpublicリポジトリなため、無料で使えるサービスを利用対象とします。

紹介する各CIサービスすべてでGo言語を扱えますが、まず最初にサービスを利用する上で各サービスについて結論から述べます。その後、各CI環境(OS、Goバージョン)、設定ファイルの例を説明します。

今回はTravis CICircleCICodeshipAppVeyor の4つのサービスを紹介します。

結論から

結論から書きますと、Linux, OS X, Windowsの各種OSプラットフォームで同時にCIを動かしたいなら、Travis CI(Linux, OS X), CircleCI(Linux), AppVeyor(Windows)のような構成で利用するとよいでしょう。Travis CIはMulti-OS Featureがあるため、1つの設定ファイルでLinuxとOS XでCIを同時に実行できそうです。

Travis CIとCircleCIはどちらも同じくらい設定は簡単そうに見えます。Travis CIのほうが老舗でCircleCIは設定記述がモダンな印象があります(CircleCIの公開日を調べていませんが…)。CircleCIは所々モダンさを感じるところですが(設定記述の省力化)、かえって設定が省略されすぎており、また、ドキュメントから設定方法が探しづらい面もあります。その点のバランス加減は、採用者の好みがわかれるところでしょう。また、Travis CIはsudoコマンドが扱えるため、追加のバイナリパッケージをインストールできたりするのが便利かもしれません。ここはTravis CIがVMとコンテナ型の両方の形式をサポートしている強みです。
Codeshipはビルドログが非公開な点がOSSには向いてなさそうです。また、使い方・環境情報のようなドキュメントが他サービスと比べて少なく、比較したり調べづらいです。具体的にはCIの実行環境情報が少ないのが難しいところです。

Windowsも使うならAppVeyorがあります。必要そうなソフトウェアはおおよそ揃っているように見えます(Installed Software)。実行環境は64ビットCPU(x64)ですが32ビットバイナリも提供されています。他サービスとの細かい比較はしていませんが、必要十分な機能が揃っていると感じました。

特徴としてはTravis CIはVMベース/コンテナ型の両方を採用してるようです。CircleCIはコンテナ型、CodeshipはDockerらしい記述がドキュメントから見つかります。AppVeyorは特に見ていませんが、WindowsなのでVMベースみたいですね。

各サービスいずれも、ビルド結果の通知にはE-Mailやチャット(Slack、HipChat)などに対応しているようです。

Goリポジトリのサンプル

設定ファイルは後に貼り付けますが、リポジトリ及びバッジ(ビルドステータス)などを確認したい場合は以下のリポジトリを参照してください。わざとテストが失敗するようなコードを書いています。