Quantcast
Channel: PHP7.4タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 113

Bitbucket Pipelines (CI) で PHP7.4・Laravel 7・MySQL 8.0環境のテスト実行

$
0
0

手順

1. Pipelinesの有効化

Bitbucketの画面左のナビゲーションバーのPipelinesをクリックして、画面下のボタンを押してbitbucket-pipelines.ymlファイルをコミットする。
デフォルトの内容でさっそくパイプラインが動くがどうせ失敗するのでストップをクリックして止める。
この操作はリポジトリに対してadmin権限がないとできないので、持っていない場合は管理者等に言って権限をつけてもらう。

2. bitbucket-pipelines.ymlの内容を修正

コミットされたbitbucket-pipelines.ymlを以下のように修正する。

bitbucket-pipelines.yml
image:php:7.4-fpmpipelines:default:-step:script:-apt-get update && apt-get install -qy git curl libmcrypt-dev mariadb-client unzip-yes | pecl install mcrypt-1.0.3-docker-php-ext-install pdo_mysql-curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer-composer install-ln -f -s .env.pipelines .env-php artisan migrate-php artisan serve &-sleep 5-./vendor/bin/phpunit-curl -vk http://localhost:8000services:-mysqldefinitions:services:mysql:image:mysql:8.0environment:MYSQL_DATABASE:'test_db'MYSQL_RANDOM_ROOT_PASSWORD:'yes'MYSQL_USER:'homestead'MYSQL_PASSWORD:'secret'

注意点
PHPUnitは、テストを実行するときの環境変数をphpunit.xmlで上書きできる。
次の手順の.env.pipelinesで環境変数を定義してもphpunit.xmlで上書きされてしまうので、mysqlの環境変数はphpunit.xmlの値に優先して合わせる必要がある。
例えばphpunit.xmlに以下のような記載がある場合はテスト実行時にDB名はtest_dbでアクセスする。.env.pipelinesでDB_DATABASEにいくら他の値を定義してもtest_dbでアクセスする。

phpunit.xml
<servername="DB_DATABASE"value="test_db"/>

3. .env.pipelinesファイルを作成

ローカルで使ってる .envをコピーして .env.pipelinesを作成し、以下の環境変数を更新する。
scriptを見て分かる通りこのファイルで定義されている環境変数でテストを実行することになる。

env.pipelines
DB_HOST=127.0.0.1
DB_USERNAME=homestead
DB_PASSWORD=secret

bitbucket-pipelines.yml.env.pipelinesをCommitしてPushすればテストが実行され、Pipelinesの画面でログが見れる。

上記手順に至るまでにやったこと

公式Bitbucket SupportのLaravel with Bitbucket Pipelinesに書いてある通りにやってみるもエラーが出て出来ず。
1個ずつエラーを解消していった結果、以下の変更が必要だった。

  • phpのバージョンを7.4に変更
  • mysql-clientmariadb-clientに変更
  • mcrypt-1.0.2mcrypt-1.0.3に変更
  • unzipのinstallを追加

エラー解消のデバッグ方法

ローカルで bitbucket-pipelines.ymlを修正してPushしてPipelinesで実行ログを見て、、、を繰り返してデバッグしても良いが時間がかかってしまうので、ローカルで docker run --rm -it -v $PWD:/var/www/html php:7.4-fpm bashのようにしてコンテナに入り、scriptの内容を順番に実行していってエラーになったら調べて新たなコマンドを入力して、、、という方法が早い。

CI/CDの辛いところ

このように時が経つとエラーが発生してしまうようになり、実行できなくなることがある。
実際、デプロイをCI/CDで実行しているシステムがあってしばらく改修の必要もなく1年くらいデプロイしてなかったが、プログラム改修することになり、簡単な修正だったので1日もかからずに修正が終わっていざデプロイしようとしたら、CIがコケてデプロイできないという事象に遭遇。結局それを解消するのにすごく時間がかかってしまった。。。
定期的にデプロイできるかどうかを確認してメンテしていくことが必要。

記事投稿日:2020/9/29


Viewing all articles
Browse latest Browse all 113

Trending Articles