GitLab CI/CD - ハンズオンラボ: ジョブポリシーパターン
所要時間の目安: 25〜30分
目標
ジョブポリシーパターンを使用すると、rules キーワードを使ってジョブをいつ・どのように実行するかをパイプラインが制御できます。このラボでは、rules を使ったジョブの作成方法を学びます。これらの rules がパイプラインに与える影響を確認し、パイプラインの rules と変数を組み合わせて使用する方法を学びます。
同様の結果を達成できる
onlyおよびexceptキーワードは、現在積極的に開発されておらず推奨されていません。詳細については、こちらをクリックしてください。
タスク A: rules を使ったジョブの作成
前のラボで作成した CICD Demo プロジェクトを開きます。
.gitlab-ci.ymlファイルをクリックして内容を確認します。Edit > Edit single file をクリックします。設定ファイルを整理するために、
environment echoesとenvironment variablesジョブを削除します。また、variablesキーワードと関連する変数も削除します。これらの手順を完了すると、以下の.gitlab-ci.ymlファイルになります:stages: - test - build test job: stage: test script: - echo "I am a unit test!" build job: stage: build script: - echo "I am a build image!"ファイルの末尾に、以下のコードスニペットを貼り付けます:
deploy review: stage: review script: - echo "Do your average deploy here" rules: - if: '$CI_COMMIT_REF_NAME == "main"' when: never - if: '$CI_COMMIT_TAG' when: never - when: always environment: name: review/$CI_COMMIT_REF_NAME deploy release: stage: deploy script: - echo "Deploy to a production environment" rules: - if: '$CI_COMMIT_TAG =~ /^v.*/' when: manual environment: name: production deploy staging: stage: deploy script: - echo "Deploy to a staging environment" rules: - if: '$CI_COMMIT_REF_NAME == "main"' when: always - when: never environment: name: staging.gitlab-ci.ymlの上部にあるstagesセクションに、reviewとdeployステージを追加します。完成後、
.gitlab-ci.ymlファイルは以下のようになります:stages: - test - build - review - deploy test job: stage: test script: - echo "I am a unit test!" build job: stage: build script: - echo "I am a build image!" deploy review: stage: review script: - echo "Do your average deploy here" rules: - if: '$CI_COMMIT_REF_NAME == "main"' when: never - if: '$CI_COMMIT_TAG' when: never - when: always environment: name: review/$CI_COMMIT_REF_NAME deploy release: stage: deploy script: - echo "Deploy to a production environment" rules: - if: '$CI_COMMIT_TAG =~ /^v.*/' when: manual environment: name: production deploy staging: stage: deploy script: - echo "Deploy to a staging environment" rules: - if: '$CI_COMMIT_REF_NAME == "main"' when: always - when: never environment: name: stagingCommit message フィールドに
Add CI structure job definitionsと入力し、Target Branch がmainに設定されていることを確認して、Commit changes をクリックします。左側のナビゲーションペインで Build > Pipelines をクリックし、最新のパイプライン実行の横にあるステータスアイコンをクリックします。
ウィジェットをクリックして、パイプラインがどの環境にコードをデプロイしているかを確認します。左のサイドバーで Operate > Environments をクリックして、作成された環境を確認します。
各ジョブに定義された rules に基づいて、3つのジョブのうち
deploy stagingだけが実行されていることがわかります。オプション: 異なるブランチやタグを使ってパイプラインのトリガーを実験してみてください。deploy release、deploy review、deploy staging ジョブを実行する異なるパイプラインを起動できますか?
ヒント: 関連する
.gitlab-ci.ymlジョブ定義のrulesキーワードを確認してください。
解答例
タスク B1: deploy review ジョブの実行
deploy reviewのrulesセクションで指定されたルールを確認します。このジョブは A) ブランチ名($CI_COMMIT_REF_NAMEで表される)がmainと等しくない、かつ B) ブランチにタグが付いていない($CI_COMMIT_TAGで表される)場合にのみ実行されます。ifキーワードで単独で使用される変数は、その変数に何らかの値が関連付けられているかどうかを確認します。他のプログラミング言語では偽とみなされるFalseなどの値を含む、どのような値があっても true です。値がない場合、ステートメントは false です。値として空白を持つ変数も false とみなされます。Code > Branchesをクリックして新しいブランチを作成します。New branch ボタンをクリックします。
branch name セクションに Dev と入力し、Create branch をクリックします。
Build > Pipelines をクリックします。
Run Pipeline ボタンをクリックします。
Run for branch name or tag の下で、Dev が選択されていることを確認します。
Run Pipeline ボタンをクリックします。
deploy review ジョブのみが実行されます。
タスク B2: deploy release ジョブの実行
.gitlab-ci.ymlファイルを開き、deploy releaseの rules セクションで指定されたルールを確認します。このジョブは A) ブランチ名($CI_COMMIT_REF_NAMEで表される)が main と等しくない、かつ B) ブランチにvの文字で始まるタグが付いている($CI_COMMIT_TAG =~ /^v.*/で表される)場合にのみ実行されます。このジョブを実行するためにタグを作成する必要があります。タグを作成するには、Code > Tags をクリックします。
New tag ボタンをクリックします。
Tag name セクションに
v1.0と入力します。Create from オプションを
Devに変更します。Create tag ボタンをクリックします。
Build > Pipelines をクリックします。
Run Pipeline ボタンをクリックします。
Run for branch name or tag の下で、v1.0 が選択されていることを確認します。
Run Pipeline ボタンをクリックします。
deploy releaseジョブのみが利用可能になります。ジョブは手動に設定されているため、明示的に開始するまで実行されません。ジョブの横にある矢印をクリックしてジョブを開始します。
タスク B3: deploy staging ジョブの実行
.gitlab-ci.ymlファイルを開き、deploy stagingのrulesセクションで指定されたルールを確認します。このジョブは A) ブランチ名($CI_COMMIT_REF_NAMEで表される)がmainと等しい場合にのみ実行されます。左上のコーナーで Dev と表示されているボタンをクリックし、オプションを main に変更します。
Build > Pipelines をクリックします。
Run Pipeline ボタンをクリックします。
Run for branch name or tag の下で、main が選択されていることを確認します。
Run Pipeline ボタンをクリックします。
deploy staging ジョブのみが実行されます。
ラボガイドの完了
このラボ演習が完了しました。このコースの他のラボガイドも参照できます。
ご意見・ご提案?
GitLab CI/CD のハンズオンガイド に変更を加えたい場合は、マージリクエストで変更内容を提出してください!
