はじめに
GitHub Actionsというものについて使用イメージを備忘記録で記載しました。
使用目的
以下のような使用目的になります。
Github Actionsはテスト、デプロイを自動化するツール。
何かをトリガーで自動で動かすこと。
テスト自体は言語によるもの(node.jsならjest、laravelならduskとか)で作成する。
使用方法
GitHub Actionsを使用してテストを自動化することが可能です。
GitHub Actionsは、リポジトリ内のコード変更に応じてワークフローを自動的に実行するCI/CD(継続的インテグレーションおよび継続的デリバリー)ツールです。この機能を利用することで、コードのプッシュやプルリクエストが行われた際に自動的にテストを実行し、その結果を確認することができます。
GitHub Actionsでテストを自動化する基本的な手順は以下の通りです:
-
ワークフローファイルの作成: リポジトリのルートに
.github/workflows
ディレクトリを作成し、その中にワークフロー定義ファイル(通常はYAML形式)を作成します。 -
トリガーの設定: ワークフローをトリガーするイベント(例えば、
push
、pull_request
)を指定します。 -
ジョブの定義: ワークフロー内で実行する一連のステップを定義します。これには、依存関係のインストール、テストスクリプトの実行などが含まれます。
-
実行環境の選択: テストを実行する環境(Ubuntu、Windows、MacOSなど)を選択します。
-
テストコマンドの実行: 実際のテストコマンド(例えば、
npm test
またはpython -m unittest
)を実行するステップを定義します。 -
結果の確認: テストの実行後、結果を確認し、必要に応じてアクションを取ります(例えば、テストが失敗した場合に通知を送るなど)。
GitHub Actionsを使うことで、開発プロセスをより効率的かつ信頼性高く進めることができ、品質の維持に役立ちます。
コード例
コード例1
GitHub Actionsを使用して、簡単なNode.jsプロジェクトの自動テストの例をご紹介します。この例では、プロジェクトがGitHubにプッシュされるたびに、ユニットテストを自動的に実行します。
前提条件
- Node.jsプロジェクトがGitHubリポジトリにあること。
- テストスクリプトが
package.json
に定義されていること(通常はnpm test
で実行されます)。
ステップ1: ワークフローファイルの作成
- GitHubリポジトリのルートに
.github/workflows
ディレクトリを作成します。 - そのディレクトリ内に新しいYAMLファイル(例えば
nodejs.yml
)を作成します。
ステップ2: ワークフロー定義
以下はnodejs.yml
の基本的な内容です。このワークフローは、main
ブランチにプッシュされるたびにトリガーされ、最新のNode.js環境でテストを実行します。
name: Node.js CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm test
説明
-
name
: ワークフローの名前。 -
on
: ワークフローをトリガーするイベント。ここではmain
ブランチへのpush
とpull_request
イベント。 -
jobs
: 実行するジョブ。ここではbuild
という名前のジョブ。 -
runs-on
: ジョブが実行される仮想環境。この例ではubuntu-latest
。 -
strategy
: テストを実行するNode.jsのバージョンを指定。 -
steps
: 実行するステップ。コードのチェックアウト、Node.jsのセットアップ、依存関係のインストール、テストの実行。
このファイルをリポジトリにコミットし、main
ブランチにプッシュすると、GitHub Actionsが自動的にテストを実行します。テストの結果はGitHubのActionsタブで確認できます。
コード例2
LaravelプロジェクトでGitHub Actionsを利用してDuskテストを自動化するための基本的なワークフローの例になります。
name: Laravel CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.0'
extensions: mbstring, xml, ctype, json, bcmath, mysql
- name: Install Composer dependencies
run: composer install --prefer-dist --no-progress --no-suggest
- name: Generate application key
run: php artisan key:generate
- name: Run Laravel Dusk tests
run: php artisan dusk
この例では、LaravelプロジェクトのCIプロセスを設定しています。ここでは、PHPのセットアップ、Composer依存関係のインストール、アプリケーションキーの生成、そして最終的にLaravel Duskテストの実行が含まれます。このワークフローは、main
ブランチに対するプッシュまたはプルリクエスト時にトリガーされます。
コード例3
gitへのpushではなくスケジュールに基づきテスト例です。
GitHub Actionsでは、スケジュールに基づいたトリガーを設定することが可能です。以下にそのための基本的なワークフローの例を示します:
name: Scheduled CI
on:
schedule:
# 毎日午前3時(UTC)に実行
- cron: '0 3 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# 以下にビルドやテストを実行するためのステップを追加
- name: Run tests
run: ./run-tests.sh
この例では、cron
スケジュール式を使って毎日特定の時間にビルドを実行するように設定しています。このようにして、リポジトリへのプッシュやプルリクエスト以外のトリガーでCIワークフローを自動実行することができます。
デプロイメント例
以下は、GitHub Actionsを使用してデプロイメントを行う基本的なワークフローの例です。この例では、ビルドとテストが成功した後に、特定の環境へのデプロイを実行します。
name: Build and Deploy
on:
push:
branches: [ main ]
jobs:
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build
run: make build
- name: Test
run: make test
deploy:
needs: build-and-test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to Production
run: ./deploy-prod.sh
env:
ENV_VAR: ${{ secrets.ENV_VAR }}
このワークフローでは、main
ブランチへのプッシュ時にビルドとテストが行われ、それらが成功するとdeploy
ジョブが実行されます。deploy
ジョブでは、デプロイメントスクリプト(この例ではdeploy-prod.sh
)が実行されます。また、環境変数やシークレットを使って、必要な設定を行うことができます。
参考記事