ローカルでテストはとおっていたけれどもCircleCI(1.0)でテストが通らない。
調べてみるとimagickのクラスが見つからないというエラーが出ている。
あ、CircleCIにもImageMagickをインストールしないといけないのか、じゃあインストールするか、と軽い気持ちでCircleCIをいじってたら思っていたよりハマってしまったので備忘録としてメモ。
imagickのインストール
テスト実行前に以下のコマンドを実行させます。
sudo apt-get update
sudo apt-get -y install imagemagick
yes | pecl install -f imagick
echo "extension = imagick.so" >> /opt/circleci/php/$(phpenv global)/etc/php.ini
imagemagickをインストール後、peclでimagickをインストールし、PHPで利用できるようにphp.iniを設定ファイルを追加します。
設定ファイル
最終的なcircle.ymlは以下のようになりました。
テスト実行前にimagickのセットアップを正しく行うことにより、
imagickに依存するテストも動作するようになります。
circle.yml
machine:
timezone: Asia/Tokyo
php:
version: 7.1.9
environment:
DB_HOST_TESTING: 127.0.0.1
DB_DATABASE_TESTING: circle_test
DB_USERNAME_TESTING: ubuntu
DB_PASSWORD_TESTING: ''
database:
override:
- php path/to/artisan migrate --env=testing --database=testing
- php path/to/artisan db:seed --env=testing --database=testing
dependencies:
cache_directories:
- path/to/.composer/cache
pre:
- composer config -g github-oauth.github.com $GITHUB_OAUTH_TOKEN
- echo "memory_limit = 2048M" > /opt/circleci/php/$(phpenv global)/etc/conf.d/memory.ini
override:
# ここから重要
- sudo apt-get update
- sudo apt-get -y install imagemagick
- yes | pecl install -f imagick
- echo "extension = imagick.so" >> /opt/circleci/php/$(phpenv global)/etc/php.ini
# ここまで重要
- composer install --dev --no-interaction --working-dir=path/to
- composer dump-autoload --optimize --working-dir=path/to
test:
override:
- path/to/vendor/bin/phpunit -c path/to/phpunit.xml
CircleCI(1.0)でimagickに依存するプログラムがあった場合参考になれば幸いです