GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する
GitHub Actions ワークフローで Configuration variables (構成変数) がサポートされました。
GitHub Actions - Support for configuration variables in workflows | GitHub Changelog
従来の環境変数とシークレット
#従来もワークフローファイルに env
キーワードで環境変数を宣言することはできましたが、ハードコーディングだしワークフローファイル内でしか利用できません[1]。API Key などの機密情報はシークレットとして外部から設定できます。シークレットはいったん設定してしまうと値を見ることはできないし[2]、あくまで機密情報用なので変数として使うには適していません。ということで、外部から設定可能な環境変数は GitHub Action 登場当初から「なぜないんだろう?」と思っていた機能です。
構成変数の種類
#先にまとめてしまうと構成変数には以下のような種類があります。
名称 | スコープ | 用途 |
---|---|---|
Organization variables | オーガニゼーション内の全リポジトリの全ワークフローから参照可能[3] | オーガニゼーション全体で利用する値 |
Repository variables | リポジトリ内の全てのワークフローから参照可能 | リポジトリ全体で利用する値 |
Environments variables | リポジトリ内の全てのワークフローが特定環境用に実行される際に参照可能 | リポジトリで定義した環境によって値を変える |
一番使うのがリポジトリ単位の変数 Repository variables でしょう。Environments variables は development、production などのデプロイターゲットに応じて値を変えたい変数がある場合に利用します。
構成変数はプレーンテキストとして管理されます。機密情報は従来通りシークレットの方で管理します。
オーガニゼーションレベルの構成変数
#まず、オーガニゼーションレベルの構成変数(Organization variables)の設定です。
オーガニゼーションの Settings > Security > Secrets and variables > Actions を開きます。
Secrets
に並んで Variables
のタブが追加されています。
New organization variable
をクリックして構成変数追加画面を開き、Name
と Value
を入力し、Add variable
をクリックします。
追加済みの構成変数は値とともに参照できます。
リポジトリ単位の構成変数
#次にリポジトリ単位の構成変数(Repository variables)です。
リポジトリの Settings > Security > Secrets and variables で Variables タブを開くと構成変数の画面が開きます。設定済みのオーガニゼーションレベルの変数も参照できます。
New repository variable
をクリックすると、変数追加画面が開きますので、Name
と Value
を入力して Add variable
をクリックします。
追加済みの変数が値と共に表示されます。
環境変数の定義
#最後はリポジトリの環境(Environments)単位の変数(Environment variable)です。
Environments はデプロイターゲットを記述するために使用され、Environments ごとに保護ルールとシークレット・構成変数を設定可能です。保護ルールを使うと、Environments を参照するジョブで承認を要求する、特定のブランチに制限するなどの条件を指定できます。詳細はドキュメントを参照してください。
Using environments for deployment - GitHub Docs
Environments は public リポジトリと有償プランの private リポジトリで利用できますが、無償プランの private リポジトリでは利用できないようです。
まず、環境の定義からです。リポジトリの Settings > Environments を開き、New environment
をクリックします。
Environments の追加画面が開きますので、Name
を入力して、Configure environment
をクリックします。
Environment の構成画面が開きます。ここで、環境用のブランチ、シークレット、環境変数の追加ができます。Add variable
をクリックします。
変数追加画面が開くので、Name
と Value
を入力して Add variable
をクリックします。
追加された変数は値と共に参照できます。
development と同様に、staging や production の環境も追加しました。
Actions variables の画面では、全ての Environment variables が値と共に参照できます。
ワークフローからの構成変数の利用
#では定義した構成変数をワークフローから利用してみましょう。以下のようなワークフローファイルを用意しました。
name: Show variables
on:
workflow_dispatch:
inputs:
deployment_target:
description: 'Deployment target'
required: true
default: 'development'
type: choice
options:
- development
- staging
- production
jobs:
display-variables:
runs-on: ubuntu-latest
environment: ${{ inputs.deployment_target }}
steps:
- name: Use variables
run: |
echo "Organization variable : ${{ vars.ORG_NAME }}"
echo "Repository variable : ${{ vars.PLATFORM_VERSION }}"
echo "Environment variable : ${{ vars.SERVICE_URL }}"
手動実行の入力パラメータとして、ターゲットのデプロイ先(development、staging、production)を選択するようにしました。ここで選択されたターゲットはジョブの environment
に設定され、デプロイ先に応じた変数が参照されます。ジョブのステップでは、オーガニゼーションレベル、リポジトリ単位、環境単位の変数を表示しています。変数は vars
コンテキストから取り出すことができます。
このワークフローを実行すると、Deployment target のセレクトボックスが表示されます。
staging を選択して実行しました。
実行結果です。各レベルで設定した変数が出力されています。
最後に
#以上、GitHub Actions で使えるようになった構成変数を試しました。特に難しいところはないと思います。リポジトリの Environments に関してはこれまでその存在を意識していませんでした。従来は専用の CD ツールやワークフロー内部で扱っていたようなブランチルール、シークレット、環境変数を管理できるようになっていました。