はんなりと、ゆるやかに

アジャイル、スクラムが好きが日々から学んだことをアウトプット

わずか6ステップ!CircleCI 2.1 で手軽にCI環境を構築する(windows+dotnet)

f:id:iucstscui:20200312162147p:plain

はじめに

普段はJenkinsを使っていますが、勉強のためCircleCI 2.1を導入しましたので、手順をまとめておきます。
驚くほど簡単に導入(ビルドまで)できました。

CircleCIとは

circleci.com

継続的インテグレーション(CI) サービスの1つです。
CIとはビルド、テスト、デリバリーというプロセスを自動化して信頼性の高いソフトウェアを開発するための手法で、他にはJenkinsが有名です。

Jenkinsは自前でサーバーを用意する必要がありますが、CircleCIはクラウドサービス*1ですので専用のサーバーを用意しなくても構築できます。
(JenkinsとCircleCIは得意とする部分が違うので両方のメリット・デメリットを把握して開発に合う方を選ぶと良いと思います。)

無料プランもあるので、個人で開発する場合でも手軽に開始することが出来ます。
circleci.com

導入手順

1 対象のGitHubリポジトリを用意

CircleCIはGitHubと連携するサービスです。事前にGitHubのアカウントとリポジトリを用意しましょう。
以下は今回の勉強用に作成したリポジトリです。
github.com

2 GitHubアカウントでログイン

ユーザー登録画面の「GitHubでログイン」をクリックします。
circleci.com

f:id:iucstscui:20200312010615p:plain

3 GitHubとCircleCIの認証を許可

GitHubと連携する認証画面になりますので、Authorize circleci ボタンで認証します。
f:id:iucstscui:20200312011001p:plain

4 チェックするリポジトリを設定

GitHubリポジトリが表示されるので、対象のリポジトリの右にある「Set Up Project」をクリックします。
f:id:iucstscui:20200312011133p:plain

5 CircleCIの設定ファイルを作成

configファイルのテンプレートを選択する画面が表示されます。C#のプロジェクトだったので自動で「.NET」が選択されていました。すごい!!
「Start Building」をクリックします。
f:id:iucstscui:20200312011220p:plain

追加されるブランチとファイルの確認画面で「Add Config」をクリックすると完了です。
f:id:iucstscui:20200312011608p:plain

6 完成

自動でビルドが走り、結果が表示されます。これ以降はGitHubにPushするたびビルドが走ります。とても簡単!
f:id:iucstscui:20200312011814p:plain

問題なければGitHub側で作られたブランチ「circleci-project-setup」をマージしておきましょう。

ビルドエラーになるブランチをプッシュすると正しくエラー検知してくれました。
f:id:iucstscui:20200312155129p:plain

自動で作られるテンプレートの理解

.circleci/config.yml がCircleCIの設定ファイルです。今回は自動で作られたテンプレートを使っていますが、各開発に合わせて設定ファイルを更新していくことになります。
今回は自動で作られたテンプレートを理解したいと思います。

自動で作られたテンプレート

 version: 2.1

 orbs:
  win: circleci/windows@2.2.0

 jobs:
   build:
     executor: win/default     
    
     steps:
       - checkout
       - run: dotnet build

version: 2.1

CircleCIのバージョンです。将来的に古いバージョンに向けて警告を出すために使われます。

orbs

CircleCI Orbs は、ジョブ、コマンド、Executor のような設定要素をまとめた共有可能なパッケージです。 CircleCI 独自の認証済み Orbs のほか、パートナー企業によるサードパーティ製 Orbs を用意しています。
Orbs とは - CircleCI

Orbという単位でCircleCIの設定を共有する仕組みがOrbsですね。記述が多くなったり複雑になりがちな設定をパッケージ化して使いまわすことが出来ます。認証済みのOrbs一覧はこちらで公開されています。
circleci.com

win: circleci/windows@2.2.0

Windows用のorbの指定です。リンク先の設定内容を見ると記述も多いのでorbsがあることで簡単にCircleCIが使えるんだと実感できます。
https://circleci.com/orbs/registry/orb/circleci/windows

jobs

ジョブはステップの集まりです。 ジョブ内のステップはすべて 1単位として実行され、その際にプランから CircleCI コンテナが 1つ消費されます。
Orbs、ジョブ、ステップ、ワークフロー - CircleCI

JenkinsのStageに近いかなと理解しました。最小実行単位のステップをまとめる記述です。

build

Workflows を 使わない 場合は、jobs マップ内に build という名前のジョブを用意します。build ジョブは GitHub など VCS によるプッシュをトリガーとして実行する際のデフォルトのエントリーポイントとなります。
CircleCI を設定する - CircleCI

テンプレートではWorkflowsが使われていないのでbuildジョブが実行されます。
Workflows はジョブの実行を制御する仕組みです。
circleci.com

executor: win/default

Executors は、ジョブのステップが実行される環境を定義します。 win/defaultの内容は前述のorbに書かれています。

steps

ステップの実行順を設定します。ステップはCircleCIの最小実行単位です。

- checkout

GitHubソースコードをチェックアウトするコマンドです。
今回はサブモジュールを使っていませんが、使っている場合はサブモジュール向けに以下の設定を書く必要があります。

- checkout
- run: git submodule sync
- run: git submodule update --init

- run: dotnet build

dotnetのビルドが実行されます

さいごに

CircleCIを使うと簡単にCI環境が構築できます。ビルドするだけであればテンプレートが用意されているので詰まることはないように思います。はじめの結果が出るまでスムーズに進められるのは嬉しいですね。活用するには公式ページなどを参考にコマンドを理解していく必要があります。少しずつ学んでいこうと思います。

*1:オンプレミス版もあるようです