github actions × Laravel × docker-composeでCI
CIを実行するに当たって既存のdocker-composeでPHPUnitを実行するようにしたのでメモ。
name: backend_CI on: push: branches: - main pull_request: branches: - main jobs: app-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # dockerコンテナを起動 - name: docker-compose up run: docker-compose up -d - name: Copy Environment File run: docker-compose exec -T app cp .env.example .env - name: Install Dependencies run: docker-compose exec -T app composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist - name: Generate key run: docker-compose exec -T app php artisan key:generate ## dbの起動を待機 - name: Wait DB run : docker-compose exec -T db bash -c "mysqladmin --wait --count 60 ping -proot || exit 1" ## マイグレーション - name: migration run: docker-compose exec -T app php artisan migrate --seed ## test実行 - name: Execute tests (Unit and Feature tests) via PHPUnit run: docker-compose exec -T app ./vendor/bin/phpunit
ポイントはDBの起動を待機するところで、これがないとDBの起動前に マイグレーションが実行されて下記のようにエラーが発生する事があるので要注意。
Failed to create mysql.mysql database, SQLSTATE[HY000] [2002] Connection refused
DBの起動待機時に実行している下記のコマンドとオプションを一つずつ解説すると
mysqladmin --wait --count 60 ping -proot || exit 1
-- wait
オプションは接続が確率できない場合にコマンドの実行を中止せずに待機してからリトライする
--count 60
繰り返しの回数
ping
サーバーが使用可能かどうかをチェック。
※リンク参照 dev.mysql.com