在CircleCI上缓存与Pecl一起安装的PHP扩展

时间:2018-05-22 09:24:19

标签: php pecl circleci-2.0

我们使用CircleCI作为php symfony应用程序的构建服务器,我们需要带有composer的mongodb库,它依赖于我们用pecl安装的mongodb扩展。所以我们在构建中有以下步骤:

- 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

但这不起作用 - PECL再次下载mongodb。在这种情况下我应该尝试缓存哪些目录?

1 个答案:

答案 0 :(得分:2)

回答我自己的问题。有一种方法可以缓存与PECL一起安装的PHP扩展。需要知道pecl扩展的安装位置( pecl config-show )。似乎在Circle CI容器上,这个位置是:

的/ usr /本地/ LIB / PHP /扩展/无调试非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