GitHub Actionsで指定した時間にCIを実行する方法

スポンサーリンク
スポンサーリンク

概要

GitHub Actionsを利用して、指定した時間等、定期的に処理を実行する方法について説明します。

やりたいこと

私は、GitHub Actionsを利用して、CI/CDを実施しています。具体的には、指定した時間にサーバーにビルドしたファイルを配置するというようなことをしています。

これを実現する方法として、GitHub Actionsには、cronの形式で時間を指定できる機能があります。しかし、私の環境では、これだけでは不十分でした。

私は、Pull Requestによるマージを任意の時間にしたいと思っていました。mainブランチの変更を自動でサーバーに反映させているので、そのmainブランチへの変更をマージの時間を調整するという流れです。

方法

私が今回、GitHub Actionsのcron機能とMerge ScheduleというActionsを利用して実現しました。

https://github.com/marketplace/actions/merge-schedule

cronでは、1時間おきにMerge ScheduleのActionsを実行して、マージ可能なPull Requestについて、マージを実行します。

name: Merge Schedule

on:
  pull_request:
    types:
      - opened
      - edited
      - synchronize
  schedule:
    - cron: '0 * * * *'

jobs:
  merge_schedule:
    runs-on: ubuntu-latest
    steps:
      - uses: gr2m/merge-schedule-action@v2
        with:
          merge_method: squash
          require_statuses_success: 'true'
          automerge_fail_label: 'merge-schedule-failed'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

また、GitHub ActionsがPull Requestsの内容を編集できるように、リポジトリのSettingsから権限も付与しておきます。

これで設定は終わりです。

Merge Scheduleの使い方として、マージを行いたいPull Requestで次のようなコマンドを記入します。時刻の書き方はISO8601に沿った記述です。

/schedule 2023-06-16T09:00:00.000Z

これを書いておくことで、cronによってGitHub Actionsが実行された際に、現在時刻が/scheduleに書かれた時刻を過ぎていればマージが実行されます。

さいごに

今回は、cronの機能とMerge Schedule Actionsを利用して、指定した時間にPull Requestをマージするようにしました。

もしも、無料で実行できるGitHub Actionsの時間が厳しいという場合は、cronの実行時刻は4時間おきや8時間おきなどにするとよいです。

参考になればうれしいです。

タイトルとURLをコピーしました