Skip to main content

複合アクションを作成する

このガイドでは、複合アクションを構築する方法について学びます。

Platform navigation

Note

GitHub ホステッド ランナーは、現在 GitHub Enterprise Server ではサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。

はじめに

このガイドでは、パッケージ化された複合アクションを作成して使用するために必要な基本コンポーネントについて説明します。 アクションのパッケージ化に必要なコンポーネントのガイドに焦点を当てるため、アクションのコードの機能は最小限に留めます。 アクションは「Hello World」と「Goodbye」を出力するか、カスタムの名前を指定すると「Hello [who-to-greet]」と「Goodbye」を出力します。 このアクションでは、乱数も random-number 出力変数にマップされて、goodbye.sh という名前のスクリプトが実行されます。

このプロジェクトを完了すれば、独自の複合アクションを作成し、それをワークフローでテストする方法を理解できます。

Warning

ワークフローとアクションを作成するときは、攻撃者によってコードが信頼されていない入力を実行する可能性があるかどうかを常に考慮する必要があります。 攻撃者が悪意あるコンテンツを挿入してくるかもしれないので、特定のコンテキストは信頼できない入力として扱うべきです。 詳しくは、「GitHub Actions のセキュリティ強化」を参照してください。

複合アクションと再利用可能なワークフロー

複合アクションを使用すると、一連のワークフロー ジョブ ステップを 1 つのアクションに収集し、複数のワークフローで 1 つのジョブ ステップとして実行できます。 再利用可能なワークフローは、他のワークフロー内から完全なワークフローを実行できるようにすることで、重複を回避する別の方法を提供します。 詳しくは、「重複の回避」を参照してください。

前提条件

始める前に、GitHub にリポジトリを作成します。

  1. GitHub に新しいパブリック リポジトリを作成します。 任意のリポジトリ名を選択することも、次の hello-world-composite-action の例を使用することもできます。 これらのファイルは、プロジェクトを GitHub Enterprise Serverにプッシュした後で追加できます。 詳しくは、「新しいリポジトリの作成」を参照してください。

  2. リポジトリをお手元のコンピューターにクローンします。 詳しくは、「リポジトリをクローンする」を参照してください。

  3. ターミナルから、ディレクトリを新しいリポジトリに変更します。

    Shell
    cd hello-world-composite-action
    
  4. hello-world-composite-action リポジトリで、goodbye.sh という名前の新しいファイルを次のコード例で作成します。

    Shell
    echo "echo Goodbye" > goodbye.sh
    
  5. ターミナルから、goodbye.sh 実行可能ファイルを作成します。

    Shell
    chmod +x goodbye.sh
    
Shell
chmod +x goodbye.sh
Shell
git add --chmod=+x -- goodbye.sh
  1. ターミナルから、goodbye.sh ファイルをチェックインします。

    Shell
    git add goodbye.sh
    git commit -m "Add goodbye script"
    git push
    
Shell
git add goodbye.sh
git commit -m "Add goodbye script"
git push
Shell
git commit -m "Add goodbye script"
git push

アクションのメタデータファイルの作成

  1. hello-world-composite-action リポジトリで、action.yml という名前の新しいファイルを作成し、次のコード例を追加します。 この構文について詳しくは、「GitHub Actions のメタデータ構文」をご覧ください。

    YAML
    name: 'Hello World'
    description: 'Greet someone'
    inputs:
      who-to-greet:  # id of input
        description: 'Who to greet'
        required: true
        default: 'World'
    outputs:
      random-number:
        description: "Random number"
        value: ${{ steps.random-number-generator.outputs.random-number }}
    runs:
      using: "composite"
      steps:
        - name: Set Greeting
          run: echo "Hello $INPUT_WHO_TO_GREET."
          shell: bash
          env:
            INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }}
    
        - name: Random Number Generator
          id: random-number-generator
          run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
          shell: bash
    
        - name: Set GitHub Path
          run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH
          shell: bash
          env:
            GITHUB_ACTION_PATH: ${{ github.action_path }}
    
        - name: Run goodbye.sh
          run: goodbye.sh
          shell: bash
    
    

    このファイルでは、who-to-greet 入力を定義し、ランダムに生成された数値を random-number 出力変数にマップし、アクションのパスをランナーのシステム パスに追加し (実行中に goodbye.sh スクリプトを見つけるため)、goodbye.sh スクリプトを実行します。

    出力の管理について詳しくは、「GitHub Actions のメタデータ構文」をご覧ください。

    github.action_path の使い方について詳しくは、「ワークフロー実行に関するコンテキスト情報へのアクセス」をご覧ください。

  2. ターミナルから、action.yml ファイルをチェックインします。

    Shell
    git add action.yml
    git commit -m "Add action"
    git push
    
  3. ターミナルから、タグを追加します。 この例では、v1 という名前のタグを使用します。 詳しくは、「カスタム アクションについて」を参照してください。

    Shell
    git tag -a -m "Description of this release" v1
    git push --follow-tags
    

ワークフローでアクションをテストする

次のワークフロー コードでは、「複合アクションを作成する」で完成した hello world アクションを使います。

ワークフロー コードを別のリポジトリの .github/workflows/main.yml ファイルにコピーしますが、actionsSHA をリポジトリ オーナーとコミットに使用したい SHA にそれぞれ置き換えます。 who-to-greet 入力を自分の名前に置き換えることもできます。

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v4
      - id: foo
        uses: OWNER/hello-world-composite-action@SHA
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}

リポジトリから [アクション] タブをクリックして、最新のワークフロー実行を選択します。 出力には、「Hello Mona the Octocat」、"Goodbye"スクリプトの結果、および乱数が含まれているはずです。

GitHub

での複合アクションの例

複合アクションの例は、GitHub に多数あります。