株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

GitとCI/CDに関する知識ゼロのSEによる、GitLabのCI/CDパイプラインのキーワード解説 ~stages 編~ (2023/07/06 更新)

2023/07/06 GitLab.com Enterprise Edition 16.2.0-pre の画面に差し替え、一部の文言を更新しました。

皆様こんにちは。SEの小池と申します。

以前、GitLabのCI/CDパイプラインのキーワード解説で include を取り上げました。(こちら)
ほぼ筆者の自習メモと化しているこのキーワード解説なのですが、ふと筆者は気が付きました・・・。

一番基本のキーワード stages 説明してないじゃん!!!

というわけで、今回はキーワード stages の概要と具体例を用いた説明をします。

本記事の対象の方

  • GitLabのCI/CDパイプラインをはじめて構成しようとなさっている方。
  • GitLabのCI/CDパイプラインの書き方がさっぱりわからなくて困っている方。

今回のブログのゴール

このブログのゴールはこちらです。


今回のゴール
  • GitLabのCI/CDパイプラインのキーワード stages の概要を把握する。
  • キーワード stages を使ってみる。
  • キーワード stages を宣言しないで、デフォルトのステージを使ってみる。

このブログをお読みいただくにあたっての事前ご連絡事項

  • 本記事はSaaS版 (GitLab.com) の Enterprise Edition 16.2.0-pre (Ultimate) における仕様をベースに記載しております。それ以外のエディションやバージョンではこの記事に記載の通りではない可能性がございます。
  • 本記事の操作説明と画面ショットはGitLabのローカライズを日本語にした状態で説明しております。それ以外の言語をご利用の方は適宜読み替えてください。
  • 本記事はGitやCI/CDに関する知識ゼロのSEによるなんちゃって記事です。GitLabのディープな使用法についてはGitLabの公式オンラインドキュメント (こちら) をご参照ください。

ケーキ作りで考えるキーワード stages の概念

いつもはキーワードの概要から記載するのですが、今回は先にステージの概念を説明します。

今回は超初心者向けということで、思い切ってITから頭を離して、家でケーキを作る工程を例にキーワード stages の概念を説明いたします!
大丈夫かいな・・・すでに不安。

まず、家でチョコレートケーキを作りたいとします。

家にはボウル、泡だて器、はかり、ふるい、計量カップがないことに気が付いたので、近所のホームセンターに買いに行きます。
要するにまずは 調理器具を買うというステージがあるわけです。

必要な調理器具はそろったので、次は食材です。
小麦粉、牛乳、卵、砂糖、チョコレート、バター、パウダーシュガーなどを近所のスーパーで買う必要があります。
つまり 食材を買うというステージがあるわけです。

食材もそろったので、レシピ通りに作っていきます。
レシピには以下のように書いてあります。なおこのレシピは架空のレシピなので実際に作らないでください!
このレシピ通り作っていく、つまり調理するというステージがあるわけです。

炊飯器で作るチョコレートケーキの架空レシピ
  1. チョコレートとバターをレンジで溶かす。(A)
  2. 卵と砂糖を混ぜて泡立てる。(B)
  3. (A) と (B) と牛乳を混ぜる。
  4. 小麦粉をふるいながら入れ、混ぜる。
  5. 炊飯器に入れて、白米を炊くのと同じように炊飯する。
  6. 炊き上がったら竹串などを差して焼け具合を確認する。
  7. パウダーシュガーをいい感じにふる。

で、最終的にチョコレートケーキができました。

といったように、チョコレートケーキを作る例で考えると、ふるいを買う・小麦粉を買う・バターを溶かす 等様々なタスクがあります。
これらのタスクを、実行する順番を考慮し、ある程度まとまった処理単位で考えると、調理器具を買う・食材を買う・調理する 等の段階で区分できます。

CI/CDパイプラインではこの、ふるいを買う、小麦粉を買う、バターを溶かす 等の一つ一つのタスクがジョブにあたり調理器具を買う、食材を買う、調理する 等の段階がステージにあたります

つまり、ケーキ作りの場合を強引にGitLabのCI/CDパイプラインっぽく置き換えると、こんな感じになります。

・・・なんとなくGitLabのCI/CDパイプラインにおける ステージ のイメージつきましたでしょうか?

キーワード stages の概要

ケーキのたとえ話はこのくらいにして、キーワード stages の概要に移ります。

stagesは、CI/CDパイプラインの中で実行される複数のジョブを "ステージ" という単位にまとめ、その実行順序を制御するキーワードです

先ほどのケーキ作りで考えると、下図の赤枠部分を定義するのが stages です。

GitLabに限らず、CI/CDパイプラインにおいてステージはある程度意味のある処理単位で構成するのがセオリーです。よくあるのはビルドステージテストステージデプロイステージ等です。

GitLabのCI/CDパイプラインにおいて、ジョブは必ずどこかのステージに属している必要があります。

GitLabでは stagesでステージを複数定義した場合、基本的には前のステージのジョブが全て終わってから、次のステージのジョブが実行されます。
(ただし、ジョブにキーワードneeds 等を指定し、ステージをまたいだジョブの依存関係を定義している場合はこの限りではありません。)

GitLabのCI/CDパイプランでは、同じステージの中のジョブは並列に実行されます。
(ただし、他のキーワードを使って依存関係などを指定していない場合に限ります。また、ステージ内で並列実行されるジョブ数はRunnnerの数と設定に依存します。)

CI/CDパイプラインの途中でジョブが失敗してしまった場合。
失敗したジョブがあるステージに存在する未実行のジョブは、そのまま実行されます。
失敗したジョブが存在するステージより後ろのステージは実行されません。

GitLabにおいては stages任意で指定するグローバルキーワードです。
stagesでステージを定義していない場合、GitLabでは以下のデフォルトのステージが用意されます。

  • .pre
  • build
  • test
  • deploy
  • .post
参考:`.gitlab-ci.yml` keyword reference - stages | GitLab

stages の超簡単な使い方の例

ここからは実際にキーワードstagesの使い方を、超簡単な例を用いて紹介してまいります。

例1:明示的にstagesを定義する場合

まずは明示的にステージを宣言する場合をご紹介いたします。

まず、GitLabで適当なプロジェクトを作成します。リポジトリは空で大丈夫です。
プロジェクトができたら、[ビルド] > [パイプラインエディタ] を開きます。

[パイプラインの設定] をクリックします。

サンプルが色々書いてありますが、とりあえず全部削除します。

ここでは例として以下のステージとジョブを構成してみます。

表1. 明示的に宣言するステージとジョブの構成
ステージ名 ジョブ名 ジョブ内容
build build_job01 echo "ビルドジョブ"
test test_job01 echo "テストジョブ"
deploy deploy_job01 echo "デプロイジョブ"

まず、明示的にステージを宣言します。
今回作るステージはbuild, test. deployの3つです。

stages:
    - build
    - test
    - deploy

続いてジョブの設定を入れていきます。
まず例として、ステージ build にジョブ build_job01 を作成します。

stages:
    - build
    - test
    - deploy

build_job01:
    stage: build
    script:
        - echo "ビルドジョブ"

同じ要領で残りの2個のジョブも設定します。

stages:
    - build
    - test
    - deploy

build_job01:
    stage: build
    script:
        - echo "ビルドジョブ"

test_job01:
    stage: test
    script:
        - echo "テストジョブ"

deploy_job01:
    stage: deploy
    script:
        - echo "デプロイジョブ"

この時点でこのCI/CDパイプラインを概念図に起こすと、こんな感じになります。

画面下部の [ブランチ] を任意の文字列に変更し、[変更をコミット] をクリックします。

[パイプラインの表示] をクリックします。

CI/CDパイプラインの状態が表示されます。
今回の場合、stages で宣言したステージが左から順に build, test, deploy と並んでいることがわかります。
左側のステージから実行されるので、ジョブの実行順序は build_job01, test_job01, deploy_job01 となります。

以上がステージを明示的に宣言した場合の stages の使用例です。

例2:stagesを宣言しないでデフォルトのステージを利用する場合

次にstagesを宣言しないでデフォルトのステージを利用する場合をご紹介いたします。

GitLabで適当なプロジェクトを作成します。リポジトリは空で大丈夫です。
プロジェクトができたら、[ビルド] > [パイプラインエディタ] を開きます。

[パイプラインの設定] をクリックします。

サンプルが色々書いてありますが、とりあえず全部削除します。

ここでは例として以下のステージとジョブを構成してみます。

表2. デフォルトのステージとジョブの構成
ステージ名 ジョブ名 ジョブ内容
.pre samplejob01_.pre echo ".preステージで実行されるジョブです。"
build samplejob02_build echo "buildステージで実行されるジョブです。"
test samplejob03_test echo "testステージで実行されるジョブです。"
deploy samplejob04_deploy echo "deployステージで実行されるジョブです。"
.post samplejob05_.post echo ".postステージで実行されるジョブです。"

今回はデフォルトのステージを使用するため、stagesによるステージの宣言は不要です。
ステージ.preで実行するジョブを作ります。

samplejob01_.pre:
    stage: .pre
    script:
        - echo ".preステージで実行されるジョブです。"

同じ要領で残りの4個のジョブも設定します。

samplejob01_.pre:
    stage: .pre
    script:
        - echo ".preステージで実行されるジョブです。"

samplejob02_build:
    stage: build
    script:
        - echo "buildステージで実行されるジョブです。"

samplejob03_test:
    stage: test
    script:
        - echo "testステージで実行されるジョブです。"

samplejob04_deploy:
    stage: deploy
    script:
        - echo "deployステージで実行されるジョブです。"
        
samplejob05_.post:
    stage: .post
    script:
        - echo ".postステージで実行されるジョブです。"

この時点でこのCI/CDパイプラインを概念図に起こすと、こんな感じになります。

画面下部の [ブランチ] を任意の文字列に変更し、[変更をコミット] をクリックします。

[パイプラインの表示] をクリックします。

CI/CDパイプラインの状態が表示されます。
stages で明示的にステージの定義をしていませんが、デフォルトのステージが左から .pre, build, test, deploy, .post で定義されていることがわかります。
左側のステージから実行されるので、ジョブの実行順序は samplejob01_.pre, samplejob02_build, samplejob03_test, samplejob04_deploy, samplejob05_.post となります。

以上が stages でステージを宣言しないで、デフォルトのステージを利用する例です。

最後に

この度はGitもCI/CDもよくわかっていないど素人SEによるGitLab検証ブログをお読みいただき、誠にありがとうございます。
このブログの目標は以下のとおりでしたが、皆さまはいかがでしたでしょうか。


今回のゴール
  • GitLabのCI/CDパイプラインのキーワード stages の概要を把握する。
  • キーワード stages を使ってみる。
  • キーワード stages を宣言しないで、デフォルトのステージを使ってみる。

ちょうど1年くらい前は筆者は「CI/CDパイプラインってなんですか?配管??」という知識レベルでした。
もっとも今も大して変わりませんが。

当時の私はCI/CDパイプラインにおけるステージの概念すらわかっていなかったので、「あの時にこういう記事があれば、CI/CDの入門にちょうどよかったかもしれない・・・」などと実体験を思い出しながら本記事を書きました。

この記事がGitLabを触り始めた方の一助となれば幸いにございます。


GitLabに関するお問い合わせは、以下のフォームからお願い致します。
GitLab製品 お問い合わせ

今までのGitLabの検証ブログはこちらです。
GitLab カテゴリーの記事一覧 - ネットワールド らぼ

GitLab操作デモ動画 (基本編) を作ってみました。(音声の録音は自宅でiPhoneのボイスメモ使うという超低クオリティですが…。)
つたない内容ではありますが、ご興味がおありでしたら是非ご視聴いただければと存じます。

www.youtube.com