Caching Travis CI在指定位置缓存单个文件

Caching Travis CI在指定位置缓存单个文件,caching,bundler,travis-ci,Caching,Bundler,Travis Ci,我正在Travis CI上构建一个Ruby项目,并使用Gemfile和Bundler来管理依赖关系。My.travis.yml只包含一行关于缓存的内容: cache: bundler 我在其他地方也依赖于此(Travis的默认install命令、缓存目录,以及在上传缓存之前额外的bundle clean) 默认情况下,Gemfile.lock不会被缓存。我想缓存它以使Bundler跳过依赖项解析并使用缓存的Gemfile.lock。我还没有找到有效的解决方案 有什么想法吗?我注意到下面唯一的评

我正在Travis CI上构建一个Ruby项目,并使用Gemfile和Bundler来管理依赖关系。My
.travis.yml
只包含一行关于缓存的内容:

cache: bundler
我在其他地方也依赖于此(Travis的默认
install
命令、缓存目录,以及在上传缓存之前额外的
bundle clean

默认情况下,
Gemfile.lock
不会被缓存。我想缓存它以使Bundler跳过依赖项解析并使用缓存的
Gemfile.lock
。我还没有找到有效的解决方案


有什么想法吗?

我注意到下面唯一的评论,并提出了一个想法,但我认为这更多的是一种变通方法,而不是解决方案

在安装阶段之前,从
中的
/tmp/cached
复制
Gemfile.lock
。将
Gemfile.lock
复制到
脚本
阶段之前的
中的
/tmp/cached
。这样一来,Travis CI将缓存它,Bundler将使用缓存

我仍在寻找真正的解决方案。

AFAICS来自

  • 如果在
    cache:directories:
    .1下指定文件名而不是目录名,则该功能将起作用
有一个警告:

  • 最初,当没有缓存时(因此文件还不存在),缓存还原步骤将创建一个具有此名称的空目录。
    • 您需要在构建早期手动检测并删除此目录
示例
.travis.yml
(使用evvar作为文件路径以避免在任何地方重复):

env:
全球的:
-文件=
隐藏物:
目录:
-$FILE
安装前:
-如果[-d$FILE]];然后rm-rf“$FILE”;fi
#创建和/或使用该文件

1这是因为他们使用
tar
来创建和提取缓存存档,并且
tar
不关心您是否向其传递文件或目录