ソース管理と連動して、ビルドと単体テストを自動でやってくれるCIツールについて調べてみました。
2019年の主要っぽいCIツール
プログラムソースを修正して、コミット&プッシュすると裏でガチャガチャッと仕組みが動いて、自動でビルド・テストしてくれて、はー便利!というCIツール。
実質、1文字でもコード修正したら単体テストが自動実行されるため、プロジェクト後半でしょうもないバグのせいで調査に3日かかった、とかいうトラブルが減らせるんですね。
ふむふむ、いいじゃないかCIツール。
CIツールを検索すると、そこそこ有名なものだけでも30個近く見つかりました。その中で、有名そうなのがJenkins、GitLab、CircleCIの3つ。選定基準は、日本語情報の多さです。
それぞれ、どういう特徴があるのか、調べてみました。
Jenkins 汎用性高い老舗ツール
CIツールで調べていくと、一番多く名前が出てくるのがJenkins(ジェンキンス)1992年ぐらいから存在するツールで、情報の多さではピカ一です。
だけど、自由度が高い分、使いこなすのに時間がかかるのが難点。チームに導入しようとすると、Jenkins担当者という名のヘルプデスクを置かないと回しにくそうな感じ。
いったん構築してルールが出来てしまえば、ただ利用するだけの開発者にとっては良いツールなのかも。
Jenkinsが複雑すぎるせいか、2018年にはGit/Docker/Kubenetesという3環境に特化したJenkins-Xが誕生。使い勝手が良くなったという噂です。※Kubenetesは、コンテナのクラスター化ソフトウェア。
GitLab ソース管理とCIツールが一体化
GitLabは、Githubについでナンバ-2と言われているGitベースのソース管理システム。オープンソースです。
GitHubと違って、企業のローカル環境にオンプレミスサーバを置いてソース管理すれば、完全無料。セキュリティポリシーがうるさい会社でも導入しやすいです。
CIツールは、ソース管理システムと一体化しているので連携には一切の手間なし。しっかり日本語化もされていて、メンバーへの教育コストもあまりかけずに済みそうです。
現時点で、CIツールを導入するなら一番確率が高そうなツールです。
CircleCI キャッシュでビルド・テストの高速化
使い勝手はGitLabに劣るのですが、キャッシュ機能によってビルドとテストの時間を短縮しているのが特徴。
Welcome to CircleCI Documentation – CircleCI
最近のCIツールは、ビルドのたびにdockerコンテナを起動して、必要なら各種モジュールを都度インストールしてから処理をおこないます。
CIツール環境が非力だと「ビルドが遅い」というのは、けっこうよくあるんですね。そこで、使い回しできる状態のdockerコンテナをキャッシュして使いまわします。
例えば、基本コンテナにPythonの必要モジュールをpip install済みのコンテナをキャッシュしておけば、毎回モジュールインストールせずに済むんですね。
他のCIツールを試して「ビルドが遅い…」ってなってから導入を検討するツールだと思います。ただ、現時点でGitLabに対応していなくて、ソース管理はGithubかGithub Privateしか選べないのが惜しすぎます。
ソース管理は、Githubか、Gitlabか
一般的な開発なら、ソース管理はローカル環境でやりたいもの。
Github、Gitlabともにクラウド環境でもローカル環境でもいちおう使えます。Githubのローカル環境版?はGithub Enterpriseで、セキュアな環境にソースを置いて管理したいというニーズに答えるものなのだとか。お値段はけっこう張るようです。
Gitlabはオープンソースなので、自社内にオンプレミスで環境を作ればタダで使えます。そのぶん、サーバの運用は必須になってきますけども…。
中小企業なら、Gitlabを選ぶケースが多いのかなぁと思います。
結論 今、CIツールを導入するならGitlab
初期費用がかからず、クラウドにもオンプレミスにも対応していて、CIツールの機能がもともとついているのがGitlab。一択でしょう、こんなの。
だけど、運用を続けていくうちに「ビルドが遅くて話にならない」という状況になってきたら、CircleCIも検討してみるかな。
Jenkinsは、とにかく面倒くさいという話なので、Gitlabで致命的な欠陥が見つからない限りは敬遠したいです。
次回は、Gitlabを実際に使ってみたいと思います。