Расширения PHP для кэширования, установленные с Pecl на CircleCI - PullRequest
0 голосов
/ 22 мая 2018

Мы используем CircleCI в качестве сервера сборки для приложения php symfony, и нам требуется библиотека mongodb с composer, которая зависит от расширения mongodb, которую мы устанавливаем с помощью pecl.Итак, у нас есть следующие шаги в нашей сборке:

- run: sudo pecl install mongodb
- run: echo -e "extension=mongodb.so" | sudo tee /usr/local/etc/php/php.ini > /dev/null
- run: cd app && composer install --no-interaction

Это работает нормально, но расширение PECL mongo db занимает половину нашего времени сборки.

Есть ли способ сохранить установленноеРасширения PECL в кеш CircleCI?

Я пробовал следующее:

- save_cache: 
          key: pecl-v1-{{ checksum "scripts/pecl-extensions.sh" }}
          paths:
            - /usr/local/20160303/mongodb.so

Но это не работает - mongodb снова загружается PECL.Какие каталоги я должен попытаться кэшировать в этом случае?

1 Ответ

0 голосов
/ 29 мая 2018

Отвечая на мой собственный вопрос.Существует способ кэширования расширений PHP, установленных с помощью PECL.Нужно знать, где именно установлены расширения pecl ( pecl config-show ).Похоже, что в контейнерах Circle CI это местоположение:

/ usr / local / lib / php / extensions / no-debug-non-zts-20160303 /

Расширения могут быть скопированы из этой папки во временный каталог, который можно кэшировать и восстанавливать.Восстановленные файлы можно скопировать обратно с помощью sudo.

  - run: pecl config-show 
  - run: mkdir pecl-cache
  - restore_cache:
     keys:
     - pecl-v1-{{ checksum "scripts/pecl-extensions.sh" }}
     - pecl-v1-

  - run:
      name: Copying restored pecl extensions cache into extensions directory 
      command: sudo cp -R pecl-cache/. /usr/local/lib/php/extensions/no-debug-non-zts-20160303/

  - run: 
      name: Install mongodb pecl extensions if mongodb.so is not there
      command: >
        if [ ! -f /usr/local/lib/php/extensions/no-debug-non-zts-20160303/mongodb.so ]; then 
            sudo pecl install mongodb ;
        fi

  - run:
      name: Copying pecl extensions to temp directory which will be cached
      command: sudo cp -R /usr/local/lib/php/extensions/no-debug-non-zts-20160303/* pecl-cache/

  - save_cache: 
      key: pecl-v1-{{ checksum "scripts/pecl-extensions.sh" }}
      paths:
        - pecl-cachedocker-php-ext-install
...