- パイプライン内のジョブを確認
- ジョブが失敗した理由を確認する。
- パイプライン内でのジョブの順番
- ジョブ名の制限
- パイプラインでのグループジョブ
- ジョブを隠す
- デフォルトキーワードとグローバル変数の継承の制御
- 手動ジョブ実行時の変数の指定
- ジョブを遅延させる
- ジョブログセクションの展開と折りたたみ
- デプロイジョブ
ジョブ
パイプラインの設定はジョブから始まります。 ジョブは.gitlab-ci.yml
ファイルの最も基本的な要素です。
ジョブは以下のようなものです。
- どのような条件で実行されるべきかを示す制約とともに定義されます。
- 任意の名前を持つトップレベル要素で」、少なくとも
script
句を含んでいます。 - 定義できる数に制限はありません。
使用例:
job1:
script: "execute-script-for-job1"
job2:
script: "execute-script-for-job2"
上記の例は2つのジョブを別々に実行し、それぞれのジョブが異なるコマンドを実行する、最もシンプルなCI/CDの設定です。
もちろんコマンドは直接コードを実行したり(./configure;make;make install
)、リポジトリ内のスクリプトを実行したり(test.sh
)することができます。
ジョブはRunnerによってピックアップされ、Runnerの環境で実行されます。重要なのは、それぞれのジョブが互いに独立して実行されることです。
パイプライン内のジョブを確認
パイプラインにアクセスすると、そのパイプラインに関連するジョブが表示されます。
個々のジョブを選択すると、そのジョブのログが表示され、以下のことができます:
- ジョブをキャンセルする。
- ジョブが失敗した場合は再試行します。
- 合格した場合は、ジョブを再実行します。
- ジョブのログを消去。
プロジェクト内のすべてのジョブを表示
プロジェクト内で実行されたジョブの全リストを表示します:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- Build > ジョブを選択します。
ジョブのステータスでリストをフィルタリングできます。
ジョブが失敗した理由を確認する。
パイプラインが失敗したり、失敗が許されたりした場合、その理由が分かる箇所がいくつかあります。
- パイプラインの詳細ビューのパイプライングラフ。
- パイプラインウィジェット、マージリクエスト、コミットページ。
- ジョブビュー(ジョブのグローバルビューと詳細ビュー)。
それぞれの箇所で、失敗したジョブにカーソルを合わせると、失敗した理由を見ることができます。
ジョブの詳細ページでも失敗の理由を見ることができます。
パイプライン内でのジョブの順番
パイプライン内のジョブの順番は、パイプライングラフの種類によって異なります。
- 完全なパイプライングラフでは、ジョブは名前順にソートされます。
- パイプラインのミニグラフでは、ジョブはステータス、名前の順にソートされます。
ジョブのステータスの順序は以下の通りです:
- 失敗
- 警告
- 保留
- 実行中
- 手動
- スケジュール済み
- キャンセル済み
- 成功
- スキップ済み
- 作成済み
使用例:
ジョブ名の制限
- GitLab 14.5のGitLab.comで255文字のジョブ長を有効にしました。
- GitLab 14.10で一般的に利用可能。機能フラグ
ci_validate_job_length
は削除されました。
これらのキーワードをジョブ名として使うことはできません:
image
services
stages
types
before_script
after_script
variables
cache
include
true
false
nil
-
pages:deploy
deploy
ステージ用に設定されています。
ジョブ名は255文字以下でなければなりません。
ジョブ名は一意にしてください。ファイル内で複数のジョブが同じ名前を持つ場合、パイプラインに追加されるのは1つだけで、どれが選ばれるかを予測するのは困難です。同じジョブ名が1つ以上のインクルードファイルで使用されている場合、パラメータはマージされます。
パイプラインでのグループジョブ
類似したジョブが多いと、パイプライングラフが長くなって読みにくくなります。
似たようなジョブを自動的にグループにまとめることができます。ジョブ名が特定の方法でフォーマットされている場合、通常のパイプライングラフでは1つのグループにまとめられます(ミニグラフではありません)。
パイプラインにグループ化されたジョブがある場合、その中に再試行ボタンやキャンセルボタンが表示されなければ、グループ化されたジョブであることがわかります。その上にマウスカーソルを置くと、グループ化されたジョブの数が表示されます。選択すると展開されます。
ジョブのグループを作成するにはCI/CDパイプライン設定ファイルで、各ジョブ名に以下のどれかで区切った数字を設定します。
- スラッシュ(
/
)、例えばslash-test 1/3
,slash-test 2/3
,slash-test 3/3
. - コロン (
:
) 、例えばcolon-test 1:3
,colon-test 2:3
,colon-test 3:3
。 - スペース、例えば
space-test 0 3
,space-test 1 3
,space-test 2 3
。
これらの記号は互換性を持って使用できます。
以下の例では、これら3つのジョブはbuild ruby
というグループに入っています:
build ruby 1/3:
stage: build
script:
- echo "ruby1"
build ruby 2/3:
stage: build
script:
- echo "ruby2"
build ruby 3/3:
stage: build
script:
- echo "ruby3"
パイプライングラフには、build ruby
というグループに3つのジョブが表示されます。
ジョブは左から右へ数字を比較して並べられます。通常、最初の数字をインデックスとし、2番目の数字を合計とします。
この正規表現はジョブ名を評価します:([\b\s:]+((\[.*\])|(\d+[\s:\/\\]+\d+))){1,3}\s*\z
.ジョブ名の末尾からのみ、1つ以上の: [...]
,X Y
,X/Y
, またはX\Y
のシーケンスが削除されます。ジョブ名の先頭または途中で見つかった一致する部分文字列は削除されません。
GitLab 13.8 以前では、正規表現は\d+[\s:\/\\]+\d+\s*
です。GitLab 13.11で機能フラグが削除されました。
ジョブを隠す
設定ファイルからジョブを削除せずに、一時的にジョブを無効にします:
-
ジョブの設定をコメントアウトします:
# hidden_job: # script: # - run test
-
ジョブ名をドット(
.
)で始めると、GitLab CI/CDで処理されません:.hidden_job: script: - run test
.
で始まる隠しジョブを再利用可能な設定のテンプレートとして使うことができます:
デフォルトキーワードとグローバル変数の継承の制御
の継承を制御できます:
-
デフォルトのキーワードは
inherit:default
で制御できます。 -
inherit:variables
によるグローバル変数.
使用例:
default:
image: 'ruby:2.4'
before_script:
- echo Hello World
variables:
DOMAIN: example.com
WEBHOOK_URL: https://my-webhook.example.com
rubocop:
inherit:
default: false
variables: false
script: bundle exec rubocop
rspec:
inherit:
default: [image]
variables: [WEBHOOK_URL]
script: bundle exec rspec
capybara:
inherit:
variables: false
script: bundle exec capybara
karma:
inherit:
default: true
variables: [DOMAIN]
script: karma
この例では:
-
rubocop
:- を継承します:何もありません。
-
rspec
:- はデフォルトの
image
とWEBHOOK_URL
変数を継承します。 - 継承しません: デフォルトの
before_script
とDOMAIN
変数。
- はデフォルトの
-
capybara
:- inherits: デフォルトの
before_script
とimage
。 - を継承しません:
DOMAIN
とWEBHOOK_URL
変数。
- inherits: デフォルトの
-
karma
:- デフォルトの
image
とbefore_script
、およびDOMAIN
変数を継承します。 - を継承しません:
WEBHOOK_URL
変数。
- デフォルトの
手動ジョブ実行時の変数の指定
GitLab 12.2で導入されました。
手動ジョブを実行する際には、ジョブ固有の変数を追加で指定できます。
追加変数で実行したい手動ジョブのジョブページからこれを行うことができます。このページにアクセスするには、再生({play})ボタンではなく、パイプラインビューで手動ジョブの名前を選択します。
CI/CD 変数を使用するジョブの実行を変更したい場合、ここで CI/CD 変数を定義します。
CI/CD設定または.gitlab-ci.yml
ファイルですでに定義されている変数を追加した場合、変数は新しい値で上書きされます。このプロセスで上書きされた変数はすべて展開され、マスクされません。
ジョブを遅延させる
ジョブをすぐに実行したくない場合、when:delayed
キーワードを使用すると、ジョブの実行を一定期間遅らせることができます。
これは新しいコードが徐々にロールアウトされていくような、時間指定したインクリメンタルロールアウトで特に有用です。
例えば、新しいコードのロールアウトを開始したとします。
- ユーザーにトラブルを感じさせず、GitLabは0%から100%まで自動的にデプロイを完了させることができます。
- 新しいコードでトラブルが発生した場合は、パイプラインをキャンセルすることでローリングが最後の安定版に戻り、時間指定したインクリメンタルロールアウトを停止できます。
ジョブログセクションの展開と折りたたみ
GitLab 12.0から導入されました。
ジョブログは折りたたんだり広げたりできるセクションに分かれています。それぞれのセクションには期間が表示されます。
以下の例をご覧ください:
- 3つのセクションは折りたたまれており、展開することができます。
- 3つのセクションが展開され、折りたためます。
折りたたみ可能セクションのカスタマイズ
GitLab 12.0から導入されました。
GitLab がどのセクションを折りたたむかを決定するために使用する特別なコードを手動で出力することで、ジョブログに折りたたみ可能なセクションを作成することができます:
- セクション開始マーカー
\e[0Ksection_start:UNIX_TIMESTAMP:SECTION_NAME\r\e[0K
+TEXT_OF_SECTION_HEADER
- セクション終了マーカー
\e[0Ksection_end:UNIX_TIMESTAMP:SECTION_NAME\r\e[0K
CI設定のスクリプトセクションにこれらのコードを追加する必要があります。例えば、echo
:
job1:
script:
- echo -e "\e[0Ksection_start:`date +%s`:my_first_section\r\e[0KHeader of the 1st collapsible section"
- echo 'this line should be hidden when collapsed'
- echo -e "\e[0Ksection_end:`date +%s`:my_first_section\r\e[0K"
Runnerが使用しているShellによっては、例えばZshを使用している場合、\\e
と\\r
のように特殊文字をエスケープする必要があるかもしれません。
上記の例では、以下の項目を出力します。
-
date +%s
:Unixタイムスタンプ(例:1560896352
)。 -
my_first_section
:セクションの名前。 -
\r\e[0K
:セクションマーカーはレンダリングされた (色付きの) ジョブログには表示されませんが、生のジョブログには表示されます。表示するには、ジョブログの右上隅で、Show complete raw({doc-text})を選択してください。-
\r
: キャリッジリターン。 -
\e[0K
: クリアライン ANSI エスケープシーケンス (\e[K
は機能しません。0
を含める必要があります)。
-
ジョブログの生データサンプルを、以下に示します。
\e[0Ksection_start:1560896352:my_first_section\r\e[0KHeader of the 1st collapsible section
this line should be hidden when collapsed
\e[0Ksection_end:1560896353:my_first_section\r\e[0K
崩壊前のセクション
GitLab 13.5 で導入されました。
collapsed
オプションをセクションの先頭に追加することで、折りたたみ可能なセクションを自動的に折りたたむことができます。セクション名の後、\r
の前に[collapsed=true]
を追加します。 セクション終了マーカーは変更されません:
- セクション開始マーカー
[collapsed=true]
:\e[0Ksection_start:UNIX_TIMESTAMP:SECTION_NAME[collapsed=true]\r\e[0K
+TEXT_OF_SECTION_HEADER
- セクション終了マーカー
\e[0Ksection_end:UNIX_TIMESTAMP:SECTION_NAME\r\e[0K
更新されたセクション開始テキストをCI設定に追加します。例えば、echo
:
job1:
script:
- echo -e "\e[0Ksection_start:`date +%s`:my_first_section[collapsed=true]\r\e[0KHeader of the 1st collapsible section"
- echo 'this line should be hidden automatically after loading the job log'
- echo -e "\e[0Ksection_end:`date +%s`:my_first_section\r\e[0K"
デプロイジョブ
デプロイジョブは環境にコードをデプロイするという点で、特定の種類のCIジョブです。デプロイジョブとは、environment
キーワードとstart
環境action
を使用するジョブのことです。デプロイジョブはdeploy
ステージである必要はありません。次のdeploy me
ジョブはデプロイジョブの例です。action: start
はデフォルトの動作で、この例のために定義されていますが、省略することもできます:
deploy me:
script:
- deploy-to-cats.sh
environment:
name: production
url: https://cats.example.com
action: start
デプロイジョブの動作は、古いデプロイジョブを防止したり、一度に 1 つのデプロイジョブしか実行しないようにするなど、デプロイの安全設定で制御できます。