- Published on
CircleCI Orb を使って不安定なテスト(Flaky Tests)を Slack 通知する方法
- Authors
 - Name
- Tadashi Nemoto
- @tadashi-nemoto
 
 

この記事では、CircleCI Orb を使って不安定なテスト(Flaky Tests)を Slack 通知する方法について紹介します。
- Test Insights ダッシュボードから不安定なテスト(Flaky Tests)を確認する方法
- flaky-tests-notify Orb について
- 1) CircleCI Token と Slack Token を作成する
- 2) CircleCI 設定ファイルを作成する
- 3) Scheduled Pipeline(パイプラインのスケジュール実行) を設定する
Test Insights ダッシュボードから不安定なテスト(Flaky Tests)を確認する方法
2021 年に CircleCI は Test Insights ダッシュボードをリリースしました。
このダッシュボードでは Flaky Tests を検出することができ、これらのテストを素早く直すことによって開発スピードを高く保つことができます。

詳細については以下のブログ・ドキュメントを参考にしてください。
flaky-tests-notify Orb について
通常は、この Test Insights ダッシュボードを定期的に確認して Flaky Tests を見つけることになります。
今回これらの Flaky Tests をより早く発見・修正するために、Slack 通知を簡単に実装できる CircleCI Orb(設定ファイルのパッケージ)を作成しました。
1) CircleCI Token と Slack Token を作成する
この Orb を使うには、CircleCI Token と Slack Token が必要になります。
この Orb は Slack Orb をベースに作られているため、以下のドキュメントを参考に Slack Token を作成してください。
CircleCI Token は Flaky Tests を API 経由で取得するために利用します。
次のステップに進む前に、以下の環境変数が CircleCI に入っていることを確認してください。
- CIRCLE_TOKEN
- SLACK_ACCESS_TOKEN
- SLACK_DEFAULT_CHANNEL(どの channel にメッセージを送るか)

2) CircleCI 設定ファイルを作成する
この Orb は Certified Orb ではないため、お使いの Organization が Uncertified Orb を許可しているか確認してください。

次に、CircleCI の設定ファイル(.circleci/config.yml)を記述します。
version: '2.1'
orbs:
  flaky-tests-notify: tadashi/flaky-tests-notify@1.0.0
parameters:
  notify_flaky_tests:
    type: boolean
    default: false
workflows:
  notify_flaky_tests:
    jobs:
      - flaky-tests-notify/notify
    when: << pipeline.parameters.notify_flaky_tests >>
この notify_flaky_tests ワークフローは when の部分で記述されていますが、外部から notify_flaky_tests パラメーター(true)が渡されていないと起動されません。
次の Scheduled Pipeline(パイプラインのスケジュール実行) の設定でこのパラメーターを渡します。
3) Scheduled Pipeline(パイプラインのスケジュール実行) を設定する
先ほど作成したワークフローを定期実行させるために、Scheduled Pipeline(パイプラインのスケジュール実行) を設定します。
notify_flaky_tests パラメーターを追加することによって、この Scheduled Pipeline の実行時のみ notify_flaky_tests ワークフローが実行されるようにします。

Scheduled Pipelines が正しく設定されていれば、指定した定期実行のタイミングでワークフローが動いているのが確認できるかと思います。

不安定なテストがある場合には下記のような Slack メッセージが送信されます。
