PHP ExtensionsをCircleCIで使用する
CircleCIが提供しているPHPイメージに入っていないExtensionsを依存に含めた際に、どうすればいいのか調べても信頼性の低い情報ばかりだったので、やり方を残す。
このやり方はcomposer
を使用し、composer.json
のrequire
に依存を記述していることを前提としている。
独自にやる場合はdocker-php-ext-install
を実行すればよい。
steps:
- checkout
- run:
name: Install GD required dependencies
command: sudo apt install -y libpng-dev
- run:
name: Install missing PHP Extensions
command: |
set +o pipefail
composer check-platform-reqs --no-ansi | grep missing | awk '{print $1}' | sed 's|^ext-||' | \
xargs -I@ sh -c 'sudo -E docker-php-ext-install @'
set -o pipefail
- restore_cache:
keys:
- v1-dependencies-{{ checksum "composer.json" }}
- v1-dependencies-
- run: composer install
- save_cache:
paths:
- ./vendor
key: v1-dependencies-{{ checksum "composer.json" }}
まず、Extensionによっては依存がある場合があるので、それを予めインストールする。ext-gd
にはlibpng-dev
が必要なので、上記はそれをインストールしている。
次に、docker-php-ext-install
はインストール済みのExtensionに対して実行すると再インストールを試みて失敗したりするので、追加インストールに絞る為にcomposer check-platform-reqs
を使用する。このコマンドはmissing
が存在する場合にエラーコードを返すのでpipefail
を最後のコマンド以外のエラーを無視している。
また、docker-php-ext-install
を単に実行するとディレクトリ周りのエラーが出る為、sudo
権限で実行している。
参考
記事が気に入ったらチップを送ることができます!
You can give me a cup of coffee :)
Kyash ID: soranoba
Amazon: Wish List
GitHub Sponsor: github.com/sponsors/soranoba
PayPal.Me: paypal.me/soranoba
(Updated: )