GitHub Actions環境変数とシークレットの起動

新しいGitHub Actionsの環境変数に慣れていない場合、それを保存する方法をまだ学んでいないかもしれません。でも、可能です!

このチュートリアルでは、GitHub Actionsの環境変数を保存する異なる方法と、GitHub Actionsと一緒に作業する際に必要なシークレットを学びます。

準備はいいですか?読み進めて始めましょう!

前提条件

このチュートリアルは、Gitがインストールされた任意のオペレーティングシステムで動作し、チュートリアルではUbuntu OSが使用されています。また、GitHub Actionsの環境変数リポジトリにコードをコミットするためには、Git操作の基本的な作業知識が必要です。

GitHub Actionsの環境変数の設定

GitHub Actionsワークフローを自動化する際、ワークフローに環境変数を添付する必要があります。どうやるのか?最初に、ワークフローでenvキーワードを使用してカスタム環境変数を作成および指定する必要があります。

1. .github/workflowsという名前のディレクトリを作成して、ワークフローファイルを保存します。

2. 次に、お好みの名前でファイルを.github/workflowsディレクトリに作成します。ただし、この例では、ファイルの名前はmain.ymlとします。以下のコードをmain.ymlファイルにコピーして貼り付けます。

以下のコードは、コードがワークフローをトリガーしたときにAPI_KEY環境変数を設定して表示します。

name: env_tutorial
## プッシュまたは
## mainブランチにプルリクエストがあるときにワークフローをトリガーします
on: [pull_request, push] 

env:
  ## 環境変数を設定します
  API_KEY: XXXXXXXXXXXX    

jobs:
  job1:
    ## ジョブが実行されるランナーのタイプを指定します
    ## ここではubuntu最新版で実行されます
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## 環境変数を参照します
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 別の方法で環境変数を参照します
        run: echo "The API key is:$API_KEY"

3. コードをGitHubリポジトリにコミットしてプッシュします。

git add .
git commit -m "update"
git push
Pushing updates to the GitHub Actions environment variables repository

4. 今、ウェブブラウザを開いてGitHubでプロジェクトに移動します。 アクションタブをクリックし、現在のコミットをクリックします。

GitHubがワークフローを実行したことを示す画像が以下に表示されます。

GitHub actions Environment variables for repository

5. 最後に、job1またはjob2,のいずれかをクリックして、正常に初期化された環境変数が参照されていることがわかります。

Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

ジョブ用の環境変数の定義

ワークフローファイル全体で環境変数を初期化したので、どのジョブでも環境変数を参照できます。しかし、おそらく1つのジョブだけが環境変数を参照することを望んでいるかもしれません。その場合は、ジョブ自体にenvキーワードを配置してください。

1. main.ymlファイルのコードを以下のコードに置き換えます。

以下のコードは、特定のジョブに環境変数を配置すると、他のジョブは環境変数を参照できないことを示しています。

name: env_tutorial
## メインブランチでプッシュまたは
## プルリクエストがある場合にワークフローをトリガーする
on: [pull_request, push] 

jobs:
  job1:
    ## ジョブが実行されるランナーの種類
    runs-on: ubuntu-latest 
    env:
      ## 環境変数
      API_KEY: XXXXXXXXXXXX    
    steps:
      - name: step 1
        ## 環境変数を参照する
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 別の方法で環境変数を参照する
        run: echo "The API key is:$API_KEY"  

2. 変更をコミットして、以前のセクションでGitHub Actions環境変数にコードからジョブをプッシュします。

3. 最後に、GitHubのプロジェクトに移動し、job1job2の両方をクリックして、それらの比較を確認します。

  • 仕事1– 環境変数を完璧に参照していることがわかります。
  • 仕事2– APIキーが空白です。
Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

ステップ用の環境変数の定義

仕事内で環境変数を指定する方法を学んだので、ステップでも同じことができる方法が気になるかもしれません。

仕事のステップでは、ステップ内で環境変数を指定します。

1. main.ymlファイルのコードを以下のコードに置き換えます。

以下のコードでは、ステップ1で環境変数を指定していますが、ステップ2では指定していません。その後のステップでその効果を見ることができます。

name: env_tutorial
## プッシュまたは
## メインブランチへのプルリクエストがあった場合にワークフローをトリガーします
on: [pull_request, push] 

jobs:
  job1:
    ## ジョブが実行されるランナーのタイプ
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        env:
          ## ステップ1の環境変数
          API_KEY: XXXXXXXXXXXX    
        ## 環境変数を参照します
        run: echo "The API key is:${{env.API_KEY}}"   
      - name: step 2
        ## 環境変数を参照します
        run: echo "The API key is:${{env.API_KEY}}"   

2. これで変更をコミットして、コードをGitHubにプッシュします。

3. 最後に、GitHub Actions環境変数のプロジェクトに移動し、job1をクリックします。

たとえば、同じジョブ (job1) 内で2つのAPIキーを参照しているにもかかわらず、ステップ2 ではAPIキー(空白)を評価できませんでした。なぜなら、コード内でステップ2で環境変数を指定していなかったからです。

Setting environment variables for steps

GitHub Actionsの環境変数とSecretsを介した環境変数の管理

ハードコーディングせずに、環境変数を安全に保存したい場合、GitHub Secretsがその役割を果たします。 GitHub Actionsの環境変数は、Secretsに入れた値を暗号化するため、肉眼で見えたり読まれたりしません。

この方法で作成されたシークレットは、ワークフロー全体、ジョブ、ステップからアクセス可能であり、制限はありません。

GitHub Secretsに環境変数を保存するには:

1. ますますコードをGitHubにプッシュして、前のセクションで行ったようにします。

2. 次に、GitHubでプロジェクトに移動し、設定タブをクリックします。

シークレットをクリックして、新しいシークレットを追加を開始します。

Storing environment variables in Secrets

3. 次に、新しいリポジトリのシークレットをクリックすると、追加するシークレットに関する詳細を記入するためのフォームが表示されます。

Creating new repository secret

4. フォームに適切に記入し(名前)、シークレットの追加ボタンをクリックして送信します。これでAPI_KEYがGitHub Secretsに保存されます。このフォームでは、GitHubは安全に環境変数をシークレットとして設定し、GitHub Actionsで作業する際に参照できます。

Filling name and value of the new secret

5. main.yml ファイルを編集し、env キーワードを secrets に置き換えます。

以下では、APIキーを ${{secrets.API_KEY}} の形式で参照しています。APIキー自体をハードコーディングするのではなく、この形式で参照するようにしてください。

name: env_tutorial
## プッシュやプルリクエストがメインブランチで行われた場合にワークフローをトリガーします
## ジョブが実行されるランナーのタイプ
on: [pull_request, push] 

jobs:
  job1:
    ## 環境変数を参照します
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## 環境変数を参照します
        run: echo "The API key is:${{secrets.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## 環境変数を参照します
        run: echo "The API key is:${{secrets.API_KEY}}"  

6. 最後に、コードをコミットしてGitHubにプッシュし、GitHub Actionsの環境変数に移動します。最初のセクションを参照してください。

以下の画像のようなものが表示されますが、GitHubはシークレットに入力した値を暗号化するため、実際の API_key は表示されません。

Displaying API key from GitHub Actions environment variables secrets

デフォルトのGitHub環境変数を参照する

GitHubが提供するいくつかのデフォルトの環境変数を使用すると、ハードコーディングされたパスではなくリポジトリ内のファイルシステムにアクセスできます。デフォルトのGitHub環境変数を使用すると、GitHubから提供される環境変数を参照する際により動的になります。

デフォルトの環境変数を使用して取得できるパスの一部は以下の通りです:

  • GITHUB_JOB – 現在のジョブの job_id を提供します。
  • GITHUB_ACTION – 現在のアクションの ID を提供します。
  • GITHUB_ACTION_PATH – アクションが配置されているパスを提供します。
  • GITHUB_ACTOR – ワークフローを開始した人またはアプリの名前を提供します。たとえば、GitHub のユーザー名です。
  • GITHUB_RUN_ID – `run` コマンドの一意の番号を提供します。

次のコードで、main.yml ファイルの内容を置き換えてください。以下のコードは、コードに記載されているデフォルトの環境変数を表示します。

name: env_tutorial
## メイン ブランチにプッシュまたはプルリクエストがあるときにワークフローをトリガーします
## ワークフローが実行されるランナーの種類
on: [pull_request, push] 

jobs:
  job1:
    ## ジョブが実行されるランナーの種類を参照します
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        run: |
          echo "The job_id is: $GITHUB_JOB"   # デフォルトの環境変数を参照します
          echo "The id of this action is: $GITHUB_ACTION"   # デフォルトの環境変数を参照します
          echo "The run id is: $GITHUB_RUN_ID" 
          echo "The GitHub Actor's username is: $GITHUB_ACTOR"
      - name: step 2
        run: |
          echo "The run id is: $GITHUB_RUN_ID"

コードの変更をコミットして GitHub にプッシュし、GitHub Actions の環境変数プロジェクトでアクションを確認すると、以下の画像のようなものが表示されます。

Referencing the Default GitHub environment variables

結論

このチュートリアルを通じて、GitHub Actions の環境変数の管理方法を学びました。今や、環境変数を安全に保存し、GitHub が提供するデフォルトの変数を使用する基本的な知識を持っているはずです。

今後、GitHub Actionsでこの新しい知識をどのように活用する予定ですか?おそらく、デプロイに必要なAPIキーを保存することですか?

Source:
https://adamtheautomator.com/github-actions-environment-variables/