Gitlab-CIにてLaravelをphpunitしてdeployするメモの話

今回はGitlabのパイプラインを通知するGitlab Webhookプロジェクトにてdeployするの自動でしようかなと思ったので作業しました。
その時のメモです。

stages:
  - test
  - deploy

unit-test-job:
  stage: test
  tags:
    - phpunit
  script:
    - composer install
    - php artisan key:generate --env=testing
    - vendor/bin/phpunit --log-junit report.xml
    - phpdbg -qrr vendor/bin/phpunit -c phpunit.xml --verbose --coverage-text
  cache:
    paths:
      - vendor/
  artifacts:
    reports:
      junit: report.xml
    when: always
  coverage: /\s+Lines:\s+(\d+\.\d+%)/

deploy-job:
  stage: deploy
  tags:
    - deploy
  script:
    - cp -rf * /var/www/html/webhook/gitlab/
    - cp -rf .env.product /var/www/html/webhook/gitlab/
    - cd /var/www/html/webhook/gitlab/
    - composer install
    - cp .env.product .env
    - php artisan key:generate
  only:
    refs:
      - release

実行順番

ざっくりいうと、stageがtest(phpunit)してOKならdeployしています

stages:
  - test
  - deploy

PHPUnit

PHPUnitを実行するgitlab-runnerを選ぶ

phpunit試験は、phpunitのtagを持つgitlab-runnerにて実行します

  tags:
    - phpunit

tagの付いたGitlab-runner (作り方はgitlab-runnerのレジストするときに指定します)

レジスト時の設定部分

Enter tags for the runner (comma-separated):
phpunit

PHPUnit試験レポート周り

phpunitのカバレージっとテストレポートは以下の指定をすればOKです

  artifacts:
    reports:
      junit: report.xml
    when: always
  coverage: /\s+Lines:\s+(\d+\.\d+%)/

指定するとパイプラインの詳細でカバレッジ率の情報が取れます。

確認はしませんが、ジョブの右のカバレッジ率はcoverage: だったはず

phpunitコマンドの–coverage-textにて以下のように出力されますので数値を取っています

 Summary:                
  Classes:  0.00% (0/1)  
  Methods: 75.00% (3/4)  
  Lines:   97.96% (48/49)

report.xmlはテストタブの情報だったはず!

PHPUnitのvendorキャッシュ

phpunit試験のcomposerのvendorはキャッシュして処理速度をあげます

  cache:
    paths:
      - vendor/

Deploy関連

ブランチ固定で実行する

deployはreleaseのみです。

  only:
    refs:
      - release

scriptの作成テクニック

一度潜って実際に作業してみてください。

root@ff705e4d933b:/home/gitlab-runner/builds/UsqdHqDX/0/mmpp/webhook_gitlab# 

UsqdHqDXは環境によりますが、/home/gitlab-runner/buildsに一度走らせるとcloneされますので手動で実行したものをscriptに書けばOKです

今回は超適当にcloneをコピーしています(cp -rf)

今回のリリース先は/var/www/html/webhook/gitlab/にlaravelのプロジェクトファイルを展開するとブラウザからアクセスできるようにしています。
なのでコピーとコンフィグだけで終了です

.gitディレクトリは愛嬌です

終いに

今回は超メモでした。