soranoba
soranoba Author of soranoba.net
programming

PHP ExtensionsをCircleCIで使用する

CircleCIが提供しているPHPイメージに入っていないExtensionsを依存に含めた際に、どうすればいいのか調べても信頼性の低い情報ばかりだったので、やり方を残す。

このやり方はcomposerを使用し、composer.jsonrequireに依存を記述していることを前提としている。
独自にやる場合は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権限で実行している。

参考

(Updated: )

comments powered by Disqus