我需要通过Brew安装比Travis CI映像中包含的更新版本的依赖项。运行brew update
为每个构建作业添加超过100秒,因此我想找到一种方法来缓存安装,或者至少缓存瓶子和公式。
似乎应该有一个简单的配方来缓存Brew中的瓶子和配方,但到目前为止我还没有找到配方。
具体来说,我在TravisCI上使用pyenv
,对于使用Python 2.6运行测试的构建作业,我需要pyenv
作为最新版本(1.2.4),由于最近对PyPI的更改,get_pip
在早期版本上失败。
我为.travis.yml
添加了一个条件,它运行正常:
if [[ "$pyver" == 2.6 ]]; then
brew upgrade pyenv &>/dev/null
fi
但是,该命令需要一段时间才能运行。我已经拆分升级命令并计时:
time brew update
time brew upgrade pyenv
brew update
需要超过100秒,brew upgrade
需要10秒。
这一发现导致了缓存瓶子和公式以及每次后续构建运行的想法:
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade pyenv
关于如何cache Brew sources的问题。这很好。
cache:
directories:
- "$HOME/Library/Caches/Homebrew"
在$HOME/Library/Caches/Homebrew
中,我发现瓶子被缓存了:
pyenv-1.1.5.sierra.bottle.tar.gz
pyenv-1.2.4.sierra.bottle.tar.gz
然而,即使缓存瓶子,运行HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade pyenv
也不会成功,大概是因为更新的公式没有被缓存。该命令产生:
Error: pyenv 1.1.5 already installed
我添加了公式的缓存:
cache:
directories:
- "$HOME/Library/Caches/Homebrew"
- /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
并实现了以下算法:
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade pyenv
以使用最新的缓存公式/瓶升级pyenv。brew update
。brew upgrade pyenv
并保存缓存的瓶子和公式。以及以下脚本:
function ver { printf "%03d%03d%03d" $(echo "$1" | tr '.' ' '); }
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade pyenv &>/dev/null
# Update brew and upgrade pyenv if necessary
if [ $(ver $(pyenv --version | cut -d ' ' -f2)) -lt $(ver 1.2.4) ]; then
brew upgrade pyenv &>/dev/null
fi
但是,我质疑缓存/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core
是否是一个好主意。 Travis CI文档中的示例始终在$HOME
下缓存目录。当Travis更新图像时,我可能会遇到问题。 Travis CI是否在图像更新后删除了分支缓存?如果没有,似乎我需要手动完成。
有更好的方法吗?看起来Travis CI应该提供一种简单的方法来缓存Brew配方和瓶子。
我应该不打扰Brew,只是从源代码安装pyenv吗?
答案 0 :(得分:1)
我通过在第一个版本上复制文件来缓存class Export implements FromCollection
{
public function collection()
{
$data = DB::table('Providers')->get();
return $data;
}
}
下的brew公式:
$HOME