パイプライン変数とは?実行を通じて値を渡す
パイプライン変数とは、値をハードコードすることなく挙動を設定するために使われる、実行中にjobやステップが読み取れる名前付きの値です。
pipelineはいくつかのことを知る必要があります。どのenvironmentへdeployするか、どのバージョンをtag付けするか、どのAPIエンドポイントにアクセスするか、などです。パイプライン変数は、それらの値をjobやステップへ運びます。設定をスクリプトの外に保ち、1つのpipelineをbranchやenvironmentごとに異なる挙動にさせ、secretを注入する制御された手段を提供します。
変数はどこから来るか
- 組み込み: プラットフォームがcommit SHAやbranch名などの値を設定する。
- 定義済み: pipelineファイルで変数を宣言する。
- 保存済み: プロジェクトやorgの設定で定めたsecretやconfig。
- 計算済み: あるステップが書き込んだ値を、他のステップが読み取る。
スコープと優先順位
変数はpipeline全体、単一のjob、または1つのステップにスコープできます。狭いスコープは通常より広いものを上書きするため、同名ならjobレベルの変数がpipelineレベルの変数に勝ちます。優先順位を知っておくと、意外な事態を避けられます。
簡単な例
GitHub Actionsでは、変数を${{ vars.DEPLOY_ENV }}として、あるいはシェルステップ内で環境変数を${ENV_NAME}として読み取ります。jobにenv: ENV_NAME: stagingを設定すると、そのjob内のすべてのステップから見えるようになります。
変数とsecretの比較
プレーンな変数は、機密でない設定には適しています。secret(APIキー、トークン)は特別な種類の変数で、保存時に暗号化され、ログではマスクされます。認証情報をプレーンな変数に入れてはならず、secretをログにechoしてはなりません。
job間で値を渡す
job内のステップは変数を自由に共有しますが、jobは分離されています。ある値をあるjobから別のjobへ送るには、プラットフォームが依存関係のエッジに沿って渡すjob outputを使います。こうしてbuild jobはバージョン文字列をdeploy jobへ手渡せるのです。
重要なポイント
- パイプライン変数は、jobやステップが実行時に読み取る名前付きの値です。
- 変数は組み込み、定義済み、保存済み、または実行中に計算されたものになります。
- 認証情報には(プレーンな変数ではなく)secretを使い、job間の値はoutputで渡しましょう。