ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

GitHub Actionsの仮想環境

GitHubは、ホストされた仮想マシンを使用してワークフローを実行します。 仮想マシンには、GitHub Actionsで使用できるツール、パッケージ、および設定の環境が含まれています。

GitHub Actions is currently in limited public beta and is subject to change. We strongly recommend that you do not use this feature for high-value workflows and content during the beta period. For more information about the beta, see "About GitHub Actions."

For more information about using GitHub Actions, see "Automating your workflow with GitHub Actions."

ここには以下の内容があります:

仮想環境について

LinuxおよびWindowsのGitHub Actions仮想環境は、GitHub Actions runnerがインストールされたMicrosoft AzureのStandard_DS2_v2仮想マシン上にホストされています。 GitHub Actions runner は、Azure Pipelines Agent のフォークです。 Standard_DS2_v2マシンリソースに関する詳しい情報については、Microsoft Azureドキュメンテーションの「DSv2-series」を参照してください。 GitHubは、macOS仮想環境のホストにMacStadiumを使用しています。

GitHubにホストされたマシンを使用すると、マシンのメンテナンスとアップグレードが自動的に行われます。 ワークフローは、仮想マシンで直接実行することも、Dockerコンテナで実行することもできます。

LinuxおよびmacOSの仮想環境は、パスワード不要のsudoにより動作します。 現在のユーザが持っているよりも高い権限が求められるコマンドやインストールツールを実行する必要がある場合は、パスワードを入力する必要なく、sudoを使うことができます。 詳しい情報については、「Sudo Manual」を参照してください。Windowsの仮想マシンは、ユーザアカウント制御(UAC)無効で管理者として実行されるよう設定しています。 詳しい情報については、「ユーザーアカウント制御のしくみ」を参照してください。

GitHubは、Linux、macOS、およびWindows環境の仮想マシンをホストします。 ワークフローの各ジョブは、仮想環境の新しいインスタンスで実行されます。 ジョブ実行のステップはすべて、仮想環境の同じインスタンスで実行されるため、そのジョブのアクションはファイルシステムを使用して情報を共有します。

ワークフローのジョブごとに仮想環境を指定することが可能です。 各ジョブを異なる仮想環境で実行するように設定することも、すべてのジョブを同じ環境で実行するように設定することもできます。

サポートされている仮想環境およびハードウェアリソース

各仮想マシンで、同一のハードウェアリソースを使用できます。

GitHubは、複数の仮想環境を提供しています。 各仮想環境でサポートされているソフトウェア、ツール、およびパッケージのリストについては、「GitHub Actionsの仮想環境でのソフトウェア」を参照してください。

仮想環境 YAMLのワークフローラベル
Windows Server 2019 windows-latest or windows-2019
Windows Server 2016 R2 windows-2016
Ubuntu 18.04 ubuntu-latestまたはubuntu-18.04
Ubuntu 16.04 ubuntu-16.04
macOS X Mojave 10.14 macOS-latestまたはmacOS-10.14

GitHubにホストされているRunnerのIPアドレス

WindowsとUbuntuにホストされているRunnerはAzureにホストされ、IPアドレスの範囲がAzureデータセンターと同じになります。 現在、ホストされているRunnerはすべて米国東部2のAzureリージョンにありますが、今後リージョンは追加される可能性があります。

Microsoftは、AzureのIPアドレスの範囲をJSONファイルで毎週更新しています。このファイルは、Azure IP Ranges and Service Tags - Public Cloud (AzureのIPアドレス範囲とサービスタグ - パブリッククラウド)のウェブサイトからダウンロードできます。 内部リソースに対する不正アクセスを防ぐために許可リストが必要な場合には、このIPアドレスの範囲を利用できます。

JSONファイルには、valuesという配列があります。 この配列のうち、"AzureCloud.eastus2"nameidがあるオブジェクトで、サポート対象のIPアドレスが見つかります。

サポート対象のIPアドレスの範囲は、"addressPrefixes"オブジェクトにあります。 次に示すのは、JSONファイルを縮めたサンプルです。

{
  "changeNumber": 84,
  "cloud": "Public",
  "values": [
    {
      "name": "AzureCloud.eastus2",
      "id": "AzureCloud.eastus2",
      "properties": {
        "changeNumber": 33,
        "region": "eastus2",
        "platform": "Azure",
        "systemService": "",
        "addressPrefixes": [
          "13.68.0.0/17",
          "13.77.64.0/18",
          "13.104.147.0/25",
          ...
        ]
      }
    }
  ]
}

GitHubにホストされているマシン上のファイルシステム

GitHubは使用するアクションに対してディレクトリを作成します。 Dockerコンテナで実行されるアクションには、 /githubパスの下に静的なディレクトリがあります。 JavaScriptおよびシェルスクリプトが実行される仮想マシン上のGitHub固有のパスは、静的ではありません。 GitHubには、GitHub Actionsによって使用されるhomeworkspace、およびworkflowディレクトリのファイルパスの構築に使用できる環境変数が用意されています。 各アクションに対してGitHubが作成する環境変数のリストについては、「デフォルトの環境変数」を参照してください。

Dockerコンテナのファイルシステム

Dockerコンテナでファイルパスを構築するには、デフォルトの環境変数を使用することを強くお勧めします。

GitHubは、/githubパス接頭辞を予約し、アクションのために3つのディレクトリを作成します。

環境変数

GitHubは、ワークフローの実行におけるどのステップでも使用できる、デフォルトの環境変数を設定します。 追加の環境変数は、ワークフローファイルに設定されます。 アクションは、環境変数を作成、読み取り、変更することができます。

jobs.<job_id>.steps.envキーワードを使用することで、ワークフロー内のステップに対して環境変数を設定できます。 環境変数の名前では大文字小文字が維持されます。 詳しい情報については、「GitHubのワークフロー構文」を参照してください。

steps:
  - name: Hello world
    run: echo Hello world $FIRST_NAME $middle_name $Last_Name!
    env:
      FIRST_NAME: Mona
      middle_name: The
      Last_Name: Octocat

デフォルトの環境変数

アクションでは、ファイルシステムにアクセスするとき、ハードコードされたファイルパスではなく環境変数を使用することを強くお勧めします。 GitHubは、すべての環境変数でアクションが使用する環境変数を設定します。

環境変数 説明
HOME ユーザーデータの格納に使用されるGitHubホームディレクトリのパス。 たとえば、/github/homeです。
GITHUB_WORKFLOW ワークフローの名前。
GITHUB_ACTION The unique identifier (id) of the action.
GITHUB_ACTOR ワークフローを開始するユーザーまたはアプリの名前。 octocatなどです。
GITHUB_REPOSITORY 所有者およびリポジトリの名前。 octocat/Hello-Worldなどです。
GITHUB_EVENT_NAME ワークフローをトリガーしたwebhookイベントの名前。
GITHUB_EVENT_PATH 完了したwebhookイベントペイロードのファイルのパス。 /github/workflow/event.jsonなどです。
GITHUB_WORKSPACE GitHubワークスペースディレクトリのパス。 ワークフローがactions/checkoutアクションを使用している場合、ワークスペースディレクトリには、リポジトリのコピーがあるサブディレクトリが含まれています。 actions/checkoutアクションを使用していない場合、ディレクトリは空となります。 たとえば、/home/runner/work/my-repo-name/my-repo-nameとなります。
GITHUB_SHA ワークフローをトリガーしたコミットSHA。 たとえば、ffac537e6cbbf934b08745a378932722df287a53です。
GITHUB_REF ワークフローをトリガーしたブランチまたはタグref。 たとえば、refs/heads/feature-branch-1です。 イベントタイプのブランチもタグも利用できない場合、変数は存在しません。
GITHUB_HEAD_REF フォークしたリポジトリのみに設定。 headリポジトリのブランチです。
GITHUB_BASE_REF フォークしたリポジトリのみに設定。 ベースリポジトリのブランチです。

命名規則

メモ: GitHubでは、GITHUB_という環境変数接頭辞は、GitHubが内部で使用するために予約されています。 GITHUB_接頭辞を使用して環境変数またはシークレットを設定すると、エラーになります。

ファイルシステム上の場所にそのポイントを設定した新しい環境変数がある場合は、_PATH接尾辞を指定する必要があります。 デフォルトの変数HOMEGITHUB_WORKSPACEは、「home」および「workspace」という言葉で最初から場所がわかっているため、この規則の例外です。

シークレット (暗号化された変数) の作成と使用

リポジトリに対してwriteアクセスがあるユーザーなら、誰でもシークレットの読み取りおよび使用ができます。

シークレットとは、暗号化された環境変数のことです。リポジトリに作成され、GitHub Actionsによってのみ使用されます。 GitHubは、公開鍵認証付き暗号およびPoly1305暗号化アルゴリズムを使用して、ウェブブラウザでシークレットを暗号化します。 詳しい情報については、「TweetNaCl.js」ドキュメンテーションを参照してください。 シークレットをアクションが使用できるようにするには、ワークフローファイルでシークレットを入力または環境変数に設定する必要があります。

GitHubは、ログに出力されたシークレットを自動的に削除しますが、シークレットをログに出力することは意識的に避けなくてはなりません。

シークレットの名前には、空白を含めることはできません。 GitHubがログのシークレットを確実に削除するよう、JSONやエンコードしたGitブロブなどの構造化データをシークレットの値として使用することは避けてください。

  1. GitHub で、リポジトリのメインページへ移動します。

  2. リポジトリ名の下で [Settings] をクリックします。

    リポジトリの設定ボタン

  3. 左サイドバーで [Secrets] をクリックします。

  4. [Name] 入力ボックスに、シークレットの名前を入力します。

  5. シークレットの値を入力します。

  6. [Add secret] をクリックします。

シークレットをアクションに渡すには、シークレットを、ワークフロー内の入力または環境変数として設定してください。 アクションに必要な入力および環境変数については、アクションのREADMEファイルを確認します。 詳しい情報については、「GitHub Actionsのワークフロー構文」を参照してください。

GITHUB_TOKENを除き、フォークしたリポジトリからワークフローがトリガーされた場合、シークレットは runner に渡されません。

steps:
  - name: Hello world action
    with: # Set the secret as an input
      super_secret: ${{ secrets.SuperSecret }}
    env: # Or as an environment variable
      super_secret: ${{ secrets.SuperSecret }}

GITHUB_TOKENシークレット

GitHub automatically creates a GITHUB_TOKEN secret to use in your workflow.

When you enable GitHub Actions, GitHub installs a GitHub App on your repository. The GITHUB_TOKEN secret is a GitHub App installation access token used to authenticate on behalf of the GitHub App installed on your repository. The token's permissions are limited to the repository that contains your workflow. For more information, see "Token permissions."

To use the GITHUB_TOKEN secret, you must add it to your workflow file. Using a token might include passing the token as an input to an action that requires it, or making authenticated GitHub API calls.

If you need a token that requires permissions that aren't available in the GITHUB_TOKEN, you can create a personal access token and set it as a secret in your repository:

  1. Use or create a token with the appropriate permissions for that repository. For more information, see "Creating a personal access token for the command line."
  2. Add the token as a secret in your workflow's repository, and refer to it using the ${{ secrets.SECRET_NAME }} syntax. For more information, see "Creating and using secrets (encrypted variables)."
トークンの権限

GitHub Appsが各権限でアクセできるAPIエンドポイントについては、GitHub 開発者ドキュメンテーションで「GitHub Appの権限」を参照してください。

権限 アクセスタイプ フォークしたリポジトリからのアクセス
チェック 読み取り/書き込み 読み取り
コンテンツ 読み取り/書き込み 読み取り
デプロイメント 読み取り/書き込み 読み取り
Issue 読み取り/書き込み 読み取り
メタデータ 読み取り 読み取り
packages

注記: DockerおよびRuby Gemパッケージは現在サポートされていません。
読み取り/書き込み 読み取り
プルリクエスト 読み取り/書き込み 読み取り
リポジトリプロジェクト 読み取り/書き込み 読み取り
ステータス 読み取り/書き込み 読み取り

シークレットの制限

ワークフローは、最大で100のシークレットを持つことができ、シークレット変数の名前はリポジトリごとに一意である必要があります。

シークレットの容量は最大64 KBです。 64 KBより大きなシークレットを使うには、暗号化されたシークレットをリポジトリ内に保存して、復号化パスフレーズをGitHubに保存します。 たとえば、GitHubのリポジトリにファイルをチェックインする前に、gpgを使って認証情報をローカルで暗号化します。 詳しい情報については、「gpg manpage」を参照してください。

警告: アクションを実行する際、シークレットは出力されないので注意してください。 この回避策を用いる場合、GitHubはログに出力されたシークレットを削除しません。

  1. ターミナルから以下のコマンドを実行して、gpgおよびAES256暗号アルゴリズムを使用してmy_secret.jsonファイルを暗号化します。

    $ gpg --symmetric --cipher-algo AES256 my_secret.json
  2. パスフレーズを入力するよう求められます。 このパスフレーズを覚えておいてください。GitHubで、このパスフレーズを値として用いる新しいシークレットを作成するために必要になります。

  3. パスフレーズを保存するための新しいシークレットをリポジトリ内に作成します。 たとえば、LARGE_SECRET_PASSPHRASEという名前で新しいシークレットを作成し、シークレットの値を上記のステップで選択したパスフレーズに設定します。

  4. 暗号化したファイルをリポジトリ内にコピーしてコミットします。 この例では、暗号化したファイルはmy_secret.json.gpgです。

  5. パスワードを復号化するシェルスクリプトを作成します。 このファイルをdecrypt_secret.shとして保存します。

    #!/bin/sh
    
    # Decrypt the file
    mkdir $HOME/secrets
    # --batch to prevent interactive command --yes to assume "yes" for questions
    gpg --quiet --batch --yes --decrypt --passphrase="$LARGE_SECRET_PASSPHRASE" \
    --output $HOME/secrets/my_secret.json my_secret.json.gpg
  6. リポジトリにチェックインする前に、シェルスクリプトが実行可能であることを確かめてください。

    $ chmod +x decrypt_secret.sh
    $ git add decrypt_secret.sh
    $ git commit -m "Add new decryption script"
    $ git push
  7. ワークフローから、stepを使用してシェルスクリプトを呼び出し、シークレットを復号化します。 ワークフローを実行している仮想環境にリポジトリのコピーを作成するには、actions/checkoutアクションを使用する必要があります。 リポジトリのルートを基準として、runコマンドを使用することで、シェルスクリプトを参照します。

    name: Workflows with large secrets
    
    on: push
    
    jobs:
      my-job:
        name: My Job
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v1
          - name: Decrypt large secret
            run: ./.github/scripts/decrypt_secret.sh
            env:
              LARGE_SECRET_PASSPHRASE: $
          # This command is just an example to show your secret being printed
          # Ensure you remove any print statements of your secrets. GitHub does
          # not hide secrets that use this workaround.
          - name: Test printing your secret (Remove this step in production)
            run: cat $HOME/secrets/my_secret.json

担当者にお尋ねください

探しているものが見つからなかったでしょうか?

弊社にお問い合わせください