カスタムRepositoryDispatchイベントを使用して、デプロイメント後にプランが失敗し始めたときなど、mablインサイトに基づいてカスタムGitHubワークフローをトリガーできます。各インサイトは1つのディスパッチイベントに対応します。インサイトを生成するmablの動作の完全なリストについては、インサイトに関する記事をご覧ください。
この記事では、mablインサイトに基づいてカスタムGitHubイベントを設定する方法について説明します。
統合を設定する
GitHubインテグレーションのセットアップの手順に従ってインテグレーションをインストールしてください。インテグレーションを設定する際は、mablインサイトのRepositoryDispatchイベントを作成するを必ず有効にしてください。
GitHubインテグレーションは、プライマリワークスペースでも設定する必要があります。プランがプライマリ以外のワークスペースで実行される場合、ディスパッチはGitHubにルーティングされません。
GitHubワークフローへのmablイベントの追加
以下の例のYAMLファイルを、mablのCI/CDインテグレーションで使用するGitHubリポジトリの .github/workflows/trigger-on-mabl-insight.yml にコピーしてください。
name: Process mabl insight
# This workflow is triggered on new mabl insights
on: [repository_dispatch]
jobs:
build:
name: Process mabl Insight
runs-on: ubuntu-latest
steps:
# Add you custom logic below this line - example below
- name: Print event type
run: echo 'event_type:${{ github.event.event_type }} name:${{ github.event_name }}' # Will be 'mabl_insight'
- name: Print Insight details
run: echo 'id:${{ github.event.client_payload.insight.id }} type:${{ github.event.client_payload.insight.insight_type }}'
- name: Print Insight payload as JSON
run: echo 'insight payload: ${{ toJson(github.event.client_payload.insight) }}'
テストの実行
mablがGitHubリポジトリにイベントをディスパッチするには、mablデプロイメントイベントにGitHubのコミットハッシュが含まれている必要があります。mablはコミットハッシュを使用して、ディスパッチ先のGitHubリポジトリを特定します。コミットハッシュがない場合、ディスパッチは実行されません。
デプロイメントイベントを作成する際にコミットハッシュを渡してください。
-
mabl CLI:
mabl deployments createコマンドに--revision {commit-sha}を含めてください。 -
Deployments API:リクエストボディに
revisionフィールドを含めてください。 -
run-mabl-tests GitHub Action:このActionは
github.shaを自動的に渡します。追加の設定は不要です。
mabl CLIを使用した例:
mabl deployments create \
--application-id {app-id} \
--environment-id {env-id} \
--revision {commit-sha}イベントペイロードの例
このリポジトリに対して実行されたmablテストに基づいてmablでインサイトが生成されると、前述のワークフローのコードがトリガーされます。mablインサイトは、github.event.client_payload.insightという名前のgithub コンテキスト変数としてワークフローに渡されます。
mablが送信するイベントタイプはmabl_insightのみです。mabl-test-run-completed、mabl-deployment-verification-completed、mabl-test-failureなどの他のタイプ名でワークフローをフィルタリングしている場合、mablがイベントをディスパッチしてもワークフローは一致しません。フィルターなしでon: [repository_dispatch]を使用するか、types: [mabl_insight]を使用してください。
インサイトのペイロードのサンプルを以下に示します。
{
"id": "jHn6br1LOm10MwEsPjURxQ-i",
"workspace_id": "nKqPRcj1Rrm8zqgb3KeTSQ-w",
"environment_id": "otnJ3IeoWm4zwmoVFz7ppA-e",
"application_id": "RePxEygYbhJdPbjgGqywPTw-a",
"run_policy_id": "yWud5dtC7OEPXp2akr6Dzg-p",
"plan_id": "yWud5dbAraEPPjSRkr6Dzg-p",
"created_time": 1579186926230,
"last_updated_time": 1579186927108,
"type": "occurrence_run_policy_execution_system_event",
"current_state": "occurrence",
"status": "info",
"category": "run_policy_execution_system_event",
"context": {
"triggering_resource_type": "user",
"triggering_resource_id": "dXAi-GwSvITmihOKLu5k0KQ",
"system_event": "run_policy_execution",
"trigger_type": "schedule"
},
"plan_run_id": "iG8I5bI8lpQm53yJRHA9JA-pr",
}