我需要通过Brew安装一个新版本的依赖项,而不是包含在Travis CI映像中。运行brew update会为每个构建作业增加超过100秒的时间,所以我想找到一种方法来缓存安装,或者至少缓存瓶子和公式。
似乎应该有一个简单的食谱,以缓存奶瓶和配方啤酒,但到目前为止,我还没有找到那个食谱。
具体来说,我在TravisCI上使用了TravisCI,对于使用Python2.6运行测试的构建作业,我需要使用pyenv作为最新版本(1.2.4),因为get_pip在早期版本上由于最近对PyPI的更改而失败。
我在我的.travis.yml中添加了一个条件,它运行得很好:
if [[ "$pyver" == 2.6 ]]; then
brew upgrade pyenv &>/dev/null
fi但是,该命令需要一段时间才能运行。我已经拆分了升级命令并对其进行了计时:
time brew update
time brew upgrade pyenvbrew update需要超过100秒,brew upgrade需要10秒。
这一发现导致了将瓶子和方程式缓存起来的想法,并在随后的每一次构建中运行:
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade pyenv有一个关于如何缓存酿造源的问题。效果很好。
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文档中的示例总是缓存$HOME下的目录。当特拉维斯更新图片的时候,我可能会遇到一些问题。更新图像后,Travis CI是否删除分支缓存?如果没有,我似乎需要手动完成。
有更好的办法吗?似乎特拉维斯CI应该提供一个简单的方法来缓存啤酒配方和瓶子。
我不应该麻烦啤酒,只需要从源安装pyenv吗?
发布于 2018-05-09 16:17:52
通过在第一个构建中复制文件,我在$HOME下缓存了brew公式:
cache:
directories:
- "$HOME/Library/Caches/Homebrew"
[...]
before_install:
- |
if [ "$TRAVIS_OS_NAME" = osx ]; then
# Pyenv >= 1.2.4 is needed with Python 2.6
if [[ "$pyver" == 2.6 ]]; then
# Upgrade pyenv and save formula/bottle in cache.
formula=$(brew --repository)/Library/Taps/homebrew/homebrew-core/Formula/pyenv.rb
formula_cached=$(brew --cache)/pyenv.rb
if [[ ! -f $formula_cached ]]; then
brew upgrade pyenv &>/dev/null
cp $formula $formula_cached
else
HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade $formula_cached
fi
fihttps://stackoverflow.com/questions/50196723
复制相似问题