如何为R包的CI创建azure-pipeline.yml?

如何为R包的CI创建azure-pipeline.yml?,r,azure,azure-devops,azure-pipelines,R,Azure,Azure Devops,Azure Pipelines,我一直在尝试让Azure管道为我的公司内部R包工作。我希望管道能够: Check() 在/testthat中运行测试 使用covr检查代码覆盖率 我们使用Azure DevOps,并在其中使用Azure回购协议。我发现的几个例子主要集中在GitHub解决方案上。然而,我曾经尝试过与他人合作,因为我对如何建立管道没有太多的知识。首先,我发现学习和前进非常困难。我也在RStudio社区上发表了文章,但是我当前的方法没有运行check()。我想尝试使用Azure DevOps提供的所有测试功能。我需要

我一直在尝试让Azure管道为我的公司内部R包工作。我希望管道能够:

  • Check()
  • 在/testthat中运行测试
  • 使用covr检查代码覆盖率

  • 我们使用Azure DevOps,并在其中使用Azure回购协议。我发现的几个例子主要集中在GitHub解决方案上。然而,我曾经尝试过与他人合作,因为我对如何建立管道没有太多的知识。首先,我发现学习和前进非常困难。我也在RStudio社区上发表了文章,但是我当前的方法没有运行
    check()
    。我想尝试使用Azure DevOps提供的所有测试功能。

    我需要做一些类似的事情,并且发现您的RStudio社区帖子在让我开始使用它方面非常有用-谢谢您的帖子。我现在已成功建立了一条管道,该管道:

  • 使用
    rcmdcheck
    检查包(这也会运行测试)
  • 使用covr运行代码覆盖率
  • 发布测试结果、代码覆盖率报告和check.log文件

  • 首先,您首先需要确保testthat.R脚本使用指定的
    reporter
    参数运行
    test\u check

    test\u check(“mypackage”,reporter=JunitReporter$new(file=“test result.xml”)


    那么下面的.yml文件应该可以实现这一点:

    trigger:
    - master
    
    pool:
      vmImage: 'ubuntu-16.04'
    
    container:
      image: 'rocker/tidyverse:latest'
    
    variables:
      _R_CHECK_FORCE_SUGGESTS_: false
      MAKEFLAGS: "-j 2"
    
    steps:
    - bash: R -q -e 'writeLines(".libPaths(\"~/R-private\")", ".Rprofile"); dir.create("~/R-private", recursive = TRUE); print(Sys.getenv());'
      displayName: "Preliminaries"
    
    - bash: R -q -e 'install.packages(c("covr", "roxygen2", "testthat", "remotes", "rcmdcheck")); remotes::install_deps(dependencies = TRUE);'
      displayName: 'Install Dependencies'
    
    - bash: R -q -e "rcmdcheck::rcmdcheck(args = '--no-manual', error_on = 'warning', check_dir = 'check')"
      displayName: 'Check Package'
    
    - bash: R -q -e 'cov <- covr::package_coverage(); covr::to_cobertura(cov, "coverage.xml")'
      displayName: 'Run Code Coverage'
      condition: succeededOrFailed()
    
    - task: UseDotNet@2
      displayName: 'Use .NET Core sdk'
      inputs:
        packageType: sdk
        version: 2.2.203
        installationPath: $(Agent.ToolsDirectory)/dotnet
      condition: succeededOrFailed()
    
    - task: PublishCodeCoverageResults@1
      displayName: 'Publish Code Coverage'
      inputs:
        codeCoverageTool: 'Cobertura'
        summaryFileLocation: '$(System.DefaultWorkingDirectory)/**/coverage.xml'
      condition: succeededOrFailed()
    
    - task: PublishTestResults@2
      displayName: 'Publish Test Results'
      inputs:
        testResultsFormat: 'JUnit'
        testResultsFiles: '**/test-*.xml'
      condition: succeededOrFailed()
    
    - task: PublishBuildArtifacts@1
      displayName: 'Publish Check log'
      inputs:
        pathToPublish: 'check/mypackage.Rcheck/00check.log' 
        artifactName: check 
      condition: succeededOrFailed()
    
    
    触发器:
    -主人
    游泳池:
    vmImage:'ubuntu-16.04'
    容器:
    图片:“摇滚乐/潮流:最新”
    变量:
    _R\u检查\u力\u建议\u错误
    MAKEFLAGS:“-j2”
    步骤:
    -bash:R-q-e'writeline(“.libpath(\“~/R-private\”),“.Rprofile”);dir.create(“~/R-private”,recursive=TRUE);打印(Sys.getenv());'
    显示名称:“初步准备”
    -bash:R-q-e'install.packages(c(“covr”、“roxygen2”、“testthat”、“remotes”、“rcmdcheck”);remotes::install_deps(dependencies=TRUE);'
    displayName:“安装依赖项”
    -bash:R-q-e“rcmdcheck::rcmdcheck(args='--no manual',error\u on='warning',check\u dir='check')”
    displayName:“检查包”
    -bash:R-q-e'cov