GitLab で Laravel の CI、ただしテストだけ

はじめに

gitlab-ci で自動テストを組む機会があったので、忘れないように残しておく

CI なんだけどデプロイは対応していない。テストだけ

環境

  • MacOS (13.1)
  • Docker Desktop (4.12.0)
  • Laravel9

前提

  • GitLab のアカウントはあらかじめ用意していること
  • 空のプロジェクトを作ってローカルにクローンしていること
  • GitLab CI を実施するには以下のいずれかを実施が必要になる

手順

Laravel9 のプロジェクトを作ってコミットする

sail で Laravel9 のプロジェクトを作成する

コンテナを起動する

ブラウザで http://localhost を開いて Laravel の初期画面を確認する

確認したらコンテナは一旦止める

プロジェクトの中身を全部 GitLab のプロジェクトフォルダに移動して、コミットして、プッシュする

ブランチを作る

ここでブランチを作って、以降はそちらで作業する

ユニットテストを組む

自動テストを試すために、DB接続も行う簡単なテストを用意する

まず、database/seeders/DatabaseSeeder.php を開いてコメントアウトされているコードをアンコメントする

次に、DBからユーザデータを取得して内容をチェックする簡単なテストを tests/Feature/ExampleTest.php に追加する

ローカルでテストを試す前に、テスト実施の都度にテストDBを作成するように DatabaseMigrations トレイトを、データ投入も行うように protected $seed = true; を tests/TestCase.php に追加する

最後にコンテナを起動してユニットテストを実施する

こんな結果になるはず

試しに 'Test User' を書き換えてからテストすると失敗するので、テストが正常に動作していることもわかると思う

ここまでの内容をコミットしておく

.env.testing を作成する

テスト用の環境設定ファイル .env.testing を作る

まず、.env.example をコピーして .env.testing を作る

次に下記のコマンドで APP_KEY を生成する

あとは .env.testing を開いて、APP_ENV=testing とDBまわりの環境変数を設定する

.gitlab-ci.yml を用意する

プロジェクトルートに .gitlab-ci.yml ファイルを作成する

.gitlab-ci.yml に CI の定義だの指示だのを書くわけで、何を書くのかは リファレンス を読んでね、と言われても最初はわからないので テンプレート がたくさん用意されている

Laravel も用意されているけれど上手く動かなかったので、PHP のやつをコピペして使う

https://gitlab.com/gitlab-org/gitlab-foss/-/blob/master/lib/gitlab/ci/templates/PHP.gitlab-ci.yml

いくつか修正する

まず、なぜが pdo_pgsql をインストールするようになっているのを pdo_mysql に変更する

それと、node.js が必要なので、これもインストールするスクリプトを追加する

次に、DBまわりの設定を修正や追加をする

最後にテストスクリプトを書き換える

CI を実施する

ここまでの変更をコミットして、さらにプッシュもする

GitLab のコンソールからマージリクエストを作成する

.gitlab-ci.yml が存在するとパイプラインが開始されて自動でユニットテストが始まる

左の青いグラフのボタンを押して

test を押すと、パイプラインのログを見れるので、テストが実施状況を確認できる

成功したら Job Succeed と出る

おわりに

ひとまずテストは動かせた。最初の取っ掛かりにはなるんじゃないかと思う

カバレッジチェックとかしていないので、そのうちやっておきたい