リポジトリ間ワークフロー
異なるリポジトリ間でワークフローを連携させ、依存関係を管理して複雑なデプロイをオーケストレーションする方法を学びます。
「リポジトリ間ワークフロー」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- モノレポの CI/CD
- リポジトリ間ワークフロー
- ワークフローの一元管理
- パスフィルタリングと選択的ビルド