经过反复试验和进一步阅读,似乎可以做到这一点,.travis.yml
文件如下:
# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r
language: R
sudo: false
cache: packages
install:
- R -e "0" --args --bootstrap-packrat
warnings_are_errors: false
上述文件中的关键行是:
install:
- R -e "0" --args --bootstrap-packrat
这将启动 R,并在本地 packrat 目录中构建 R 包,以便它们在 Travis 机器中可用。
之后,travis 将继续并尝试构建包,并且不需要联系 CRAN 来获取依赖项,因为它们已经可用(假设 packrat 按预期工作)。
我在这里发现了这个技巧:https ://travis-ci.org/ChowHub/paper-pattern-similarity/builds/127262823和https://github.com/rstudio/packrat/issues/158。我在这里工作:https ://travis-ci.org/benmarwick/mjbtramp/builds/157747326
这样做的好处是我们可以使用我们在本地使用的完全相同的包在 travis 上构建。当我们在 travis 上构建时,我们不必从 CRAN 获取最新的包,现在我们可以更好地控制 travis 在我们的项目中构建的包版本。
缺点是 travis 上的构建时间大大增加。在切换到 Packrat 后,我的一个项目从 2-3 分钟缩短到了 13-15 分钟。
更新在下面 Noam 的问题和Jim 的评论之后,似乎我们可以使用cache:
这样的缓存 packrat 包:
# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r
language: R
sudo: false
cache:
directories: $TRAVIS_BUILD_DIR/packrat/
packages: true
install:
- R -e "0" --args --bootstrap-packrat
warnings_are_errors: false
在我的用例中,这大大减少了时间,回到 1-2 分钟。