エラー時に実行するワークフロー

この記事では、ワークフロー編集画面上の設定項目「エラー時に実行するワークフロー」について紹介します。

【できるようになること】

  • エラー発生時に別のワークフローを起動
  • エラー発生時に同じワークフローを再実行

 エラーハンドリング

AUTOROでは、ワークフローにエラーが発生したことをトリガーにして、指定のワークフローを起動できます。

 

 エラー時に実行するワークフローの設定方法

下記手順にて、エラー時に実行するワークフローを指定します。

  • 「ワークフローの編集」をクリックします。
  • 「エラー時に実行するワークフロー」をクリックし、起動するワークフローを選択します。
    一覧からの選択の他、ワークフロー名を直接入力して絞り込みも可能です。

  • 「エラー時のワークフロー最大実行回数」を設定します。
  • 「更新」をクリックします。

 エラーの詳細情報を起動先ワークフローで取得する

本機能で実行されたワークフローでは、呼び出し元のワークフローのエラー詳細情報を取得できます。

この情報を利用して、エラー発生のワークフローの名前やIDなどを取得し、SlackやChatworkに送信することが可能になります。

この方法については、以下の記事をご参照ください。

起動先ワークフローにて${error}を呼び出すと、以下のようにエラー全体が取得できます。

{
  "workflow": {
    "name": "some workflow", // エラーが発生したワークフローの名前
    "id": 123, // エラーが発生したワークフローのID
  },
  "message": "Error: something went wrong.", // エラーメッセージ
  "task_name": "+open_browser_1", // エラーが発生したタスクの名前
  "session_time": "2020-01-14T12:09:00+09:00", // エラーが発生したセッションの開始時刻
  "session_queue_id": 111, // エラーが発生したセッションのID
  "session_url":   "https://console.autoro.io/projects/1/workflows/XX/attempts/456", // セッション詳細(ログ)画面のURL
}

各内容は、以下のように記述すると文字列として出力できます。

${error.workflow.name}
   →エラーが発生したワークフローの名前
${error.workflow.id}
   →エラーが発生したワークフローの名前
${error.message}
   →エラーが発生したワークフローの名前
${error.task_name}
   →エラーが発生したワークフローの名前
${error.session_time}
   →エラーが発生したワークフローの名前
${error.session_queue_id}
   →エラーが発生したセッションのID
${error.session_url}
   →セッション詳細(ログ)画面のURL

 エラー発生時に同じワークフローを再実行する

エラー発生時に別のワークフローを実行する以外に、同じワークフローを再実行させることも可能です。

今回は、サンプルとして、以下のワークフローを作成する方法を紹介します。

  • 実行エラーが発生したら自分自身を再実行し、最大実行回数に達してもエラーになる場合は、別のワークフローを実行する

  • ワークフローを新規作成します。
    ワークフロー名は、「ワークフローA」としています。
  • ワークフローを編集」をクリックします。
  • 「エラー時に実行するワークフロー」に、「ワークフローA」を設定します。
  • 「エラー時のワークフロー最大実行回数」に、「2」を設定します。
  • 更新」をクリックします。

KillAttemptアクション(強制終了)を実行すると、ワークフローはエラーとなり強制終了します。
今回は、KillAttemptアクションを使って必ずエラー終了となるワークフローを作成します。

また、エラー内容によって処理を分岐させるため、Tryアクション(エラーを捕捉する)を組み合わせます。
ワークフロー全体をTryアクションの内部に配置すると、いずれかのアクションでエラーが発生した場合、そのエラー内容を取得しつつ、Tryアクションの次のアクションへ処理を進めることができます。

  • Tryアクションを設置します
  • 「エラーを格納する変数名」に、 error を設定します
  • Tryアクションの内部に、KillAttemptアクションを設置します

「2」の設定により、エラー発生時に変数 ${error} にエラー情報が記録されます。(エラーが発生しなかった場合、${error} は空)

Ifアクション(真のとき)で、条件に ${error} を設定することで、エラー発生時の条件分岐が可能です。

  • Tryアクションの下に、Ifアクションを設置します。
  • 「条件」に、 ${error} を設定します。

変数 ${ERROR_HANDLING_COUNT} を利用することで、何度目の再実行なのかを取得できます。

「1」で設定した最大実行回数に達した場合は、AddToQueueアクション(ワークフローを実行する)で別ワークフローを実行します。

  • Ifアクションの内部に、2つ目のIfアクションを設置します。
  • 「条件」に、 ${ERROR_HANDLING_COUNT == 2} を設定します。
  • 2つ目のIfアクションの内部に、AddToQueueアクションを設置します。
  • 「実行するワークフローのID」に、別のワークフローを設定します。
    (今回は、ワークフロー「エラー通知」を指定しています)

最後に共通の処理として、自身をエラー終了させるためのKillAttemptアクションを設置します。
最大実行回数に達していない場合は自分自身を再実行しますが、最大実行回数に達している場合はエラーが発生しても再実行されずに終了となります。

  • KillAttemptアクションを設置します。

# エラーを捕捉する
+try_1:
  try>:
    display_name>: 'エラーを捕捉する'
    errorObjectName: error
    private: false
  meta:
    action:
      disabled: false
  _do:

    # 強制終了
    +kill_attempt_1:
      action>: KillAttempt
      display_name>: '強制終了'
      message: 'ワークフロー内でエラー発生'
      private: false
      meta:
        action:
          disabled: false

# 真のとき
+if_1:
  if>:
    display_name>: '真のとき'
    condition: ${error}
    private: false
  meta:
    action:
      disabled: false
  _do:

    # 真のとき
    +if_3:
      if>:
        display_name>: '真のとき'
        condition: ${ERROR_HANDLING_COUNT == 2}
        private: false
      meta:
        action:
          disabled: false
      _do:

        # ワークフローを実行する
        +add_to_queue_2:
          action>: AddToQueue
          display_name>: 'ワークフローを実行する'
          workflow_id: ''
          private: false
          meta:
            display:
            action:
              disabled: false

# 強制終了
+kill_attempt_5:
  action>: KillAttempt
  display_name>: '強制終了'
  message: '本ワークフローをエラー終了'
  private: false
  meta:
    action:
      disabled: false
<エラー時に実行するワークフロー>エラー時に実行するワークフロー

このページは役に立ちましたか?

CONTENTS