GitHub Actions で機密性の無い変数を設定できるようになったので試してみる
GitHub Actions で変数を設定できるようになりました 🎉🎉🎉🎉
これまではワークフローで再利用可能な値を使用するためには Secret として保存する必要がありました。
しかし Secret は一度設定すると値を確認することができないため、機密性の無いデータでもどんな値が設定されているかを確認することができないのが不便でした。
今回の更新で、機密性の無いデータは変数として設定することでどんな値が設定されているかを確認することができるようになりました。
個人的に結構嬉しい変更だったのでさっそく実際に試してみたメモです。
設定手順
変数は次の 3 つのレベルで設定することができます。
それぞれのレベルの設定手順について記述します。
リポジトリレベルの変数を設定する
設定手順
Settings
をクリックしてリポジトリの設定画面に遷移します。
左のメニューから Secrets and variables
→ Actions
の順番にクリックしてシークレット・変数の設定画面に遷移します。
Variables
タブを選択し、 New repository variable
をクリックします。
Name
に変数名を入力して Value
に変数の値を入力します。
それぞれ入力したら Add variable
をクリックします。
これで変数が追加されました。
設定した値が表示されていることが確認できます。
環境レベルの変数を設定する手順
設定手順
Settings
をクリックしてリポジトリの設定画面に遷移します。
左のメニューから Environments
をクリックして環境の一覧画面に遷移します。
任意の環境をクリックして環境の設定画面に遷移します。
環境が作成されていない場合は New environment
をクリックして作成することができます。
Environment variables
セクションの Add variable
をクリックすると変数を追加するダイアログが表示されます。
Name
に変数名を入力して Value
に変数の値を入力します。
それぞれ入力したら Add variable
をクリックします。
これで変数が追加されました。
設定した値が表示されていることが確認できます。
組織レベルの変数を設定する手順
設定手順
組織の画面で Settings
をクリックして組織の設定画面に遷移します。
左のメニューから Secrets and variables
→ Actions
の順番にクリックしてシークレット・変数の設定画面に遷移します。
Variables
タブを選択し、 New organization variable
をクリックします。
Name
に変数名を入力して Value
に変数の値を入力します。
Repository access
ではこの変数を参照できるリポジトリを制限することができます。
次の 3 つから選択できます。
-
Public repositories
: Public リポジトリから参照できる。有料プランの場合は Private リポジトリも含まれる。 -
Private repositories
: Private リポジトリから参照できる。 ( 有料プランに入る必要がある ) -
Selected repositories
: 任意の選択したリポジトリから使用できる。
それぞれ入力したら Add variable
をクリックします。
これで変数が追加されました。
設定した値が表示されていることが確認できます。
複数のレベルで同じ名前の変数が設定されている場合の優先度
複数のレベルで同じ名前の変数が設定されている場合は、最も低いレベルにある変数が優先されます。
例えば、組織・リポジトリで同じ名前の変数が設定されている場合はリポジトリレベルの変数が優先されます。
同様に、組織・リポジトリ・環境で同じ名前の変数が設定されている場合は環境レベルの変数が優先されます。
ワークフローから参照する
ワークフローからは変数を ${{ vars.VARIABLE_NAME }}
のようにして参照することができます。
次の YAML は組織・リポジトリ・環境のそれぞれのレベルで設定した変数を参照するワークフローのサンプルコードです。
on:
push:
jobs:
repo:
runs-on: ubuntu-latest
steps:
# リポジトリレベルの変数を参照
- run: echo ${{ vars.EXAMPLE_VARIABLE }}
env:
runs-on: ubuntu-latest
environment: dev
steps:
# 環境レベルの変数を参照
- run: echo ${{ vars.EXAMPLE_ENVIRONMENT_VARIABLE }}
org:
runs-on: ubuntu-latest
steps:
# 組織レベルの変数を参照
- run: echo ${{ vars.EXAMPLE_ORGANIZATION_VARIABLE }}
以下が実行結果です。
Secret とは違い、変数の値がログに平文で出力されていることが確認できます。
参考
Discussion