Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

この記事は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:{先ほど取得したハッシュ値}

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away