LaravelプロジェクトをGitHub ActionsでCI・CDする記事があまりなかったので、記事にしてみました。
環境
- windows10
- Laravel 8.x
- PHP 8.x
- node v14.17.4
- npm 6.14.14
- VsCode
- gitbash 2.32.0.1
動作イメージ
リポジトリにymlファイルを含むプロジェクトをpushする
↓
ymlファイルに記述したgithub actionsが作動(ビルドとテストがデプロイの条件になっている)
設定手順
ymlファイルのひな型を作成する
GitHubにLaravelのリモートリポジトリを作成して、ActionsタブからLaravelのワークフローテンプレートの[Set up this workflow]を押す
/.github/workflows配下にワークフローのyamlファイルが作られます
ymlファイルを編集する
最終的なymlファイルは以下の通りです。ポイントは、servicesでmysqlのdockerコンテナを起動している箇所くらいです。初見だとわかりにくいものはコメントに説明を記載しています
laravelのビルドjobが完了したらテストを実行し、その後xserverへデプロイするという手順です。
- FTP_SERVER:ftpサーバのホスト
- FTP_USERNAME:ftpサーバのアカウント名
- FTP_PASSWORD:ftpサーバのパスワード
name: Laravel
on:
push:
branches: [ main ]
# 各ジョブは仮想環境の新しいインスタンスで実行されるので環境変数等は独立
jobs:
laravel-build:
runs-on: ubuntu-latest
# ubuntu上でLaravelコンテナを起動して各ステップを実行(ubuntu等のランナーマシン上で直接jobを実行する方法もある)
container:
image: php:8.0-fpm
volumes:
- /__w/docker-laravel-phpunit-githubaction/docker-laravel-phpunit-githubaction:/var/www
services:
# このサービスコンテナ名で通信可能
db-dl:
image: mysql:latest
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: sample_db
# dbサービスコンテナのTCPのポート: Dockerホストのポート(デフォルト3306をサービスコンテナのポートに指定する場合はports自体なくても可)
ports:
- 3306:3310
# ヘルスチェックをして問題なければ、stepsに進む
options: >-
--health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
# Githubが公開するアクション actions/checkoutを利用すれば、ソースコードをチェックアウトできる
- uses: actions/checkout@v2
- name: Print php version
run: |
php -v
- name: SetUp linux package
run: |
apt update && apt install -y git
apt install -y zlib1g-dev mariadb-client vim libzip-dev
docker-php-ext-install zip pdo_mysql
# TODO: ハッシュ値の箇所は今後修正...
- name: SetUp composer
run: |
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
mv composer.phar /usr/local/bin/composer
- name: SetUp laravel project
run: |
composer install
cp ../.env.example .env
php artisan key:generate
php artisan migrate
# working-directoryはrunを実行するディレクトリ(cdしなくて済む)
working-directory: ./my-app
- name: Run test
run: vendor/bin/phpunit tests
working-directory: ./my-app
FTP-Deploy-Action:
# buildのjobが完了してから開始する
needs: laravel-build
name: FTP-Deploy-Action
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: FTP-Deploy-Action
uses: SamKirkland/FTP-Deploy-Action@2.0.0
env:
FTP_SERVER: ${{ secrets.FTP_HOST_NAME }}
FTP_USERNAME: ${{ secrets.FTP_USER_NAME }}
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
LOCAL_DIR: ./my-app
REMOTE_DIR: /yourdomain
laravel.ymlをcommitすると、ワークフローが実行され、一覧に表示される
まとめ
いかがでしたでしょうか。本記事では、GitHub ActionsでLaravelプロジェクトのCI・CD環境を構築する手順について紹介しています。技術スタックごとにひな型となるymlファイルが用意されており、簡単な編集のみでプロジェクトごとの設定を準備できるためおすすめです。