GitHub Actions のスケジュール実行方法

2023/02/12に公開

みんな大好き CI/CDツールのひとつである、 GitHub Actions のスケジュール実行方法を説明していきます。
ゴールとしては、以下のように GitHub の README.md に時刻を毎日9:00(UTC)に自動的に追加していきます。
今回はテストとしてREADMEの更新を行なっておりますが、実務では開発において定期的に実行したい作業を自動化します。

アジェンダ

  1. GitHub Actions とは
  2. 前提条件
  3. 設定方法
  4. ワークフローの実行

前提条件

  • Mac環境で実施
  • GitHubアカウントを作成済みであること
  • sshキーを作成済みであること

GitHub Actions とは

GitHubより引用

GitHub Actions は、ビルド、テスト、デプロイのパイプラインを自動化できる継続的インテグレーションと継続的デリバリー (CI/CD) のプラットフォームです。 リポジトリに対するすべての pull request をビルドしてテストしたり、マージされた pull request を運用環境にデプロイしたりするワークフローを作成できます。
GitHub Actions は、DevOps であるだけでなく、リポジトリで他のイベントが発生したときにワークフローを実行できます。 たとえば、リポジトリで新しい issue が作成されるたびに、適切なラベルを自動的に追加するワークフローを実行できます。
GitHub では、ワークフローを実行するための Linux、Windows、macOS 仮想マシンが提供されます。また、自身のデータセンターまたはクラウド インフラストラクチャで独自のセルフホスト ランナーをホストすることもできます。

公式からの引用の通り、GitHub Actionsを組んでおくことで、
本来ならローカルで開発したコードを手動でビルド、テスト、デプロイが必要なところ、
pushなどをトリガーにあらかじめ定義した処理を全て自動実行が可能となります。
また、テスト実行時にエラーとなった場合はそこで処理がストップとなるためデバッグがしやすいです。

設定方法

GitHub Actions の作成には、リポジトリの作成、ローカルへの複製.github/workflowsディレクトリの作成、実行ファイルとなるymlファイルの作成、が必要となります。
さらに今回はユーザー名やメールアドレスなど表示したくない情報をシークレットという機能で変数として格納します。

リポジトリの作成

まずはお試し用のtestリポジトリをご自身のアカウントに作成します。

アカウントにログイン後、Repositoriesをクリックし、Newをクリックします。

Repository nametestと入力し、Create repositoryをクリックして作成完了です。

リモートリポジトリ作成後にローカルリポジトリを作成するため、ターミナルを開き下記のコマンドを実行していきます。

echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:アカウント名/test.git
git push -u origin main

ローカルへの複製

ローカル環境に複製するためにgit cloneコマンドを実行します。

git clone git@github.com:アカウント名/test.git

以下のように表示されればクローン成功です。

Receiving objects: 100% (3/3), done.

.github/workflowsディレクトリの作成とYAMLファイルの作成

.github/workflows ディレクトリに github-actions-test.yml という名前のファイルを作成します。
cd testコマンドで testディレクトリに移動後、mkdir -p .github/workflowsコマンドで .github/workflowsディレクトリを作成し、
さらに .github/workflowsディレクトリに移動してからtouch github-actions-test.ymlコマンドでYAMLファイルを作成します。

ファイルを作成後、下記のコードをファイルに書き込んでいきます。

# name:ワークフローの名前 GitHub では、ワークフローの名前がリポジトリの [アクション] タブに表示される
name: GitHub Actions Test

# on:ワークフローを自動的にトリガーするに、on を使用してワークフローを実行する原因となるイベントを定義する
# on.schedule:ワークフローの時間スケジュールを定義可能 ワークフローを特定の UTC 時刻に実行するように、スケジュールする
# workflow_dispatch:ワークフローを手動でトリガーすることが可能
on:
  schedule:
    - cron: "0 9 * * *"
  workflow_dispatch:

# jobs:ワークフローを実行する一つ以上の構成のこと
# runs-on:各ジョブの実行環境を指定する
# steps:アクションを実行するための一連のステップ
# uses:ジョブで実行されるアクション(繰り返し使用するコード)を選択する
# run:コマンドを実行する
jobs:
  test: # ジョブ名
    runs-on: ubuntu-latest

    steps:
      - name: Checkout # ステップ名
        uses: actions/checkout@v3 # checkoutリポジトリを繰り返し実行
	
      - name: Commit # ステップ名
        run: |
          git config --global user.email ${{ secrets.USER_EMAIL }}
          git config --global user.name ${{ secrets.USER_NAME }}
          date >> README.md
          git add README.md
          git commit -m 'add time'
          git push origin main

これで毎日9:00(UTC)にREADME.mdに時刻を追加していく GitHub Actions を作成できました。

シークレットの作成

ユーザー名とメールアドレスに関しては表示させたくないので、USER_NAME,USER_EMAILという変数に格納します。

Nameの欄にUSER_NAME,USER_EMAILとそれぞれ入力し、Secret情報を入力して完了です。

ワークフローの実行

設定が完了したので、いよいよワークフローを実行します。

Actionsタブをクリックし、実行したいアクションを選択後、Run workflowをクリックします。

ワークフローを走らせると、以下のように実行されていきます。

全てのジョブが完了し、 README.md に実行した時刻が出力されていれば成功です!

おつかれさまでした!!

Discussion