0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · レッスン

リポジトリ間ワークフロー

異なるリポジトリ間でワークフローを連携させ、依存関係を管理して複雑なデプロイをオーケストレーションする方法を学びます。

「リポジトリ間ワークフロー」はCoddyKit上の無料CI/CD with GitHub Actions & DevOps Pipelinesレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCI/CD with GitHub Actions & DevOps Pipelines学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。

クロスリポジトリワークフロー入門

現代のソフトウェア開発では、アプリケーションが複数のリポジトリに分散した複数のコンポーネントで構成されることがよくあります。マイクロサービス、共有ライブラリ、個別のデプロイ構成などがその例です。

これらの異なるリポジトリ間でワークフローをオーケストレーションすると、モジュール性が高まり、関心の分離を実現できます。このレッスンでは、GitHub Actions でこれを実現する方法を学びます。

クロスリポジトリオーケストレーションの理由

従来、GitHub Actions のワークフローは1つのリポジトリに限定されます。しかし、次のような要件がある場合はどうでしょうか。

  • あるリポジトリでアーティファクトをビルドし、別のリポジトリでデプロイを起動したい。
  • 共有構成リポジトリから、複数のサービスリポジトリの更新を起動したい。
  • 中央リポジトリで管理するセキュリティポリシーを、他のすべてのリポジトリに適用したい。

クロスリポジトリワークフローは、このような複雑なシナリオに対応します。

リポジトリの接続: `repository_dispatch`

GitHub Actions には、repository_dispatch という特別なイベントタイプがあります。これは GitHub リポジトリ向けのカスタム Webhook のように機能します。

  • 1つのワークフロー(「送信側」)が GitHub に API リクエストを送信します。
  • 別のリポジトリにある別のワークフロー(「受信側」)が、この特定のイベントを待ち受けます。

これにより、異なるリポジトリ間でプログラムからワークフローを起動できます。

受信側ワークフローの設定

repository_dispatch イベントを受信するには、対象リポジトリのワークフローで、そのイベントを待ち受けるように設定する必要があります。これは on: キーワードを使って設定します。

repo-B のワークフローは、次のようになります。

name: Receive Dispatch Event

on:
  repository_dispatch:
    types: [my-custom-event]

jobs:
  process-event:
    runs-on: ubuntu-latest
    steps:
      - name: Log event payload
        run: |
          echo "Event type: ${{ github.event.action }}"
          echo "Payload: ${{ toJSON(github.event.client_payload) }}"

受信側の構成を理解する

前の例では、次のように設定されています。

  • on: repository_dispatch: は、このイベントを待ち受けるよう GitHub に指示します。
  • types: [my-custom-event] は、ディスパッチされたイベントのタイプが my-custom-event の場合にのみ、このワークフローを実行するよう指定します。複数のタイプを定義できます。
  • github.event.action には、イベントタイプ(例: my-custom-event)が格納されます。
  • github.event.client_payload には、ディスパッチとともに送信されたカスタムデータが格納されます。

イベントのトリガー:別のリポジトリから送信する

repository_dispatchイベントをトリガーするには、GitHub APIにHTTP POSTリクエストを送信する必要があります。これは、別のGitHub Actionsワークフローまたはスクリプト内から、curlやGitHub CLI(gh cli)を使って実行できます。

主な要件:

  • 対象リポジトリの所有者と名前。
  • 受信側のワークフローが待ち受けているイベントtype。
  • 任意のカスタムデータを格納するclient_payload。
  • repoスコープを持つGitHub Personal Access Token(PAT)。

例:`gh cli`でディスパッチする

ここでは、repo-Aからrepo-Bへイベントをディスパッチするワークフローを示します。トークンにシークレットを使用し、client_payloadを渡している点に注目してください。

name: Trigger Deploy Workflow

on:
  push:
    branches: [main]

jobs:
  dispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install GitHub CLI
        run: sudo apt-get update && sudo apt-get install gh -y

      - name: Dispatch event to repo-B
        env:
          GH_TOKEN: ${{ secrets.CROSS_REPO_PAT }}
        run: |
          gh api \
            --method POST \
            -H "Accept: application/vnd.github.v3+json" \
            /repos/YOUR_ORG/repo-B/dispatches \
            -f event_type='my-custom-event' \
            -f client_payload='{"ref":"${{ github.ref }}", "sha":"${{ github.sha }}"}'

リポジトリ間アクセスのセキュリティ保護

ワークフローにデフォルトで提供されるGITHUB_TOKENは、そのワークフローが実行されているリポジトリでの使用に制限されています。*別の*リポジトリでイベントをトリガーするには、より広い権限を持つトークンが必要です。

  • Personal Access Token(PAT)をrepoスコープ付きで使用します。
  • このPATを、トリガー元のリポジトリにリポジトリシークレット(例:CROSS_REPO_PAT)として保存します。
  • PATをワークフローファイルに直接ハードコードしないでください。

`client_payload`でカスタムデータを渡す

client_payloadは、イベントのディスパッチ時に含められるJSONオブジェクトです。トリガー元のワークフローから受信側のワークフローへコンテキストやデータを渡すうえで重要です。

渡すことのできるデータの例:

  • ビルドをトリガーしたコミットSHAまたはブランチ名。
  • 環境の対象(例:「staging」、「production」)。
  • デプロイするアーティファクトのバージョン番号。

覚えておいてください:client_payloadはワークフローのログに表示されるため、機密情報は含めないでください。

リポジトリ間ワークフローの理解度チェック

異なるGitHubリポジトリ間でワークフローを連携する方法を学びました。主要な構成要素について理解できているか確認してみましょう。

まとめ:リポジトリ間の連携

repository_dispatchを使用したリポジトリ間ワークフローの実装を無事に学習しました。

  • 目的:複数のリポジトリにまたがる依存関係を管理し、複雑なデプロイを連携させるためです。
  • 方法:「送信側」ワークフローがGitHub APIを呼び出し、別のリポジトリにある「受信側」ワークフローをトリガーします。
  • 重要な点:repository_dispatchイベントのタイプと、受信側ワークフローで一致するtypesです。
  • データ:client_payloadを使用して、ワークフロー間で機密性のない情報を渡します。
  • セキュリティ:リポジトリ間アクセスには、必ずrepoスコープ付きのPATをシークレットとして保存して使用します。

この強力な機能により、柔軟性が高く疎結合なCI/CDパイプラインを実現できます。

よくある質問

「リポジトリ間ワークフロー」レッスンは無料ですか?

はい。「リポジトリ間ワークフロー」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CI/CD with GitHub Actions & DevOps Pipelinesコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CI/CD with GitHub Actions & DevOps Pipelinesコースには全4レッスンが含まれています。

「リポジトリ間ワークフロー」で何を学びますか?

異なるリポジトリ間でワークフローを連携させ、依存関係を管理して複雑なデプロイをオーケストレーションする方法を学びます。 ブラウザで直接実行するハンズオンコードでCI/CD with GitHub Actions & DevOps Pipelinesを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

CI/CD with GitHub Actions & DevOps Pipelinesを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCI/CD with GitHub Actions & DevOps Pipelinesは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「リポジトリ間ワークフロー」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCI/CD with GitHub Actions & DevOps Pipelinesレッスンでコードを書いて実行できますか?

はい。すべてのCI/CD with GitHub Actions & DevOps Pipelinesレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. モノレポの CI/CD
  2. リポジトリ間ワークフロー
  3. ワークフローの一元管理
  4. パスフィルタリングと選択的ビルド
← CI/CD with GitHub Actions & DevOps Pipelinesに戻る