ワークフローに変数とスクリプトを実装する

完了

ワークフロー ファイルのコンポーネントを確認したら、さまざまなシナリオでこれらのワークフローをカスタマイズする方法について説明します。 このユニットでは、変数とスクリプトを使用してワークフローを最適化する方法について説明します。 変数は、無意味な構成情報を格納して再利用する方法を提供します。 コンパイラ フラグ、ユーザー名、サーバー名などの構成データを変数として格納できます。 変数は、ワークフローを実行するランナー コンピューターで補間されます。 アクションまたはワークフロー ステップで実行されるコマンドは、変数の作成、読み取り、変更を行うことができます。

独自のカスタム変数を設定することも、GitHub によって自動的に設定される既定の環境変数を使用することもできます。 カスタム変数は、2 つの方法で作成できます。

  • 1 つのワークフローで使用する環境変数を定義するには、ワークフロー ファイルで env キーを使用できます。
  • 複数のワークフローにわたって構成変数を定義するには、組織、リポジトリ、または環境レベルで定義できます。

1 つのワークフローの環境変数を定義する

1 つのワークフローにカスタム環境変数を設定するには、ワークフロー ファイルの env キーを使用して定義できます。 このメソッドによって設定されるカスタム変数のスコープは、定義されている要素に制限されます。 次のスコープの変数を定義できます。

  • ワークフロー全体。ワークフロー ファイルの最上位レベルで env を使用します。
  • jobs.<job_id>.envを使用したワークフロー内のジョブの内容。
  • ジョブ内の特定のステップ。jobs.<job_id>.steps[*].env を使用します。

手記

jobs.<job_id>.envjobs.<job_id>.steps[*].env の両方で、このモジュールの後半で説明するコンテキストを実装しています。

次のワークフロー例では、DAY_OF_WEEKGreeting の 2 つの変数を実装して、実行時にあいさつ文を生成します。

name: Greeting on variable day

on:
  workflow_dispatch

env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello"
        run: echo "$Greeting, today is $DAY_OF_WEEK!"

環境変数の名前付け規則

環境変数を設定する場合、既定の環境変数名は使用できません。 これらの既定の変数のいずれかの値をオーバーライドしようとすると、割り当ては無視されます。

ヒント

既定の環境変数の完全な一覧については、「既定の環境変数 」を参照してください。

リポジトリの構成変数を作成する

個人用アカウント リポジトリのシークレットまたは変数を GitHub で作成するには、リポジトリの所有者である必要があります。 組織のリポジトリのシークレットまたは変数を GitHub で作成するには、admin アクセス権が必要です。 最後に、REST API を使用して個人用アカウント リポジトリまたは組織リポジトリのシークレットまたは変数を作成するには、コラボレーターアクセス権が必要です。

構成変数の優先順位

同じ名前の変数が複数のレベルに存在する場合は、最も低いレベルの変数が優先されます。 たとえば、組織レベルの変数の名前がリポジトリ レベルの変数と同じ場合、リポジトリ レベルの変数が優先されます。 同様に、組織、リポジトリ、環境がすべて同じ名前の変数を持つ場合は、環境レベルの変数が優先されます。

ワークフローにスクリプトを追加する

GitHub Actions ワークフローを使用してスクリプトとシェル コマンドを実行し、割り当てられたランナーで実行できます。 次の例では、run キーワードを使用してランナーでコマンド npm install -g bats を実行する方法を示します。

jobs:
  example-job:
    runs-on: ubuntu-latest
    steps:
      - run: npm install -g bats

リポジトリに格納されているスクリプトを実行するには、まずリポジトリをランナーにチェックアウトする必要があります。 次の例では、リポジトリをチェックアウトし、作業ディレクトリ(リポジトリ内のスクリプトの場所)を設定し、my-script.sh スクリプトを実行します。

jobs:
  example-job:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./scripts
    steps:
      - name: Check out the repository to the runner
        uses: actions/checkout@v4  
      - name: Run a script
        run: ./my-script.sh

ワークフロー ジョブを実行するスクリプトはすべて実行可能である必要があります。 スクリプトは、スクリプトを実行するインタープリター (run: bash script.sh など) に引数として渡すか、ファイル自体を実行可能にすることで渡すことができます。