140
120

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitLabAdvent Calendar 2018

Day 20

GitLab CI/CD Variables を翻訳しました。

Last updated at Posted at 2018-12-19

GitLab Advent Calendar 2018 - Qiita
https://qiita.com/advent-calendar/2018/gitlab
20日目です。

間違い、わかりにくい等ありましたらご連絡いただければ幸いです。

GitLab.org / GitLab Community Edition · GitLab doc/ci/variables/README.md
https://gitlab.com/gitlab-org/gitlab-ce/blob/0087396036b265879771380e60787e2072318fd1/doc/ci/variables/README.md
を翻訳したものです。全てではありませんが、普通に利用する分には問題ないでしょう。

変数

GitLab CI がジョブを受け取ったときに Runner が ビルド環境として用意します。
まず 定義済み変数 (環境変数) のリストアップから初めて、その後に ユーザ定義 変数をリストアップします。

変数の優先度

これらの変数は上書きできますが、以下のルールによって優先順位が決まっています
優先順位:

  1. トリガー変数 または スケジューリングされたパイプラインの変数 (全てにおいて優先します)
  2. プロジェクトレベル シークレット変数 または 保護されたシークレット変数
  3. グループレベル シークレット変数 or 保護されたシークレット変数
  4. YAMLで定義 ジョブレベル変数
  5. YAMLで定義 グローバルレベル
  6. デプロイ変数
  7. 定義済み変数 (これらの中で優先度が最も低い)

例えば、.gitlab-ci.ymlAPI_TOKEN=secure をシークレット変数として、 そして、
API_TOKEN=yaml 変数を定義します。その場合、API_TOKEN は、優先順位でより高い
シークレット変数 secret の値になります。

未サポート変数

.gitlab-ci.yml のコンテクストとして利用できない変数が存在する場合があります(例えば、script 配下など)。どの変数がサポートされていないかについては、not supported を参照してください。

定義済み変数 (環境変数)

いくつかの定義済み変数は、最低利用可能バージョンの GitLab Runner を使う必要があります。
どのバージョンの ランナーが必要かについては、下記のテーブルを参照してください。

NOTE: 注意:
GitLab 9.0 からいくつかの変数が非推奨になりました。変更点については、
9.0 Renaming セクションを参照してください。将来のGitLabリリースで
削除される予定ですので新しい変数を利用することを強く推奨します。

変数 GitLab ランナー 詳細
ARTIFACT_DOWNLOAD_ATTEMPTS 8.15 1.9 実行ジョブのアーティファクトのダウンロード試行回数
CI all 0.4 CI環境で実行されていることを示します
CI_COMMIT_REF_NAME 9.0 all そのプロジェクトがビルドされているブランチ名かタグ名
CI_COMMIT_REF_SLUG 9.0 all $CI_COMMIT_REF_NAME を小文字化して 63バイトに短縮化 0-9a-z 以外は - に置換されます。先頭と末尾には - を使いません。URL、ホスト名、ドメイン名で使用できます。
CI_COMMIT_SHA 9.0 all ビルド中のプロジェクトのコミットリビジョン
CI_COMMIT_BEFORE_SHA 11.2 all プッシュリクエスト直前の最新コミットID
CI_COMMIT_TAG 9.0 0.5 コミットタグ名。ビルド中のタグのみ表示されます。
CI_COMMIT_MESSAGE 10.8 all コミットメッセージ全文
CI_COMMIT_TITLE 10.8 all コミットタイトル - コミットメッセージの最初の一行
CI_COMMIT_DESCRIPTION 10.8 all コミット詳細: タイトル行が100文字よりも短い場合の最初の一行を除いたメッセージです;それ以外の場合は全文です。
CI_CONFIG_PATH 9.4 0.5 CI設定ファイルのパス。デフォルトは .gitlab-ci.yml
CI_DEBUG_TRACE all 1.7 debug tracing が有効かどうか
CI_DEPLOY_USER 10.8 all GitLab Deploy Token の認証ユーザー名、プロジェクトが1つだけ関連付けられている場合にのみ出力
CI_DEPLOY_PASSWORD  10.8  all GitLab Deploy Tokenの認証パスワード、プロジェクトが一つだけ関連付けられている場合にのみ出力
CI_DISPOSABLE_ENVIRONMENT all 10.1 このジョブが使い捨てな環境で実行される場合にのみフラグを示します。 (この環境は、このジョブでのみ生成されるもので、実行後に削除もしくは破壊されるものです - shellssh を除く全てです ). この環境が使い捨ての場合、trueにセットされます。それ以外の場合は未定義です。
CI_ENVIRONMENT_NAME 8.15 all このジョブの環境名
CI_ENVIRONMENT_SLUG 8.15 all 環境名の簡易バージョン、DNS名やURL、Kubernetesのラベルなどに適しています。
CI_ENVIRONMENT_URL 9.3 all このジョブ環境のURL
CI_JOB_ID 9.0 all GitLab CI が内部的に利用する現在のジョブのユニークID
CI_JOB_MANUAL 8.12 all ジョブが手動実行されているかどうかを示すフラグ
CI_JOB_NAME 9.0 0.5 .gitlab-ci.yml で定義されているジョブ名
CI_JOB_STAGE 9.0 0.5 .gitlab-ci.yml で定義されているステージ名
CI_JOB_TOKEN 9.0 1.2 GitLab コンテナーレジストリで使える認証用トークン
CI_MERGE_REQUEST_ID 11.6 all pipelines for merge requests の場合のマージリクエストのID
CI_MERGE_REQUEST_IID 11.6 all pipelines for merge requests の場合のマージリクエストのIID
CI_MERGE_REQUEST_REF_PATH 11.6 all pipelines for merge requests の場合のマージリクエストのrefパス. (e.g. refs/merge-requests/1/head)
CI_MERGE_REQUEST_PROJECT_ID 11.6 all pipelines for merge requests の場合のマージリクエストのプロジェクトID
CI_MERGE_REQUEST_PROJECT_PATH 11.6 all pipelines for merge requests の場合のマージリクエストのプロジェクトパス (e.g. namespace/awesome-project)
CI_MERGE_REQUEST_PROJECT_URL 11.6 all pipelines for merge requests の場合のマージリクエストのプロジェクトのURL (e.g. http://192.168.10.15:3000/namespace/awesome-project)
CI_MERGE_REQUEST_TARGET_BRANCH_NAME 11.6 all pipelines for merge requests の場合のマージリクエストのターゲットブランチ名
CI_MERGE_REQUEST_SOURCE_PROJECT_ID 11.6 all pipelines for merge requests の場合のマージリクエストの元プロジェクトのID
CI_MERGE_REQUEST_SOURCE_PROJECT_PATH 11.6 all pipelines for merge requests の場合のマージリクエストの元プロジェクトのパス
CI_MERGE_REQUEST_SOURCE_PROJECT_URL 11.6 all pipelines for merge requests の場合のマージリクエストの元プロジェクトのURL
CI_MERGE_REQUEST_SOURCE_BRANCH_NAME 11.6 all pipelines for merge requests の場合のマージリクエストのソースブランチ名
CI_NODE_INDEX 11.5 all ジョブセット内のジョブのインデックス。ジョブが並列になっていない場合は、この変数はセットされません。
CI_NODE_TOTAL 11.5 all ジョブが並列実行のトータルインスタンス数。ジョブが並列になっていない場合は、この変数は1にセットされます。
CI_JOB_URL 11.1 0.5 実行ジョブ詳細のURL
CI_REPOSITORY_URL 9.0 all クローンするGitリポジトリのURL
CI_RUNNER_DESCRIPTION 8.10 0.5 GitLabに保存されているRunnerの説明
CI_RUNNER_ID 8.10 0.5 使われているランナーのユニークID
CI_RUNNER_TAGS 8.10 0.5 定義済みランナータグ
CI_RUNNER_VERSION all 10.6 実行中のジョブのGitLab ランナーのバージョン
CI_RUNNER_REVISION all 10.6 実行中のジョブのGitLab ランナーのリビジョン
CI_RUNNER_EXECUTABLE_ARCH all 10.6 GitLab ランナーの実行ファイルのOS/アーキテクチャ (これは実行環境と同じではないことに注意)
CI_PIPELINE_ID 8.10 0.5 GitLab CIが内部的に使用する現在のパイプラインのユニークID
CI_PIPELINE_TRIGGERED all all ジョブがtriggeredであるかを示しているフラグ
CI_PIPELINE_SOURCE 10.0 all このパイプラインのソース: push, web, trigger, schedule, api, external のどれか。9.5より前に作成されたパイプラインは不明です。
CI_PROJECT_DIR all all ジョブが実行されるリポジトリーがクローンされたフルパス
CI_PROJECT_ID all all GitLab CIが内部的に利用する現在のプロジェクトのユニークID
CI_PROJECT_NAME 8.10 0.5 現在ビルド中のプロジェクト名 (実際にはプロジェクトフォルダー名)
CI_PROJECT_NAMESPACE 8.10 0.5 現在ビルド中のプロジェクトネームスペース名 (ユーザー名かグループ名)
CI_PROJECT_PATH 8.10 0.5 ネームスペース付きのプロジェクト名
CI_PROJECT_PATH_SLUG 9.3 all $CI_PROJECT_PATH0-9 and a-z 以外を - に変換して、小文字にした。ドメイン名やURLからに利用できる。
CI_PROJECT_URL 8.10 0.5 プロジェクトにアクセスするHTTPアドレス
CI_REGISTRY 8.10 0.5 コンテナーレジストリが有効な場合、GitLab's Container Registry のURLを返す
CI_REGISTRY_IMAGE 8.10 0.5 このプロジェクトでコンテナーレジストリが有効な場合、プロジェクトに紐付けられたレジストリのアドレスを返す
CI_REGISTRY_PASSWORD 9.0 all GitLab Container Registry にコンテナーをプッシュするときに使うパスワード
CI_REGISTRY_USER 9.0 all GitLab Container Registry にコンテナーをプッシュするときに使うユーザー名
CI_SERVER all all ジョブがCI環境で実行されていることを示す
CI_SERVER_NAME all all ジョブを調整するCIサーバー名
CI_SERVER_REVISION all all ジョブをスケジューリングする GitLab revision
CI_SERVER_VERSION all all ジョブをスケジューリングする GitLab version
CI_SERVER_VERSION_MAJOR 11.4 all GitLab コンポーネントのメジャーバージョン
CI_SERVER_VERSION_MINOR 11.4 all GitLab コンポーネントのマイナーバージョン
CI_SERVER_VERSION_PATCH 11.4 all GitLab コンポーネントのパッチバージョン
CI_SHARED_ENVIRONMENT all 10.1 ジョブが共有環境(shellssh のようなCI実行をまたいでいる)で実行されていることを示す。環境が共有されている場合は、trueに設定、そうでない場合設定されません。
GET_SOURCES_ATTEMPTS 8.15 1.9 このジョブ実行中のソース取得試行回数
GITLAB_CI all all GitLab CI環境で実行されていることを示す
GITLAB_USER_ID 8.12 all ジョブを開始した人のID
GITLAB_USER_EMAIL 8.12 all ジョブを開始した人のメールアドレス
GITLAB_USER_LOGIN 10.0 all ジョブを開始した人のログインユーザー名
GITLAB_USER_NAME 10.0 all ジョブを開始した人の実名
RESTORE_CACHE_ATTEMPTS 8.15 1.9 ジョブ実行中のキャッシュのリストア試行回数

GitLab 9.0 での名前の変更

GitLab の命名規則に従い、build 用語から job へより近づける為に、リリース9.0でCI変数名を
変更しました。

NOTE: 注意:
Starting with GitLab 9.0, we have deprecated the $CI_BUILD_* variables. 新しい変数を利用することを
強くお勧めします。将来のGitLabリリースで古い変数は削除される予定です

8.x name 9.0+ name
CI_BUILD_ID CI_JOB_ID
CI_BUILD_REF CI_COMMIT_SHA
CI_BUILD_TAG CI_COMMIT_TAG
CI_BUILD_REF_NAME CI_COMMIT_REF_NAME
CI_BUILD_REF_SLUG CI_COMMIT_REF_SLUG
CI_BUILD_NAME CI_JOB_NAME
CI_BUILD_STAGE CI_JOB_STAGE
CI_BUILD_REPO CI_REPOSITORY_URL
CI_BUILD_TRIGGERED CI_PIPELINE_TRIGGERED
CI_BUILD_MANUAL CI_JOB_MANUAL
CI_BUILD_TOKEN CI_JOB_TOKEN

.gitlab-ci.yml defined variables

NOTE:注意:
以下の機能は、GitLab Runner 0.5.0 かそれ以上のバージョン もしくは GitLab CI 7.14 かそれ以上のバージョンが必要です。

GitLab CIでは、 .gitlab-ci.yml に変数を定義し、ビルド環境に適用できます。そのため、
変数はリポジトリーに保存でき、RAILS_ENVDATABASE_URL などのセキュリティーの
必要のないプロジェクトの設定に利用することができます。

For example, if you set the variable below globally (not inside a job), it will
be used in all executed commands and scripts:

例えば、以下のような変数をグローバル(ジョブ内ではなく)に定義すると、全てのコマンドと
スクリプトで利用できます:

variables:
  DATABASE_URL: "postgres://postgres@postgres/my_database"

YAMLで定義された変数は、同様に作成される service containers
にも適用されます。以下のような方法でそれらを修正することもできます。

変数は、グローバルレベルで定義する事もできますが、ジョブレベルで定義することもできます。
グローバルで定義した変数をジョブ内で無効にしたい場合は、空のハッシュを定義します:

job_name:
  variables: {}

変数定義の設定内に他の定義を読み込んで利用することもできます。(または、$$ でエスケープします):

variables:
  LS_CMD: 'ls $FLAGS $$TMP_DIR'
  FLAGS: '-al'
script:
  - 'eval $LS_CMD'  # will execute 'ls -al $TMP_DIR'

変数

グループレベル変数が GitLab 9.4 から導入されました。

CAUTION: 重要:
注意が必要なこととして、変数は秘匿されることはありません。明示的に指定すれば、
ジョブ内ではそれらの値はログに出力することができます。プロジェクトがパブリックまたは、
インターナルの場合、project's Pipelines settings
でパイプラインをプライベートに設定できます。
変数の秘匿についての議論は、#13784 を読んでください。

GitLab CI ではプロジェクト単位やグループ単位の変数をパイプライン環境に
設定できます。それらの変数は、リポジトリーの外(.gitlab-ci.yml ではなく) に
保存され、GitLab Runnerに安全に渡されてパイプラインの実行時に利用されます。
この方法を使って、パスワードやSSH鍵や認証情報などを保存することを推奨します。

プロジェクトレベルの変数は、プロジェクト内の Settings > CI/CD で設定します。
Variables セクションで確認してください。

同じように、グループレベルの変数は、グループの Settings > CI/CD で設定します。
Variables セクションで確認してください。
全ての変数は、 subgroups に再帰的に継承されます。

variables.png

一度セットされると、全ての後続のパイプラインで使用できるようになります。protect your variables も同様です

プロテクト変数

GitLab 9.3 から導入されました。

変数はプロテクトに設定できます。変数をプロテクトに設定すると、
protected branchesprotected tags で実行されているパイプラインにのみ安全に
渡されます。その他のパイプラインでは、プロテクト変数は取得できません。

プロテクト変数は、プロジェクトの Settings > CI/CD で追加できます。
Variables セクションで確認して、"Protected" にチェックしてください。

手動起動時の指定変数

Introduced in GitLab 10.8 で導入されました。

manual pipeline で一つのパイプラインが作成されたときにのみ適用される変数です。

デプロイ変数

GitLab 8.15 で導入されました。

デプロイ構成を担当する Project services では、ビルド環境に独自に変数を定義する必要があるかもしれません。
これらの変数は、deployment jobs でのみ定義されます。
定義されている変数については、利用しているプロジェクトサービスのドキュメントを確認してください。

デプロイ用変数を定義しているサンプルのプロジェクトは、Kubernetes Service があります。

デバッグ トレース

GitLab Runner 1.7で導入されました。

CAUTION: 警告:
デバッグトレースを有効にするとセキュリティに対する深刻な影響がある可能性があります。
出力には、変数の全てとシークレットの内容が全て含まれます!出力は、GitLabサーバーに
アップロードされて、ジョブのトレースで見えるようになります。

デフォルトでは、GitLabランナーはジョブ実行中の実行詳細のほとんどを表示することはありません。
この挙動によりジョブのトレースは短縮されて、明示的にそれらを画面に出力するようにスクリプトを
記載しない限り、トレース上にシークレット情報が漏れないようにしています。

もし、ジョブが想定の挙動をしていない場合、この設定は問題を発見するのを非常に難しくしています;
このような時には、.gitlab-ci.yml でデバッグトレースを有効にする事ができます。
この機能はGitLab Runner v1.7 以降では、シェル実行のトレースで利用でき、実行中の
全てのコマンドを詳細なジョブトレースとして、変数に何が入っているかも含めて見ることができます。

この機能を有効にする前に、ジョブを team members only でしか見えないようにしてください。
再度見られるする場合は、その前に過去のジョブのデバッグトレースを全て削除するべきです。

デバッグトレースを有効にするには、 CI_DEBUG_TRACE 変数を true に変更してください:

job_name:
  variables:
    CI_DEBUG_TRACE: "true"

デバッグトレースをtrue にした場合のサンプル出力の一部です:

...

export CI_SERVER_TLS_CA_FILE="/builds/gitlab-examples/ci-debug-trace.tmp/CI_SERVER_TLS_CA_FILE"
if [[ -d "/builds/gitlab-examples/ci-debug-trace/.git" ]]; then
  echo $'\''\x1b[32;1mFetching changes...\x1b[0;m'\''
  $'\''cd'\'' "/builds/gitlab-examples/ci-debug-trace"
  $'\''git'\'' "config" "fetch.recurseSubmodules" "false"
  $'\''rm'\'' "-f" ".git/index.lock"
  $'\''git'\'' "clean" "-ffdx"
  $'\''git'\'' "reset" "--hard"
  $'\''git'\'' "remote" "set-url" "origin" "https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git"
  $'\''git'\'' "fetch" "origin" "--prune" "+refs/heads/*:refs/remotes/origin/*" "+refs/tags/*:refs/tags/*"
else
  $'\''mkdir'\'' "-p" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template"
  $'\''rm'\'' "-r" "-f" "/builds/gitlab-examples/ci-debug-trace"
  $'\''git'\'' "config" "-f" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template/config" "fetch.recurseSubmodules" "false"
  echo $'\''\x1b[32;1mCloning repository...\x1b[0;m'\''
  $'\''git'\'' "clone" "--no-checkout" "https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git" "/builds/gitlab-examples/ci-debug-trace" "--template" "/builds/gitlab-examples/ci-debug-trace.tmp/git-template"
  $'\''cd'\'' "/builds/gitlab-examples/ci-debug-trace"
fi
echo $'\''\x1b[32;1mChecking out dd648b2e as master...\x1b[0;m'\''
$'\''git'\'' "checkout" "-f" "-q" "dd648b2e48ce6518303b0bb580b2ee32fadaf045"
'
+++ hostname
++ echo 'Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-machine-1480971377-317a7d0f-digital-ocean-4gb...'
Running on runner-8a2f473d-project-1796893-concurrent-0 via runner-8a2f473d-machine-1480971377-317a7d0f-digital-ocean-4gb...
++ export CI=true
++ CI=true
++ export CI_DEBUG_TRACE=false
++ CI_DEBUG_TRACE=false
++ export CI_COMMIT_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ CI_COMMIT_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ export CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ export CI_COMMIT_REF_NAME=master
++ CI_COMMIT_REF_NAME=master
++ export CI_JOB_ID=7046507
++ CI_JOB_ID=7046507
++ export CI_REPOSITORY_URL=https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git
++ CI_REPOSITORY_URL=https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@example.com/gitlab-examples/ci-debug-trace.git
++ export CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
++ CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
++ export CI_PROJECT_ID=1796893
++ CI_PROJECT_ID=1796893
++ export CI_PROJECT_DIR=/builds/gitlab-examples/ci-debug-trace
++ CI_PROJECT_DIR=/builds/gitlab-examples/ci-debug-trace
++ export CI_SERVER=yes
++ CI_SERVER=yes
++ export 'CI_SERVER_NAME=GitLab CI'
++ CI_SERVER_NAME='GitLab CI'
++ export CI_SERVER_VERSION=
++ CI_SERVER_VERSION=
++ export CI_SERVER_REVISION=
++ CI_SERVER_REVISION=
++ export GITLAB_CI=true
++ GITLAB_CI=true
++ export CI=true
++ CI=true
++ export GITLAB_CI=true
++ GITLAB_CI=true
++ export CI_JOB_ID=7046507
++ CI_JOB_ID=7046507
++ export CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
++ CI_JOB_TOKEN=xxxxxxxxxxxxxxxxxxxx
++ export CI_COMMIT_REF=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ CI_COMMIT_REF=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ export CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ CI_COMMIT_BEFORE_SHA=dd648b2e48ce6518303b0bb580b2ee32fadaf045
++ export CI_COMMIT_REF_NAME=master
++ CI_COMMIT_REF_NAME=master
++ export CI_COMMIT_NAME=debug_trace
++ CI_JOB_NAME=debug_trace
++ export CI_JOB_STAGE=test
++ CI_JOB_STAGE=test
++ export CI_SERVER_NAME=GitLab
++ CI_SERVER_NAME=GitLab
++ export CI_SERVER_VERSION=8.14.3-ee
++ CI_SERVER_VERSION=8.14.3-ee
++ export CI_SERVER_REVISION=82823
++ CI_SERVER_REVISION=82823
++ export CI_PROJECT_ID=17893
++ CI_PROJECT_ID=17893
++ export CI_PROJECT_NAME=ci-debug-trace
++ CI_PROJECT_NAME=ci-debug-trace
++ export CI_PROJECT_PATH=gitlab-examples/ci-debug-trace
++ CI_PROJECT_PATH=gitlab-examples/ci-debug-trace
++ export CI_PROJECT_NAMESPACE=gitlab-examples
++ CI_PROJECT_NAMESPACE=gitlab-examples
++ export CI_PROJECT_URL=https://example.com/gitlab-examples/ci-debug-trace
++ CI_PROJECT_URL=https://example.com/gitlab-examples/ci-debug-trace
++ export CI_PIPELINE_ID=52666
++ CI_PIPELINE_ID=52666
++ export CI_RUNNER_ID=1337
++ CI_RUNNER_ID=1337
++ export CI_RUNNER_DESCRIPTION=shared-runners-manager-1.example.com
++ CI_RUNNER_DESCRIPTION=shared-runners-manager-1.example.com
++ export 'CI_RUNNER_TAGS=shared, docker, linux, ruby, mysql, postgres, mongo'
++ CI_RUNNER_TAGS='shared, docker, linux, ruby, mysql, postgres, mongo'
++ export CI_REGISTRY=registry.example.com
++ CI_REGISTRY=registry.example.com
++ export CI_DEBUG_TRACE=true
++ CI_DEBUG_TRACE=true
++ export GITLAB_USER_ID=42
++ GITLAB_USER_ID=42
++ export GITLAB_USER_EMAIL=user@example.com
++ GITLAB_USER_EMAIL=user@example.com
++ export VERY_SECURE_VARIABLE=imaverysecurevariable
++ VERY_SECURE_VARIABLE=imaverysecurevariable
++ mkdir -p /builds/gitlab-examples/ci-debug-trace.tmp
++ echo -n '-----BEGIN CERTIFICATE-----
MIIFQzCCBCugAwIBAgIRAL/ElDjuf15xwja1ZnCocWAwDQYJKoZIhvcNAQELBQAw'

...

ジョブスクリプト内での CI変数の利用方法

変数は全て、ビルド環境で環境変数として定義され、それらの変数を利用する方法は通常の変数として使用できます。ジョブスクリプトとして利用されるのは、bash または sh がほとんどです。

環境変数を利用するには、ランナーの shell それぞれの文法で利用します。

Shell 利用
bash/sh $variable
windows batch %variable%
PowerShell $env:variable

bash で環境変数を利用するには、変数名の前に($)を付けます:

job_name:
  script:
    - echo $CI_JOB_ID

Windows Batch で環境変数を利用するには、変数の前後を (%) で挟みます:

job_name:
  script:
    - echo %CI_JOB_ID%

Windows PowerShell 環境で環境変数を利用するには、変数名の前に($env:)を付けます:

job_name:
  script:
    - echo $env:CI_JOB_ID

全ての環境変数をリストアップするには、 export コマンドを使います。
しかし、シークレット変数の値もジョブのログ中に出力されてしまうので気をつけてください:

job_name:
  script:
    - export

サンプル値:

export CI_JOB_ID="50"
export CI_COMMIT_SHA="1ecfd275763eff1d6b4844ea3168962458c9f27a"
export CI_COMMIT_REF_NAME="master"
export CI_REPOSITORY_URL="https://gitlab-ci-token:abcde-1234ABCD5678ef@example.com/gitlab-org/gitlab-ce.git"
export CI_COMMIT_TAG="1.0.0"
export CI_JOB_NAME="spec:other"
export CI_JOB_STAGE="test"
export CI_JOB_MANUAL="true"
export CI_JOB_TRIGGERED="true"
export CI_JOB_TOKEN="abcde-1234ABCD5678ef"
export CI_PIPELINE_ID="1000"
export CI_PIPELINE_IID="10"
export CI_PROJECT_ID="34"
export CI_PROJECT_DIR="/builds/gitlab-org/gitlab-ce"
export CI_PROJECT_NAME="gitlab-ce"
export CI_PROJECT_NAMESPACE="gitlab-org"
export CI_PROJECT_PATH="gitlab-org/gitlab-ce"
export CI_PROJECT_URL="https://example.com/gitlab-org/gitlab-ce"
export CI_REGISTRY="registry.example.com"
export CI_REGISTRY_IMAGE="registry.example.com/gitlab-org/gitlab-ce"
export CI_RUNNER_ID="10"
export CI_RUNNER_DESCRIPTION="my runner"
export CI_RUNNER_TAGS="docker, linux"
export CI_SERVER="yes"
export CI_SERVER_NAME="GitLab"
export CI_SERVER_REVISION="70606bf"
export CI_SERVER_VERSION="8.9.0"
export CI_SERVER_VERSION_MAJOR="8"
export CI_SERVER_VERSION_MINOR="9"
export CI_SERVER_VERSION_PATCH="0"
export GITLAB_USER_ID="42"
export GITLAB_USER_EMAIL="user@example.com"
export CI_REGISTRY_USER="gitlab-ci-token"
export CI_REGISTRY_PASSWORD="longalfanumstring"

Variables expressions

GitLab 10.7 で導入されました

.gitlab-ci.yml 内で、only / except という表現による変数の利用制限が可能になりました。
この方法を使うことにより、GitLabへコードをPushした後にパイプラインを作るかどうか
制限することができるようになりました。

これは特に変数をパイプラインのトリガー変数と一緒に使うと便利に使えます。

deploy:
  script: cap staging deploy
  environment: staging
  only:
    variables:
      - $RELEASE == "staging"
      - $STAGING

Each expression provided is going to be evaluated before creating a pipeline.

If any of the conditions in variables evaluates to truth when using only,
a new job is going to be created. If any of the expressions evaluates to truth
when except is being used, a job is not going to be created.

This follows usual rules for only / except policies.

Supported syntax

Below you can find supported syntax reference:

  1. Equality matching using a string

    Example: $VARIABLE == "some value"

    You can use equality operator == to compare a variable content to a
    string. We support both, double quotes and single quotes to define a string
    value, so both $VARIABLE == "some value" and $VARIABLE == 'some value'
    are supported. "some value" == $VARIABLE is correct too.

  2. Checking for an undefined value

    Example: $VARIABLE == null

    It sometimes happens that you want to check whether a variable is defined
    or not. To do that, you can compare a variable to null keyword, like
    $VARIABLE == null. This expression is going to evaluate to truth if
    variable is not defined.

  3. Checking for an empty variable

    Example: $VARIABLE == ""

    If you want to check whether a variable is defined, but is empty, you can
    simply compare it against an empty string, like $VAR == ''.

  4. Comparing two variables

    Example: $VARIABLE_1 == $VARIABLE_2

    It is possible to compare two variables. This is going to compare values
    of these variables.

  5. Variable presence check

    Example: $STAGING

    If you only want to create a job when there is some variable present,
    which means that it is defined and non-empty, you can simply use
    variable name as an expression, like $STAGING. If $STAGING variable
    is defined, and is non empty, expression will evaluate to truth.
    $STAGING value needs to a string, with length higher than zero.
    Variable that contains only whitespace characters is not an empty variable.

  6. Pattern matching (added in 11.0)

    Example: $VARIABLE =~ /^content.*/

    It is possible perform pattern matching against a variable and regular
    expression. Expression like this evaluates to truth if matches are found.

    Pattern matching is case-sensitive by default. Use i flag modifier, like
    /pattern/i to make a pattern case-insensitive.

140
120
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
140
120

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?