GitHub Actionsに魅了されてしまいました
こんにちは!インフラエンジニアのずやです!
今まで僕は、「CIといえばCircleCI」というような人間でした。
(単純にCIrlcelCIしか利用してこなかっただけです。井の中の蛙です。)
ですが、つい最近GitHub Actionsを使い始めまして、
はい、
とっても気に入ってしまいました^^
特に、任意のタイミングでCIワークフローを実行できる「workflow_dispatch」という機能には心を鷲掴みされました
(CircleCIにはこんなステキ機能なかったよーーー)
ということで今回は、GitHub Actionsとその一機能である「workflow_dispatch」について簡単に紹介したいと思います!
GitHub Actionsについて
https://docs.github.com/ja/actions
GitHub Actionsは2018年に発表、2019年にGAとなった比較的新しいCIサービスです。
CircleCIと同様にリポジトリに設定ファイルを配置することで、CIの動作を定義できます。
GitHubが提供しているだけあって、GitHubとの連携はピカイチです。
設定ファイルをリポジトリにpushするだけですぐに使い始められますし、同じGitHubの画面から「Actions」のタブを介してすぐにアクセスできます。
また料金も魅力的で、パブリックリポジトリであれば無料なため、お手軽に利用することができます。
(プライベートリポジトリでも無料利用枠があります → 参考)
サンプルコード
実際に設定ファイルの簡単な例を紹介します。
設定ファイルはリポジトリ内の .github/workflows/
ディレクトリ下にyamlファイルとして配置します。
(ファイル名は任意です)
下記は、Rubyのプロジェクトでdevelopブランチへのpush時にテストを実行するワークフローの例です。
# ワークフローの名前
name: ruby-test
# ワークフローのトリガー
on:
push:
branches: [ develop ] # developブランチにpushされたときにワークフロー実行
# ワークフローで実行されるジョブの定義
jobs:
test:
runs-on: ubuntu-latest # 最新のUbuntu環境でjobを実行
steps:
- uses: actions/checkout@v2 # リポジトリのチェックアウト
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.6 # Rubyのバージョン2.6の環境をセットアップ
- name: Install dependencies
run: bundle install # Gemのインストール
- name: Run tests
run: bundle exec rspec # rspecによるテストを実行
トリガーの定義
on
で、ワークフローのトリガーを定義します。
on:
push:
branches: [ develop ]
push
の他に、プルリクエストに関する pull_request
やlabelの追加・変更・削除の label
、後述する workflow_dispatch
など多種多様のイベントを設定することができます。
詳細はこちらをご覧ください。
ジョブの定義
jobs
で、ワークフローにおいて実行する処理を定義します。
複数のjobを並列または直列に実行させることも可能です。
runs-on
で、jobを実行する仮想マシンの種類を設定します。
利用できる仮想マシンの種類はこちら。
runs-on: ubuntu-latest
steps
で、jobで実行するタスクを定義していきます。
uses
によって、アクションと呼ばれる定義済みのタスクを実行することができます。
アクションは公開されているものを利用したり、自分で作成したりすることが可能です。
steps:
- uses: actions/checkout@v2
また、run
によって、任意のコマンドやスクリプトを実行させることもできます。
steps:
- name: Install dependencies
run: bundle install
設定ファイルでは他にも多くの設定可能な項目があります。
詳細は公式のリファレンスを参照してください。
workflow_dispatch
workflow_dispatch
はワークフローのトリガーの一種で、ワークフローを任意に手動で起動することができます。
主な特徴は以下の通りです。
- ブラウザ(GitHubのリポジトリのページ)から操作できる
- ワークフローを実行するブランチを指定できる
- 実行時にパラメータを渡すことができる
- REST API からでも利用できる
用途
開発プロセスの自動化がCIの肝ではありますが、任意のタイミングでCIを実行するといことが刺さるユースケースも多々あると思います。
例えば、クラウド上(AWS等)の開発環境へのデプロイです。
本番環境であれば main ブランチへの push をトリガーにデプロイのジョブを実行すればよいと思います。一方、開発環境は任意の feature ブランチを任意のタイミングでデプロイできると便利だと思います。
workflow_dispatch
はワークフロー実行時にブランチを選択できるため、好きなブランチを好きなタイミングでデプロイするということが容易に実現できます。
また、ワークフロー自体のデバッグの用途としても利用できると思います。
schedule
トリガー(cron)のワークフローのjobの動作確認をするために、わざわざ設定した時間になるのを待って確認するのは手間ですよね。そういう場合に、workflow_dispatch
トリガーも設定することで、任意にワークフローを走らせることが可能です。
サンプルコード
こちらも簡単に設定ファイルの例を紹介します。
name: workflow-dispatch-test
on:
workflow_dispatch:
inputs:
hoge:
description: "実行時にパラメータを渡すことができます"
require: true
default: "fuga"
jobs:
hello:
runs-on: ubuntu-latest # 最新のUbuntu環境でjobを実行
steps:
- name: Echo input value
run: echo "${{ github.event.inputs.hoge }}"
on
で workflow_dispatch
を指定します。
さらに、 inputs
以下でワークフロー実行時に渡せるパラメータを定義できます。
workflow_dispatch:
inputs:
hoge:
description: "実行時にパラメータを渡すことができます"
require: true
default: "fuga"
パラメータは jobs 内で ${{ github.event.inputs.<名前> }}
の形式で参照することができます。
echo "${{ github.event.inputs.hoge }}"
設定ファイルをリポジトリのデフォルトブランチに含めることで、GitHubのリポジトリ画面の「Actionsタブ」→「対象のworkflow」の画面に「Run workflow」というボタンが追加されます。
ボタンをクリックすると、ブランチと設定ファイルで定義したパラメータを入力できます。
さらに「Run workflow」ボタンをクリックするとワークフローが実行されます。
おわりに
GitHub Action 興味もっていただけたでしょうか。
僕自身まだ入門したばかりなのでこれからドシドシ使い倒して、また知見を発信していきたいと思います!