PHP
ImageMagick
CircleCI
Imagick

CircleCI1.0でphp-imagickをインストールしようとしてハマった話

More than 1 year has passed since last update.

ローカルでテストはとおっていたけれども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に依存するプログラムがあった場合参考になれば幸いです:smiley:


参考

PHP 7, Imagemagick and CircleCI