目次

まえがき

はじめに
この本を書いた理由
前提

第1章 無料で使えるCIサービス

1.1 無料とは
1.2 本書で紹介するCIサービスの前提条件
1.3 本書で紹介するCIサービス一覧
1.4 著者使用環境紹介

第2章 AppVeyor

2.1 概要
2.2 基本情報
2.3 使用事例
2.4 ナレッジ

第3章 Azure Pipelines

3.1 概要
3.2 基本情報
3.3 使用事例
3.4 ナレッジ

第4章 Bitrise

4.1 概要
4.2 基本情報
4.3 使用事例
4.4 ナレッジ

第5章 Buddy

5.1 概要
5.2 基本情報
5.3 使用事例
5.4 ナレッジ

第6章 CircleCI

6.1 概要
6.2 基本情報
6.3 使用事例
6.4 ナレッジ

第7章 Cirrus CI

7.1 概要
7.2 基本情報
7.3 使用事例
7.4 ナレッジ

第8章 Codefresh

8.1 概要
8.2 基本情報
8.3 使用事例
8.4 ナレッジ

第9章 CodeShip

9.1 概要
9.2 基本情報
9.3 使用事例
9.4 ナレッジ

第10章 Drone

10.1 概要
10.2 基本情報
10.3 使用事例
10.4 ナレッジ

第11章 GitHub Actions

11.1 概要
11.2 基本情報
11.3 使用事例
11.4 ナレッジ

第12章 Semaphore

12.1 概要
12.2 基本情報
12.3 使用事例
12.4 ナレッジ

第13章 Shippable

13.1 概要
13.2 基本情報
13.3 使用事例
13.4 ナレッジ

第14章 Travis CI

14.1 概要
14.2 基本情報
14.3 使用事例
14.4 ナレッジ

第15章 Wercker

15.1 概要
15.2 基本情報
15.3 使用事例
15.4 ナレッジ

第16章 他にもあるCIサービス

16.1 iutestで使用しているCIサービス
16.2 今後使ってみたいCIサービス
16.3 まだまだたくさんある?

第17章 環境

17.1 エージェント
17.2 環境変数

第18章 スペック

18.1 スペック調査方法
18.2 スペック比較表

第19章 並列実行

19.1 並列の種類
19.2 調査方法
19.3 並列数比較表

第20章 YAML

20.1 アンカーとエイリアス
20.2 マップのマージ
20.3 アンカー/エイリアスはセパレーターを超えられない
20.4 アンカー/エイリアスとマージの対応表

第21章 コミットコメントコマンド

21.1 Skipコミットコメントコマンド

第22章 シェア

22.1 YAML Configのヒット数で比較

第23章 セキュリティー

23.1 シークレット環境変数

第24章 バッジ

24.1 CIサービスバッジ紹介

あとがき

調査で使用したリポジトリー

まえがき

はじめに

 本書を手に取っていただき、ありがとうございます。

 本書は、無料で使うことができる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

第1章 無料で使えるCIサービス

 みなさんがCIサービスと聞いて思い浮かべるサービスは、何があるでしょうか?Travis CI, CircleCI, Jenkins, TeamCity, Bamboo, etc...「CIサービス」といっても、様々な形態が存在します。

 本章では、本書で紹介する「無料で使えるCIサービス」とは何かを定義します。

1.1 無料とは

 「無料」といえど、使用するには条件が当然あり、CIサービスによってそれぞれ異なります。

 本書では、CIサービスの利用プランを有料プランと無料プランに分けた上で、「無料プラン」を大まかに以下の3つに分類しました。以降、本書で「無料プラン」とは以下の3つのプランのうちひとつ、または複数を指すものとします。

 ・有料プラン

 ・無料プラン

  ─FREEプラン

  ─OSSプラン

  ─トライアル

FREEプラン

 ユーザーは、特に条件なく使用することができます。ただし、サービスの一部もしくは全ての機能に、何らかの制限がかかっていることがほとんどです。この制限はCIサービスによって異なるので、一概には言えませんが、ビルド回数や時間の制限、高度な機能の無効化などがあげられます。

OSSプラン

 対象がOSS(Open Source Software)であれば、使用することができるプランです。OSSプランでも何らかの制限がかかっていることが多いですが、FREEプランとOSSプラン両方を提供しているサービスの場合、OSSプランの方が制限が緩いことが多いです。

トライアル

 トライアルはその名のとおり、無料で試用ができるものです。試用期間が定められており、その期間内であれば無料で使用することができます。有料プランの高機能・高条件なプランを試用できることが多いですが、試用期間を過ぎても同条件で使い続けるには、有料プランに入る必要があります。

OSSとは?

 Open Source Softwareには、標準化団体による定義が存在しますが、CIサービスがOSS向けのプランとして求めている条件は「Publicリポジトリーであること」のみです。

1.2 本書で紹介するCIサービスの前提条件

 無料プランに関して3つの分類を提示しましたが、本書で紹介する「無料で使えるCIサービス」では、トライアルは扱いません。FREEプラン・OSSプランのどちらか、もしくは両方が提供されているサービスのみを扱います。また、プラン以外での前提条件を本節で示します。

リポジトリーのサポート

 GitHubやBitBucket、GitLabなど、CIサービスが対応しているリポジトリーは複数あり、サービスによって対応状況は異なります。本書では、GitHubに対応していることを条件としています。

ホスティング

 CIサービスには、ユーザーがサーバー環境を用意する必要がある、オプレミスタイプのものがあります。本書ではそのようなサービスは扱いません。クラウドサービス(CI as a Service)で、ユーザーがサービスにSign Upするだけで、すぐにCIを始められるものを紹介します。

サービスの種類

 CIサービスにも種類があり、静的解析などを利用したレビュー系がメインのもの、コードカバレッジをメインとしたものなどが存在します。本書では、C++のビルド・テストができることを紹介の条件としています。

著者が使ったことがある

 当たり前ですが、私が使ったことのないサービスは紹介しません。私がCIサービスを使用して開発しているプロダクトについては、「1.4 著者使用環境紹介」で紹介します。

前提条件まとめ

 ・無料で使えるプランがある(トライアルを除く)

 ・GitHub対応

 ・クラウドサービス

 ・コードレビュー・カバレッジ系のCIサービスは除く

 ・著者が使用したことがある

1.3 本書で紹介するCIサービス一覧

 本書で紹介するCIサービスを、まずは列挙します。(※アルファベット順)

 第一部ではCIサービスごとに、それぞれ機能などの紹介をします。

 第二部では機能ごとに、各CIサービスの比較をします。

 ・AppVeyor

 ・Azure Pipelines (Azure DevOps)

 ・Bitrise

 ・Buddy

 ・CircleCI

 ・Cirrus CI

 ・Codefresh

 ・CodeShip

 ・Drone

 ・GitHub Actions

 ・Semaphore

 ・Shippable

 ・Travis CI

 ・Wercker

1.4 著者使用環境紹介

 何をCIサービスでさせるかによって、サービスの使い方が異なってきます。本書の使用事例としてあげるプログラムが、どういうものか知っていただくことで、よりCIサービスの使い方がわかりやすくなると考えています。

 次のページで、私がCIサービスを使用して個人開発をしているiutestの紹介をします。簡潔に説明すると、「C++のヘッダーオンリーなテスティングフレームワーク」を作っています。興味のない方は、読み飛ばしていただいて大丈夫です。

iutest overview

 リポジトリー: 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対応

主にCIでしていること

 ・フレームワークのビルド、テスト

  ─基本的なテスト

  ─コンフィグごとのマトリックス

  ─C++言語バージョンごとのマトリックス

  ─C++コンパイラーバージョンごとのマトリックス

  ─実行環境ごとのマトリックス

 ・静的解析

 ・ドキュメント生成

 ・パッケージ作成・デプロイ

1. iutestのテストをGoogle Testで実行可能/Google Testのテストをiutestで実行可能

2. https://wandbox.org/様々な言語・バージョンに対応したオンラインコンパイラー

試し読みはここまでです。
この続きは、製品版でお楽しみください。