我正在使用Travis CI构建一个Ruby项目,我使用Gemfile和Bundler来管理依赖项。我的.travis.yml
只包含一行关于缓存的内容:
cache: bundler
我在其他地方(Travis的默认install
命令,缓存目录以及上传缓存之前的额外bundle clean
)依赖于此。
默认情况下,Gemfile.lock
未缓存。我想缓存它以使Bundler跳过依赖项解析并使用缓存的Gemfile.lock
。我还没有找到有效的解决方案。
有什么想法吗?
答案 0 :(得分:0)
我注意到this question下的唯一评论并提出了一个想法,但我认为它更像是一种解决方法,而不是解决方案。
在Gemfile.lock
阶段从 /tmp/cached
复制before_install
。 Gemfile.lock
阶段的副本/tmp/cached
到 before_script
。这样它将由Travis CI缓存,Bundler将使用缓存。
我仍在寻找真正的解决方案。
答案 1 :(得分:0)
Travis' cacher implementation的AFAICS,
cache: directories:
下指定文件名而不是目录名,它将起作用。 1 一个警告:
示例.travis.yml
(使用evvar作为文件的路径,以避免在各处重复它):
env:
global:
- FILE=<path>
cache:
directories:
- $FILE
before_install:
- if [[ -d $FILE ]]; then rm -rf "$FILE"; fi
# create and/or use the file
1 这是因为他们使用tar
来创建和提取缓存档案,而tar
不在乎是否向其传递文件或目录