Ben*_*Ben 10 r travis-ci packrat
我正在使用一个Rt包,这是一个RStudio项目,我正在使用packrat来保存我依赖于我的项目的包源的本地副本.
每次我提交时,我都会让Travis-CI检查我的R包,但每次Travis构建我的包时,它都会获得最新版本的依赖包,而不是我在packrat/目录中获得的版本.
我可以在richfitz/wood中看到他似乎已经在他的.travis.yml文件中实现了这个目标:
env:
USE_PACKRAT=1
Run Code Online (Sandbox Code Playgroud)
以及一个相当复杂的make/packrat.mk文件,它使一切正常.
我的问题是,配置我的项目(例如我的.travis.yml文件)的最简单方法是告诉Travis机器从packrat/github上的目录中获取包,而不是从CRAN 获取包?
经过多次试验和错误以及进一步阅读后,似乎这样做会有这样的.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
Run Code Online (Sandbox Code Playgroud)
上述文件中的关键行是:
install:
- R -e "0" --args --bootstrap-packrat
Run Code Online (Sandbox Code Playgroud)
这将启动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在我们的项目中构建的软件包版本.
的缺点是,在特拉维斯构建时间显着增加.在切换到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
Run Code Online (Sandbox Code Playgroud)
在我的用例中,这大大缩短了时间,缩短到1-2分钟.