CircleCI とは
この記事はKDDI Group Developer Community Advent Calendar 2022の8日目の記事です
はじめに
この記事はCircleCIで使われる用語がわからない人向けの記事です。
実は書いている私自身も知らない部分が多くて結構困惑しています。
ドキュメントや技術書をベースに記載しています。
そもそもCI/CDとは
継続的インテグレーションと継続的デリバリー
というのはいろんなところで説明されていますが
簡単にいえばソフトウェアの作成と納品のプロセスを継続的に回す概念と考えるとわかると思います。
書いたコードをレビューしてマージして実行するといったリポジトリがあることが前提
にあるように思われますが
人力でやっていた頃はコードを書いてテストして指定の場所にソフトウェアを移動してデプロイする
ということがあったと思います。やっていることは今と昔でほとんど変わらなかったりすると思います。
※そんな経験をしたことがあります
2022年12月現在ではリポジトリベースで開発することがほぼ当たり前となっており、ソフトウェアを管理する為にソフトウェアの変更点を管理することに重点を置いています。
このようにしてソフトウェア開発のやり方が変わったことにより、今では変更点を適用することがすなわちソフトウェアのデプロイとなっています。
本番環境に変更点を適用する=本番環境に変更点を運ぶ と考えるとデリバリーという言葉の意味がわかりますね。
ちなみに昨今ではソフトウェアのデリバリーを支える全過程をソフトウェアサプライチェーンというそうです。
現実にある運送業とあまり変わらないですね。
今回はそんなCI/CDを備えた製品、CircleCIで使われる用語について説明したいと思います。
CircleCIの基本
簡単に説明
CircleCIは設定ファイルのyamlを書いてジョブを書きます。
ジョブはステップという単位でのまとまりであり、ステップをグループ化したものがジョブです。
ジョブを実行するには実行環境が必要であり、ジョブの実行環境はExecutorで定義します。
ジョブには実行順序があり、実行順序はワークフローによって定義されます。
同一ワークフロー内のジョブ同士でデータを共有する場合はデータの永続化が必要です。
データの永続化にはワークスペース/キャッシュ/アーティファクトがあります。
...oO(やばい、何もわからん。。。)
はい。ということで順番に見ていきましょう。
設定ファイル
ここでいう設定ファイルというのはCircleCIのビルド設定のことを言います。
そう、CircleCIくんは内部であーだこーだ言いながらビルドしているんですね。
ていうか、ビルドってなんですか。何をビルドしているんすか??
ビルド
何をビルドしているかいうとアプリケーションです。これはアプリケーションを構築するときのビルドと同じ意味です。
アプリケーションが出てきたので開発でアプリケーションを管理するといえば
そう、プロジェクトですよね。
プロジェクト
CircleCIにおけるプロジェクトはコードをホスティングしているリポジトリ
と言えば、すっきりすると思います。
そう、雑に言えばプロジェクト=リポジトリみたいな感じです。
ステップ
プロジェクトにある設定ファイルをビルドしているということがここまで何となーくわかったかなと思います。
では設定ファイルとやらには何が書かれているのでしょうか。
CircleCIの設定ファイルはdockerfileに近いものがあります。
dockerfileをビルドすると何かしらがエンジン上で実行されますよね。
そう、CircleCIも何かしら実行しているのです。この実行の最小単位をステップ(Steps)と呼びます。細かく言えば、ステップには細かい種類があるのですがここでは割愛します。
ジョブ
実際に手でコマンドを実行する時もそうですが、コマンドはまとめて実行することが多いと思います。
一塊にしてから実行して効率化とかBashなどでもやるとは思います。
そう、CircleCIではステップをグループ化しておくことができるのです。グループ化されたステップのことをジョブと言います。厳密には1つ以上のステップがグループ化されたものをジョブと言います。
Executor
ここまでで実行する内容を定義することができますが、実行環境がないと何もできませんよね。
実行環境はExecutorで定義します。
Executorには主に実行環境の元になる仮想マシンの名前を指定します。
こうすることで、マルチプラットフォームに対応できるってことですね。
ワークフロー
ここまでで実行する内容と実行環境を作ることができましたね。
「ん? ジョブの実行順番はどうするんだ??」って思ったあなた!
そこでワークフローの登場です。
ワークフローはジョブの実行順序を定めたルール表みたいなものです。
ワークフロー=作業手順書
ジョブ=作業内容
みたいな感じですね。
データを永続化すると得なことって何??
ここらへんまで読めるともう実際に手を動かした方が良いのですが
ビルドの内容が長い時に途中で止まったりするとイラッとしませんか??
インフラの技術にキャッシュという概念があるとおり、CircleCIにも似たような概念があります。それがデータの永続化です。
データの永続化にはワークスペース/キャッシュ/アーティファクトがあります。
それぞれの特徴をここで語ると長くなりそうなので別の機会にまとめたいと思いますが、とりあえず
CircleCIにはビルドを高速化する手法としてデータの永続化があります。
まとめ
ドキュメントや書籍、公式ブログを拝見する限りでは便利そうに見えるものの
SNSを見るといろんな辛みを述べている人が!!
いくつか集めてみてどういうことなのか具体的に検証してみたいですね。まぁここから先は個人的な興味になりますので需要があったら試してみます。