使用Travis-CI在packrat(而不是CRAN)中使用R包源文件

时间:2016-08-18 03:35:56

标签: r travis-ci packrat

我正在使用R package that is an RStudio project,我正在使用packrat来保存我依赖的项目源代码的本地副本。

每次提交时我都有Travis-CI checking my R package,但每次Travis构建我的包时,都会获得最新版本的依赖包,而不是我{{1}中的版本} 目录。

我可以在richfitz/wood中看到他似乎已在packrat/文件中实现了此目标:

.travis.yml

和一个相当复杂的make/packrat.mk文件,它使一切正常。

我的问题是,配置项目的最简单方法是什么(例如我的env: USE_PACKRAT=1 文件)告诉Travis机器从github上的.travis.yml目录获取软件包,而不是从CRAN获取软件包?

1 个答案:

答案 0 :(得分:6)

经过多次试验和错误以及进一步阅读后,似乎会这样做,并使用.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/127262823https://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's comment之后,似乎我们可以使用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分钟。