GitHub Actionsで実行中のworkflowを自動的にキャンセルする
私の周りのプロジェクトでは、最近Circle CIのテスト実行や自動デプロイをGithub Actionsに置き換える動きが盛んになっています。
しかし、どんどんと置き換えて、ワークフローを際限なく動かしていたら、気がつかない間に結構な費用負担になっていました。。。Github Actionsのドキュメントを見ると、時間単位で課金されるようだったので、新しいワークフローが実行された時、古いワークフローは自動キャンセルされるようにしてみました。
以下のように2回連続でworkflowを動くと、古い方は自動的にキャンセルされます。
Circle CI等他のCIサービスではデフォルトでキャンセルされるようになっていますが、Github Actionsはまだその機能はデフォルトではありません(2020/6/16時点)ので、自動キャンセル専用のアクション(workflow-run-cleanup-action)を追加します。
設定方法
.github/workflows/***.yml
にworkflow-run-cleanup-action
を追加します。
on: push: [] jobs: cleanup-runs: runs-on: ubuntu-latest steps: - uses: rokroskar/workflow-run-cleanup-action@master env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" ... other-jobs: 〜〜〜
今のところ ubunut-latest
のみサポートされているようなので、今後 windows-latest
, macos-latest
といった他の環境もサポートもされると良いなぁと思っています。(そっちの方がお高いので。。)
補足
コミットに[skip ci]をつけて、workflowのジョブ自体動かないようにすると、よりworkflowの実行時間を削減できそうです。 2021/2/8に公式で[skip ci]がサポートされました。
gh-build-cancellerというのもあるらしい
別のアクションでgh-build-cancelerというのもあるようなのですが、今のところスター数が少ないので、私は workflow-run-cleanup-action
の方を使うようにしています。今後こっちの方が人気が出てきたり、機能拡張の状況がよかったりしたら乗り換えるかもしれません。
GH actions stale run canceller · Actions · GitHub Marketplace · GitHub