我们使用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。在这种情况下我应该尝试缓存哪些目录?
答案 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