search
LoginSignup
1

More than 3 years have passed since last update.

posted at

updated at

CircleCIでPHPの拡張モジュールをインストールする際にDirectory nonexistentエラーが発生する

この記事はCircleCI2.0環境でPHPの拡張機能をインストールする際、エラーでビルドが停止してしまう現象を何とか回避する手順です。

  • 2018/11/19 原因が判明したため解決方法を追記しました

現象

CircleCIの設定ファイルであるconfig.ymlを全くさわっていないにもかかわらず、直前まで通っていたビルドが一切通らなくなってしまいました。

エラーは以下のような内容が出力されます。

$ sudo docker-php-ext-install pdo_mysql

・・・

/usr/local/bin/docker-php-ext-enable: 108: /usr/local/bin/docker-php-ext-enable: cannot create /conf.d/docker-php-ext-pdo_mysql.ini: Directory nonexistent

原因はまだ分かっておらず、根本的な解決にはなりませんがとりあえずの解決策として以下の対応を実行します。

どうやらdocker-libraryのphpモジュールが修正された際、sudoでは一部環境変数が引き継がれずディレクトリパスが見つからなくなっていたようです。

対応(追記)

原因が判明して問題の解決方法がわかったので、イメージの固定ではなく環境変数の引き継ぎで対応します。

環境変数を引き継ぐために sudo コマンドに -E オプションを追加して実行するだけです。

$ sudo -E docker-php-ext-install pdo_mysql

これでイメージを固定しなくてもよくなり、すっきりビルドが通るようになりました。

仮対応

原因が判明して問題が解決した今、こちらの対応は一時しのぎですが一応残しておきます。

最後に成功したビルドのイメージIDを探す

まずCircleCIのビルドログを確認します。
確認するのは一番最初の Spin up Environment の実行ログです。
実行ログの最後の方にsha256のハッシュが記載されているので、これをメモします。

Status: Downloaded newer image for circleci/php:7.1-apache-jessie-node-browsers
  using image 
circleci/php@sha256:{hash}

インストールするイメージを固定する

config.ymlに先ほど取得したハッシュを使用して、インストール時に使用されるイメージを固定します。

version: 2
jobs:
  build:
    docker:
      - image: circleci/php:7.1-apache-jessie-node-browsers@sha256:{先ほど取得したハッシュ値}

これで再度ビルドを通すと無事最後まで完走しました。

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
What you can do with signing up
1