まえがき
第1章 無料で使えるCIサービス
第2章 AppVeyor
第3章 Azure Pipelines
第4章 Bitrise
第5章 Buddy
第6章 CircleCI
第7章 Cirrus CI
第8章 Codefresh
第9章 CodeShip
第10章 Drone
第11章 GitHub Actions
第12章 Semaphore
第13章 Shippable
第14章 Travis CI
第15章 Wercker
第16章 他にもあるCIサービス
第17章 環境
第18章 スペック
第19章 並列実行
第20章 YAML
第21章 コミットコメントコマンド
第22章 シェア
第23章 セキュリティー
第24章 バッジ
あとがき
本書を手に取っていただき、ありがとうございます。
本書は、無料で使うことができるCIサービスを独自にまとめた本です。主に、個人で開発されている方のCI/CD環境の選択・構築の参考にしていただくことを目的としております。
商用・仕事での利用ケースには、有料プランを含めた料金や機能の比較が必要になると思いますが、本書では取り扱いませんのでご了承ください。
個人的に開発をしているプログラムのCIにTravis CIを使ったのが、CIサービスとの出会いでした。もともとはローカル環境でJenkinsを使っていましたが、テストが増えるにつれ、テスト時間が問題になりました。ローカル環境のPCスペックが低かったこともありますが、クラウドサービスの手軽さから、次第にそちらがメインになっていきました。しかしながら、クラウドサービスを使ったとしても、ビルド時間の問題は生じます。その回避策として、たくさんのCIサービスを使うようになりました。そして、ついにはCIサービスのバッジを集めるのが趣味になりました。
ひとつのリポジトリーで、ここまでCIサービスを使っているリポジトリーは、他にはないんじゃないか、と自負しております。複数のCIサービスを使っていると、メンテナンスの苦労やサービス終了の悲しみに直面することも多々あります。しかしながら、様々な処理を同時に動かすことができるので、複数CIサービスを使うことは、私としてはオススメです(業務や有料プランを使う場合は、ひとつもしくは少数のCIサービスをフル活用するほうが良いと思ってます)。
本書を通じてCIサービスを知っていただくことで、個人・OSS開発の助けとなれば幸いです。
・様々なCIサービスの存在
・各サービスの良いところ・良くないところ
・個人開発プログラムでのCIサービスの使用事例や知見
・CIサービスに興味がある方
・個人開発・OSS開発をしている方
エージェント(Agent)
CIサービスから実行されるジョブが動作する環境(マシン)。CIサービスが提供しているものと、ユーザーがローカルやコンピューティングサービスで作成した環境で実行可能なセルフエージェントがある。
Dockerコンテナ / VM(Virtual Machine)
CIサービスによって、エージェントがコンテナの場合と、VMの場合があります。
オンプレ(オンプレミス)・セルフホスティング
ユーザーの環境にシステムを構築して運用する。CIでは、Jenkinsをオンプレミスで使っているところが多いと思います。クラウドと対比で使用されることが多い。
ビルドタイムアウト
多くのCIサービスは、ビルド時間が長くなると中断されます。ビルドタイムアウトは、ビルド全体の時間でタイムアウトするものと、ログ無出力状態が続くとタイムアウトするものがあります。本書では前者をビルドタイムアウト、後者を無出力タイムアウトと呼びます。
ブランチフィルター
特定のブランチのみ、もしくは特定のブランチを除いてジョブを実行する機能。ビルド回数制限のあるCIサービスでは、実行回数を削減するためにも利用したりします。
GUI Config / YAML Config
CIの設定方法の種類。本書では、パイプラインやジョブの設定をWeb GUI上で設定するものをGUI Config、リポジトリーの所定の場所に配置されたYAMLファイルで設定するものをYAML Configと呼びます。
・URL: https://github.com/srz-zumix/ci-dex-book
・Mail: zumix.cpp@gmail.com
・Twitter: @srz_zumix
みなさんがCIサービスと聞いて思い浮かべるサービスは、何があるでしょうか?Travis CI, CircleCI, Jenkins, TeamCity, Bamboo, etc...「CIサービス」といっても、様々な形態が存在します。
本章では、本書で紹介する「無料で使えるCIサービス」とは何かを定義します。
「無料」といえど、使用するには条件が当然あり、CIサービスによってそれぞれ異なります。
本書では、CIサービスの利用プランを有料プランと無料プランに分けた上で、「無料プラン」を大まかに以下の3つに分類しました。以降、本書で「無料プラン」とは以下の3つのプランのうちひとつ、または複数を指すものとします。
・有料プラン
・無料プラン
─FREEプラン
─OSSプラン
─トライアル
ユーザーは、特に条件なく使用することができます。ただし、サービスの一部もしくは全ての機能に、何らかの制限がかかっていることがほとんどです。この制限はCIサービスによって異なるので、一概には言えませんが、ビルド回数や時間の制限、高度な機能の無効化などがあげられます。
対象がOSS(Open Source Software)であれば、使用することができるプランです。OSSプランでも何らかの制限がかかっていることが多いですが、FREEプランとOSSプラン両方を提供しているサービスの場合、OSSプランの方が制限が緩いことが多いです。
トライアルはその名のとおり、無料で試用ができるものです。試用期間が定められており、その期間内であれば無料で使用することができます。有料プランの高機能・高条件なプランを試用できることが多いですが、試用期間を過ぎても同条件で使い続けるには、有料プランに入る必要があります。
Open Source Softwareには、標準化団体による定義が存在しますが、CIサービスがOSS向けのプランとして求めている条件は「Publicリポジトリーであること」のみです。
無料プランに関して3つの分類を提示しましたが、本書で紹介する「無料で使えるCIサービス」では、トライアルは扱いません。FREEプラン・OSSプランのどちらか、もしくは両方が提供されているサービスのみを扱います。また、プラン以外での前提条件を本節で示します。
GitHubやBitBucket、GitLabなど、CIサービスが対応しているリポジトリーは複数あり、サービスによって対応状況は異なります。本書では、GitHubに対応していることを条件としています。
CIサービスには、ユーザーがサーバー環境を用意する必要がある、オプレミスタイプのものがあります。本書ではそのようなサービスは扱いません。クラウドサービス(CI as a Service)で、ユーザーがサービスにSign Upするだけで、すぐにCIを始められるものを紹介します。
CIサービスにも種類があり、静的解析などを利用したレビュー系がメインのもの、コードカバレッジをメインとしたものなどが存在します。本書では、C++のビルド・テストができることを紹介の条件としています。
当たり前ですが、私が使ったことのないサービスは紹介しません。私がCIサービスを使用して開発しているプロダクトについては、「1.4 著者使用環境紹介」で紹介します。
・無料で使えるプランがある(トライアルを除く)
・GitHub対応
・クラウドサービス
・コードレビュー・カバレッジ系のCIサービスは除く
・著者が使用したことがある
本書で紹介するCIサービスを、まずは列挙します。(※アルファベット順)
第一部ではCIサービスごとに、それぞれ機能などの紹介をします。
第二部では機能ごとに、各CIサービスの比較をします。
・AppVeyor
・Azure Pipelines (Azure DevOps)
・Bitrise
・Buddy
・CircleCI
・Cirrus CI
・Codefresh
・CodeShip
・Drone
・GitHub Actions
・Semaphore
・Shippable
・Travis CI
・Wercker
何をCIサービスでさせるかによって、サービスの使い方が異なってきます。本書の使用事例としてあげるプログラムが、どういうものか知っていただくことで、よりCIサービスの使い方がわかりやすくなると考えています。
次のページで、私がCIサービスを使用して個人開発をしているiutestの紹介をします。簡潔に説明すると、「C++のヘッダーオンリーなテスティングフレームワーク」を作っています。興味のない方は、読み飛ばしていただいて大丈夫です。
リポジトリー: https://github.com/srz-zumix/iutest
ドキュメント: http://srz-zumix.github.io/iutest/
C++(03/11/14/17/2a..)
・Header Only
・Google Testライクなインターフェイス
・Google Test互換性対応
─iutest / Google Test 相互にテストの記述が利用可能1
─Google Testの拡張機能を提供
・Power Assert対応
・INFORM/ASSUMEフレーバー
・高度なパラメタライズドテストのパラメータ生成
─Pairwise
─From CSV/TSV file
─Any/Random
─パラメータ生成器の結合
・テストのグルーピング対応
・Privateメンバーのテスト機能
・C++03でも日本語でテストが書ける
・Wandbox2API対応
・フレームワークのビルド、テスト
─基本的なテスト
─コンフィグごとのマトリックス
─C++言語バージョンごとのマトリックス
─C++コンパイラーバージョンごとのマトリックス
─実行環境ごとのマトリックス
・静的解析
・ドキュメント生成
・パッケージ作成・デプロイ