概要
GitHub Actionsを使って、ビルドやテスト、デプロイを自動化する方法を簡単にまとめてみました。
GitHub Actionsとは
GitHub Actionsは、コードのビルドやテスト、デプロイを自動化するためのCI/CDプラットフォームです。.github/workflows
ディレクトリに配置したYAMLファイルに従って、特定のイベント(push
やpull_request
など)が発生すると自動的にワークフローが実行されます。
YAMLファイルの基本
GitHub Actionsでワークフローを設定する際に必要なYAMLファイルについて、基本的な要素を解説します。
主な要素
- name:ワークフローの名前を指定します。
- on:どのイベントが発生した時にワークフローを実行するかを指定します。
- jobs:実行するタスクの単位を設定します。
- runs-on:ワークフローを実行する環境(OS)を指定します。
- steps:ジョブ内で実行する各処理を定義します。
- uses:GitHubやサードパーティが提供するアクションを利用します。
- run:シェルコマンドを直接実行します。
イベントの指定(on)
どのイベントが発生したらワークフローを実行するかを指定します。以下は、main
ブランチにpush
された際にワークフローを実行する設定例です。
on:
push:
branches:
- main
設定できるイベントの例:
イベント名 | 説明 |
---|---|
push | push時に実行 |
pull_request | pull request作成時 |
fork | fork時に実行 |
schedule | 定期的に実行 |
workflow_dispatch | 手動で実行 |
workflow_run | 他のワークフロー完了時 |
ジョブの定義(jobs)
ジョブとは、ワークフロー内で実行するタスクの単位です。以下は、ジョブを定義する基本の書き方です。
jobs:
jobid:
name: jobname
runs-on: ubuntu-latest
steps: ...
実行環境の設定(runs-on)
ジョブを実行する環境(OS)を指定します。たとえば、Ubuntuを使う場合は以下のように記述します。
runs-on: ubuntu-latest
ステップの定義(steps)
ジョブ内で実行する個々の処理を定義します。複数のステップを順番に実行することでワークフローを構成します。
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
- run: node --version
ステップの定義(steps)
ジョブ内で実行する個々の処理を定義します。複数のステップを順番に実行することでワークフローを構成します。
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
- run: node --version
他のアクションの利用(uses)
uses
を使うことで、GitHubやサードパーティが提供しているアクションを簡単に利用できます。以下は、Node.jsをセットアップするアクションの例です。
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
コマンドの実行(run)
run
を使うと、指定したコマンドを実行できます。以下の例では、Node.jsのバージョンを確認するコマンドを実行します。
- run: node --version
サンプルワークフロー(RubyのCI)
実際にRubyプロジェクトのテストとリンターを実行するためのCI設定の例です。実行環境に近い環境を用意し、データベースのセットアップからテスト実行まで行っています。
name: Run rspec & rubocop
on:
push:
jobs:
ci:
runs-on: ubuntu-latest
timeout-minutes: 10
services:
postgres:
image: postgres
ports:
- 5432:5432
env:
RAILS_ENV: test
POSTGRES_PASSWORD: password
POSTGRES_USER: postgres
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: npm
- run: node --version
- name: yarn install
run: |
npm install yarn
yarn install
- name: Bundler and gem install
run: |
gem install bundler
bundle install --jobs 4 --retry 3 --path vendor/bundle
- name: Database create and migrate
run: |
cp config/database.yml.ci config/database.yml
bundle exec rails db:create RAILS_ENV=test
bundle exec rails db:migrate RAILS_ENV=test
- name: Run rspec
run: bundle exec rspec
- name: Run rubocop
run: bundle exec rubocop
このサンプルでは、コードのチェックアウト、RubyとNode.jsのセットアップ、データベースのセットアップ、テストの実行まで一連の流れを定義しています。
まとめ
GitHub ActionsのYAMLファイルでは、どのイベントで実行するか、どの環境で実行するか、どのタスクを実行するかを詳細に設定できます。まずは基本の設定から始めて、プロジェクトに合わせて拡張していきましょう。
コメント