GitHub Actions ワークフローで個別ジョブのリランが可能に

| 2 min read
Author: masahiro-kondo masahiro-kondoの画像

先月、GitHub Actions でワークフロー内のジョブを個別にリランできる機能がリリースされました。

GitHub Actions: Re-run only failed or individual jobs | GitHub Changelog

以前の GitHub Actions ワークフローにおけるジョブ制御の記事で作ったサンプルのワークフローを利用して試してみました。

実行結果のジョブリストをマウスでホバーするとリランボタンが Re-run this job というポップアップと共に表示されます。

従来のリランボタンも、Re-run failed jobsRe-run all jobs を選択できるようになっています。

失敗している TestB のリランボタンをクリックすると TestB 及び依存している Notify のジョブが実行されることを伝えるダイアログが表示されます。

TestB は失敗するように作っているので、リランすると TestB はやはり失敗します。

この状態で実行されなかった Deploy を個別に実行すると依存している TestB の再実行から開始されます。従って、実際のリリースワークフローでもデプロイジョブの依存にテストジョブが入っていれば、テスト失敗した状態で誤ってデプロイされてしまうことはありません。

strategy matrix を使うとジョブの steps の定義は1個で、matrix に指定した条件により複数のジョブが起動されます。下記の例では、Node.js のバージョンやサイト名などが matrix の属性になっており、2つのジョブが実行されます。

name: Node.js CI
on: [workflow_dispatch]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- node-version: 10.x
site: "prod"
datacenter: "site-a"
- node-version: 12.x
site: "dev"
datacenter: "site-b"
steps:
- name: Echo site details
env:

SITE: ${{ matrix.site }}
DATACENTER: ${{ matrix.datacenter }}
run: echo $SITE $DATACENTER

この場合も、実行結果のジョブリストから特定の条件のジョブだけ個別に再実行できます。

個別リランが役立つのは、やはりリリース用のジョブの時でしょう。リランすれば成功することがわかっている場合[1]は、成功したジョブを含めて最初からやり直ししなくてもよいので時間を節約できます。


  1. プロダクトコードやテストコードが原因ではなく、確率的に発生するエラーや、ワークフローに設定したシークレットが誤っていたなど環境に起因するエラーと特定できている状況。 ↩︎

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 自然言語処理初心者が「GPT2-japanese」で遊んでみた (2022-07-08)
  2. Tauri でデスクトップアプリ開発を始める (2022-07-08)
  3. Deno による Slack プラットフォーム(オープンベータ) (2022-09-27)
  4. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  5. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  6. 第1回 OpenAPI Generator を使ったコード生成 (2022-06-04)
  7. 直感が理性に大反抗!「モンティ・ホール問題」 (2022-07-04)
  8. Rust によるデスクトップアプリケーションフレームワーク Tauri (2022-03-06)
  9. 箱ひげ図で外れ値を確認する (2022-05-18)
  10. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)