はじめに
普段はJenkinsを使っていますが、勉強のためCircleCI 2.1を導入しましたので、手順をまとめておきます。
驚くほど簡単に導入(ビルドまで)できました。
CircleCIとは
継続的インテグレーション(CI) サービスの1つです。
CIとはビルド、テスト、デリバリーというプロセスを自動化して信頼性の高いソフトウェアを開発するための手法で、他にはJenkinsが有名です。
Jenkinsは自前でサーバーを用意する必要がありますが、CircleCIはクラウドサービス*1ですので専用のサーバーを用意しなくても構築できます。
(JenkinsとCircleCIは得意とする部分が違うので両方のメリット・デメリットを把握して開発に合う方を選ぶと良いと思います。)
無料プランもあるので、個人で開発する場合でも手軽に開始することが出来ます。
circleci.com
導入手順
1 対象のGitHubリポジトリを用意
CircleCIはGitHubと連携するサービスです。事前にGitHubのアカウントとリポジトリを用意しましょう。
以下は今回の勉強用に作成したリポジトリです。
github.com
5 CircleCIの設定ファイルを作成
configファイルのテンプレートを選択する画面が表示されます。C#のプロジェクトだったので自動で「.NET」が選択されていました。すごい!!
「Start Building」をクリックします。
追加されるブランチとファイルの確認画面で「Add Config」をクリックすると完了です。
自動で作られるテンプレートの理解
.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の最小実行単位です。
さいごに
CircleCIを使うと簡単にCI環境が構築できます。ビルドするだけであればテンプレートが用意されているので詰まることはないように思います。はじめの結果が出るまでスムーズに進められるのは嬉しいですね。活用するには公式ページなどを参考にコマンドを理解していく必要があります。少しずつ学んでいこうと思います。
*1:オンプレミス版もあるようです