ツールチェーンのイベント通知を有効にする

Continuous Delivery 2027年2月12日をもって、以下の地域において提供が終了します: au-sydca-torus-east。 また、同日をもって、Code Risk Analyzerもすべての地域で提供を終了いたします。 あるリージョンでこれらの機能が実際に利用されていない場合、そのリージョンの機能は早期に提供が終了し、新しいインスタンスの受け入れが停止される可能性があります。 詳細はこちら

ツール IBM Cloud® Continuous Delivery チェーンの管理者として、ツールチェーンやツール統合におけるイベントの通知を、メール、SMS、Slack、 PagerDuty, その他のサポートされている配信チャネルを使用して、他のユーザーや人間宛先に送信したい場合があります。 また、たとえばWebhookなどを利用したイベント駆動型プログラミングを用いてロジックを構築するために、こうしたイベント通知を他のアプリケーションに送信することも考えられます。 このアプローチは、ツールチェーンと IBM Cloud® Event Notifications との連携によって実現されています。

Event Notificationsに情報を送信するには、ツールチェーンに Event Notifications ツール統合を追加 する必要があります。 Event Notificationsの操作について詳しくは、 Getting started with Event Notifications を参照してください。

を使用してイベント通知を配信できるようになりました。 Event NotificationsEvent Notifications は、Slack や、 PagerDuty, メール、SMS、プッシュ通知、ウェブフック、 Microsoft® Teams、 ServiceNow,、 IBM Cloud Functions などの通信チャネルに通知を配信するのに適した方法です。

ツールチェーンによるイベントの収集および送信の仕組み

関心のあるイベントがツールチェーンまたはサポートされているツール統合のいずれかで発生した場合、そのツールチェーンは、接続されている Event Notifications インスタンスと通信して、 サポートされている宛先 に通知を転送します。

ツールチェーンは、以下の 2 種類のイベントをサポートします。

  • 組み込みイベントは、ツールチェーン内で自動的に生成されます。 例えば、ツール統合がツールチェーンに追加またはツールチェーンから削除されたとき、パイプラインの実行が開始されたとき、およびパイプラインの実行が終了したときに、組み込みイベントが送信されます。 組み込みイベントのペイロードは、ツールチェーンによって決定されるデータで構成されます。
  • クライアント・カスタム・イベントは、 POST /toolchains/{toolchain_id}/events API を使用して、クライアントの要求に応じてツールチェーンによって生成されます。 クライアント・カスタム・イベントのペイロードは、ツールチェーンによって決定されたデータと、クライアントによって API に提供されたデータで構成されます。

Tektonパイプラインステップは、クライアント固有 のPOST {toolchain_id} /toolchains//events APIを活用し、ステップに関連する有益な情報を保持したカスタムイベントを宛 Event Notifications 先に送信できます。

Continuous Delivery のイベント

次の表に、ツールチェーンのイベントを一覧で示します。

各サブタイプに付加される :1 文字は、メジャー・バージョン番号を表します。

イベント通知を生成するアクション
イベント名 イベント・タイプ サブタイプ 説明
Client event com.ibm.cloud.toolchain.client event:1 このクライアント・カスタム・イベントは、クライアントが POST /toolchains/{toolchain_id}/events API を呼び出すと送信されます。
Tool created com.ibm.cloud.toolchain.toolchain toolchain_bind:1 この組み込みイベントは、ツール統合が作成されてツールチェーンに追加されたときに送信されます。
Tool deleted com.ibm.cloud.toolchain.toolchain toolchain_unbind:1 この組み込みイベントは、ツール統合が削除されてツールチェーンから削除されたときに送信されます。
Pipeline run started com.ibm.cloud.toolchain.pipeline pipeline_start:1 この組み込みイベントは、Tekton パイプライン実行またはクラシック・パイプライン・ステージのいずれかが開始されたときに送信されます。
Pipeline run succeeded com.ibm.cloud.toolchain.pipeline pipeline_success:1 この組み込みイベントは、Tekton パイプライン実行またはクラシック・パイプライン・ステージのいずれかが正常に完了したときに送信されます。
Pipeline run failed com.ibm.cloud.toolchain.pipeline pipeline_fail:1 この組み込みイベントは、Tekton パイプライン実行またはクラシック・パイプライン・ステージのいずれかが失敗状況で完了したときに送信されます。 例えば、このイベントは、デプロイメントが試行されたが正常に完了しなかった場合に送信されます。
Pipeline run cancelled com.ibm.cloud.toolchain.pipeline pipeline_cancel:1 この組み込みイベントは、Tekton パイプライン実行またはクラシック・パイプライン・ステージのいずれかがキャンセルされたときに送信されます。
Pipeline run error com.ibm.cloud.toolchain.pipeline pipeline_error:1 この組み込みイベントは、Tekton パイプライン実行でエラーが発生し、おそらく正常に完了しなかった場合に送信されます。 このイベントは、主にインフラストラクチャーおよび構成の問題 (誤った形式の Tekton によってパイプラインの実行が開始されない場合など) のために使用されます。

通知を有効にしています

ツールチェーンまたは関連するツール統合によって生成された組み込みイベントおよびクライアント・カスタム・イベントは、同じアカウントで使用可能な Event Notifications サービス・インスタンスに転送できます。

選択した Event Notifications サービスインスタンスに、ツールチェーンがこのサービスインスタンスにイベントを送信することを許可 するIAM認可ポリシー が設定されていることを確認してください。 サービス Event Notifications インスタンスでの承認付与に関する詳細については、 「インスタンス Event Notifications の統合が許可されないのはなぜですか?」 を参照してください。

コンソールから Event Notifications に接続する

ツールチェーンおよびツール統合インスタンスからクリティカル・イベントを送信するように Event Notifications を構成します。

  1. ツールチェーンをお持ちで、そこにこのツールの統合を追加する場合は、 IBM Cloud コンソールから、 メニュー アイコン( ハンバーガーアイコン ) > [Platform Automation ] > [Toolchains ] の順にクリックしてください。 「ツールチェーン」ページで、ツールチェーンをクリックしてその「概要」ページを開きます。

    a. **「ツールの追加」**をクリックします。

    b. 「ツール統合」セクションで**「Event Notifications」**をクリックします。

  2. ツールチェーン内の Event Notifications カードでこのツール統合に対して表示したい名前を入力します。 この名前は、ツールチェーン内でこのツール統合を識別するために使用されます。

  3. ツールチェーンを接続する Event Notifications インスタンスを選択します。

  4. [ 統合を作成 ] をクリックして、 Event Notifications ツールの統合をツールチェーンに追加します。

  5. ツールチェーンの「概要」ページにある「 IBM Cloud ツール 」カードで、「 Event Notifications 」をクリックします。

APIでEvent Notificationsに接続しています

API を使用して、 Event Notifications ツール統合をツールチェーンに追加できます。

  1. IAM ベアラー・トークンを取得します。 あるいは、SDK を使用している場合は、 IAM API キーを取得 し、環境変数を使用してクライアント・オプションを設定します。

    export CD_TOOLCHAIN_AUTH_TYPE=iam && \
    export CD_TOOLCHAIN_APIKEY={iam_api_key} && \
    export CD_TOOLCHAIN_URL={base_url}
    
  2. ツール統合の作成に使用する ツールチェーンの ID を検索 します。

  3. tool_type_id として eventnotifications を指定します。

  4. ツール統合に必要な以下の tool_parameters を指定します。

    • name: Event Notifications ツール統合を識別するために使用される名前。
    • instance-crn: Event Notifications サービス・インスタンスのクラウド・リソース名 (CRN)。
  5. 対象のツールチェーン内にツールの統合機能を追加する。

    curl -X POST --location --header "Authorization: Bearer {iam_token}" \
      --header "Accept: application/json" \
      --header "Content-Type: application/json" \
      --data '{ "name": "{tool_name}", "tool_type_id": "eventnotifications", "parameters": { "name": {event_notifications_tool_integration_name}, "instance-crn": {event_notifications_service_crn} } }' \
      "{base_url}/toolchains/{toolchain_id}/tools"
    
    const CdToolchainV2 = require('@ibm-cloud/continuous-delivery/cd-toolchain/v2');
    const toolchainService = CdToolchainV2.newInstance();
    ...
    (async() => {
       const toolParameters = {
          "name": {event_notifications_tool_integration_name},
          "instance-crn": {event_notifications_service_crn}
       }
       const toolPrototypeModel = {
          toolchainId: {toolchain_id},
          toolTypeId: "eventnotifications",
          name: {tool_name},
          parameters: toolParameters
       };
       const response = await toolchainService.createTool(toolPrototypeModel);
    })();
    
    import (
    	   "github.com/IBM/continuous-delivery-go-sdk/cdtoolchainv2"
    )
    ...
    toolchainClientOptions := &cdtoolchainv2.CdToolchainV2Options{}
    toolchainClient, err := cdtoolchainv2.NewCdToolchainV2UsingExternalConfig(toolchainClientOptions)
    toolParameters := map[string]interface{}{
       "name": {event_notifications_tool_integration_name},
       "instance-crn": {event_notifications_service_crn},
    }
    createToolOptions := toolchainClient.NewCreateToolOptions({toolchain_id}, "eventnotifications")
    createToolOptions.SetName({tool_name})
    createToolOptions.SetParameters(toolParameters)
    tool, response, err := toolchainClient.CreateTool(createToolOptions)
    
    from ibm_continuous_delivery.cd_toolchain_v2 import CdToolchainV2
    ...
    toolchain_service = CdToolchainV2.new_instance()
    tool_parameters = {}
    tool_parameters["name"] = {event_notifications_tool_integration_name}
    tool_parameters["instance-crn"] = {event_notifications_service_crn}
    tool = toolchain_service.create_tool(
       name = {tool_name},
       toolchain_id = {toolchain_id},
       tool_type_id = "eventnotifications",
       parameters = tool_parameters
    )
    
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.CdToolchain;
    import com.ibm.cloud.continuous_delivery.cd_toolchain.v2.model.*;
    ...
    CdToolchain toolchainService = CdToolchain.newInstance();
    HashMap<String, Object> toolParameters = new HashMap<>();
    toolParameters.put("name", {event_notifications_tool_integration_name});
    toolParameters.put("instance-crn", {event_notifications_service_crn});
    CreateToolOptions createToolOptions = new CreateToolOptions.Builder()
       .name({tool_name})
       .parameters(toolParameters)
       .toolchainId({toolchain_id})
       .toolTypeId("eventnotifications")
       .build();
    Response<ToolchainToolPost> response = toolchainService.createTool(createToolOptions).execute();
    ToolchainToolPost tool = response.getResult();
    

以下の表では、前のステップで使用された各変数をリストして説明します。

APIとのツール統合をプロビジョニングするための変数
変数 説明
{base_url} ツールチェーン API エンド URL ポイント サポートされている値の詳細については、 エンドポイントを参照 URL してください。
{iam_api_key} IAM API キー。
{iam_token} 有効なIAMベアラートークン。
{tool_name} ツール統合の名前です。
{event_notifications_tool_integration_name} Event Notifications サービスインスタンスの名前。
{event_notifications_service_crn} Event Notifications サービス・インスタンスのクラウド・リソース名 (CRN)。
{toolchain_id} ツール統合を作成するためのツールチェーン。

Terraform とのツール統合の追加

Terraform を使用して、 Event Notifications ツール統合をツールチェーンに追加できます。

IBM Cloud Terraform プロバイダーのバージョン 1.53.0 以降が必要です。これにより、Terraform を使用してツール統合を追加できます。

  1. Terraformのコマンドラインインターフェース(CLI)をインストールし、Terraform用の IBM Cloud プロバイダープラグインを設定するには、 Terraform の使い始め IBM Cloud® のチュートリアルに従ってください。

  2. main.tfという名前の Terraform 構成ファイルを作成します。 このファイルに、 HashiCorp 構成言語(HCL)を使用してリソースインスタンスを作成するための設定を追加してください。 この構成言語の使用について詳しくは、 Terraform の資料を参照してください。

    以下の例では、 ibm_cd_toolchain_tool_pipeline リソースを使用して Delivery Pipeline ツール統合を作成します。ここで、 toolchain_id は、ツール統合を作成するツールチェーンを表す GUID です。

    data "ibm_cd_toolchain" "cd_toolchain" {
      toolchain_id = {toolchain_id}
    }
    resource "ibm_cd_toolchain_tool_eventnotifications" "en_instance" {
      toolchain_id = data.ibm_cd_toolchain.cd_toolchain.id
      parameters {
        name = "{event_notifications_tool_integration_name}"
        instance_crn = "{event_notifications_service_crn}"
      }
    }
    

    ツール統合リソースについて詳しくは、 IBM Cloud Terraform レジストリーで、サポートされるツール統合リソースの完全なリストを参照してください。

  3. Terraform CLI を初期設定します。

    terraform init
    
  4. Terraform 実行プランを作成します。 このプランは、ツール統合を作成するために実行する必要があるアクションを要約します。

    terraform plan
    
  5. Terraformの実行プランを適用します。 Terraform は、ツール統合を作成するために必要なアクションを実行します。

    terraform apply
    

以下の表では、前のステップで使用された各変数をリストして説明します。

APIとのツール統合をプロビジョニングするための変数
変数 説明
{event_notifications_tool_integration_name} Event Notifications サービスインスタンスの名前。
{event_notifications_service_crn} Event Notifications サービス・インスタンスの CRN。
{toolchain_id} ツール統合を作成するためのツールチェーン。

選択した宛先に通知を配信しています

ツールチェーンのイベント通知を有効にした後、 Event Notifications で トピック宛先、および サブスクリプション を作成し、選択した宛先にアラートを転送して配信できるようにします。

サポートされる宛先の完全なリストについては、Event Notificationsドキュメントをご覧ください。

通知ペイロードの詳細

ツールチェーンとそれに関連するツール統合インスタンスによって生成されるイベントには、イベントのソースと詳細を識別するのに役立つさまざまなフィールドが含まれています。

POST {toolchain_id} /toolchains//events API は、リクエストが処理されたことを示すために 200 ステータスコードを返します。 これは必ずしも、イベントが対応する Event Notifications サービスインスタンスに正常に送信されたことを意味するわけではありません。

ツールチェーンおよびツール統合インスタンスからの組み込みイベント通知には、リソースの名前や ID などのメタデータ・プロパティーのみが含まれます。 APIキーやパスワードなどの機密データは、生成されるイベントには含まれません。

クライアント特注のイベント通知には、クライアントが POST {toolchain_id} /toolchains//events APIに提供したデータが含まれます。 API の呼び出しには、資格情報、個人識別情報、またはその他の機密情報を含めないでください。

Event Notifications に送信されるプロパティは、イベントの種類によって異なります。 例えば、 com.ibm.cloud.toolchain.pipeline:pipeline_start:1 イベントが発生した場合、ツールチェーンは、以下の例のような通知ペイロードを Event Notifications に送信します。

{
   "subject": {
      "name": "<user>",
      "email": "<user_email>",
      "iam_id": "<iam_id>"
   },
   "toolchain.instance": {
      "crn": "crn:v1:bluemix:public:toolchain:<region>:a/<account_id>:<toolchain_id>::",
      "href": "https://api.<region>.devops.cloud.ibm.com/toolchain/v2/toolchains/<toolchain_id>",
      "id": "357d4432-964a-46ae-83d4-df91eb539d1a",
      "name": "EventNotifications-toolchain",
      "resource_group_id": "<resource_group_id>",
      "ui_href": "https://cloud.ibm.com/devops/toolchains/<toolchain_id>?env_id=ibm:yp:us-south"
   },
   "toolchain.tool-instance": {
      "href": "https://api.<region>.devops.cloud.ibm.com/toolchain/v2/toolchains/<toolchain_id>/tools/<tool_id>",
      "id": "<tool_id>",
      "name": "ci-pipeline",
      "tool_type_id": "pipeline",
      "referent": {
         "ui_href": "https://cloud.ibm.com/devops/pipelines/<tool_id>?env_id=ibm:yp:us-south"
      }
   },
   "toolchain.pipeline-run": {
      "id": "<run_id>",
      "run_number": 11,
      "start_time": "2023-04-17T16:48:36.928Z",
      "ui_href": "https://cloud.ibm.com/devops/pipelines/<tool_id>/<stage_id>/<run_id>?env_id=<region_id>",
      "trigger": {
         "href": "https://api.<region>.devops.cloud.ibm.com/pipeline/v2/tekton_pipelines/<tool_id>/triggers/<trigger_id>",
         "id": "<trigger_id>",
         "name": "my-trigger",
         "type": "manual"
      }
   }
}

以下の表に、各イベント通知プロパティーに関する詳細情報を示します。

イベント通知ペイロードのプロパティ
プロパティー (Property) 説明
subject オプション。 イベントを開始したサブジェクトを表すオブジェクトです。 このオブジェクトには、以下のフィールドが含まれている可能性があります。

name: サブジェクトの名前。

email: 件名の E メール。

iam_id: 被験者の IAM ID。

toolchain.instance イベントの発生元であるツールチェーンを表すオブジェクト。 このオブジェクトには、以下のフィールドが含まれます。

crn: ツールチェーンの CRN。

id: ツールチェーンの ID。

resource_group_id の場合: ツールチェーンのリソース・グループの ID。

name: ツールチェーンの名前。

href は以下のとおりです。 ツールチェーン用のパブリック API エンドポイント。

ui_href: ツールチェーン用の UI エンドポイント。

toolchain.tool-instance オプション。 イベントに関与しているツールチェーン・インスタンスを表すオブジェクト。 このオブジェクトは存在し、ツールまたはツール統合に固有のイベントにのみ適用されます。 toolchain_bind サブタイプおよび toolchain_unbind サブタイプの場合、このオブジェクトは、バインドまたはアンバインドされるツール統合インスタンスです。 パイプライン・イベントの場合、このオブジェクトは、イベントが発生したパイプライン・ツール統合インスタンスです。 このオブジェクトには、以下のフィールドが含まれています。

id: ツール統合インスタンスの ID。

tool_type_id: ツール・タイプ.

href の ID: ツール統合インスタンス用のパブリック API エンドポイント。

state: ツール統合インスタンスの状態。

referent は以下を行います。 ツール統合インスタンスによって表されるツールに関する情報を格納するオブジェクト。 例えば、 ui_href と入力します。これは、ツール統合インスタンスによって表されるツール統合の UI エンドポイントです。

name: オプション。 ツール統合インスタンスの名前です。

toolchain.pipeline-run オプション。 イベントが発生した Tekton パイプライン実行またはクラシック・パイプライン・ステージ実行を表すオブジェクト。 このオブジェクトは存在し、パイプライン・イベントにのみ適用されます。以下のフィールドが含まれています。

id: Tekton パイプライン実行またはクラシック・パイプライン・ステージの ID。

ui_href Tekton パイプライン実行またはクラシック・パイプライン・ステージの UI エンドポイント。

run_number: オプション。 Tekton パイプライン実行またはクラシック・パイプライン・ステージの実行番号。

start_time: オプション。 実行が開始された時刻 (ISO 8601 形式)。

finish_time: オプション。 実行が終了した時刻 (ISO 8601 形式)。

duration: オプション。 実行の所要時間 (ISO 8601 形式)。

trigger: オプション。 Tekton パイプラインを実行したトリガーに関する情報を含むオブジェクト。 例えば、 name と入力します。これは、Tekton パイプライン・トリガーの名前です。

toolchain.external-event オプション。 POST /toolchains/{toolchain_id}/events API の呼び出しによって生成されたクライアント・カスタム・イベントの詳細を格納するオブジェクト。 このオブジェクトは存在し、クライアント特注イベントにのみ適用されます。 このオブジェクトには、以下のフィールドが含まれています。

id: POST /toolchains/{toolchain_id}/events API によって生成されたクライアント・カスタム・イベントの ID。

title POST /toolchains/{toolchain_id}/events API への要求ペイロード内の title フィールドの値。

description: POST /toolchains/{toolchain_id}/events API への要求ペイロード内の description フィールドの値。

data: オプション。 このフィールドの存在と値は、 POST /toolchains/{toolchain_id}/events API に送信される要求ペイロードによって異なります。 APIへのリクエストが content_typetext/plain を指定した場合、data フィールドには、文字列データを含むリクエストペイロードの data.text_plain.content フィールドの値が入ります。 APIへのリクエストが content_typeapplication/json を指定した場合、data フィールドにはリクエストペイロードの data.application_json.content フィールドの値が存在し、JSONデータを含みます。 JSONデータは最大深度5という制約があることに注意。 API に対する要求で content_type として none が指定されている場合、 data フィールドは省略されます。