LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

手順

1. Pipelinesの有効化

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

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

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

bitbucket-pipelines.yml
image: php:7.4-fpm

pipelines:
  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:8000
        services:
          - mysql

definitions:
  services:
    mysql:
      image: mysql:8.0
      environment:
        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
    <server name="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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0