在拉取请求中读取文件的 Azure 管道

时间:2021-02-09 15:04:22

标签: r azure-devops azure-pipelines

我正在尝试构建一个 azure 管道来在拉取请求中 lint R 脚本,作为允许拉取请求获得批准和完成的步骤之一。

我可以让管道运行 R 并库我需要的一切,但我正在努力寻找一种方法来访问通过管道在拉取请求中更改的 R 脚本。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你可以通过 git 命令找到 PR 的变化文件。将其添加到 PR 验证构建中,作为 PR 到 master 分支的示例:

git diff --name-only --relative --diff-filter AMR origin/master --name-only -- . > $(Build.StagingDirectory)/repo_changes.txt

这是使用 PowerShell (PowerShell task) 仅复制更改文件的示例

$targetfolder = "$(Build.StagingDirectory)" + "/"

function CopyFiles{
    param( [string]$source )

    $target = $targetfolder + $source

    New-Item -Force $target
    copy-item $source $target -Force
}

$changes = git diff --name-only --relative --diff-filter AMR origin/master --name-only -- .

if ($changes -is [string]){ CopyFiles $changes }
else
{
    if ($changes -is [array])
    {       
        foreach ($change in $changes){ CopyFiles $change }
    }
}

yaml 文件的部分可能是这样的:

jobs:
- job: get_changed_files
  steps:  
   - task: PowerShell@2
     inputs:
       targetType: 'inline'
       script: |
         $targetfolder = "$(Build.StagingDirectory)" + "/"
         
         function CopyFiles{
             param( [string]$source )
         
             $target = $targetfolder + $source
         
             New-Item -Force $target
             copy-item $source $target -Force
         }
         
         $changes = git diff --name-only --relative --diff-filter AMR origin/master --name-only -- .
         
         if ($changes -is [string]){ CopyFiles $changes }
         else
         {
             if ($changes -is [array])
             {       
                 foreach ($change in $changes){ CopyFiles $change }
             }
         }
   - task: PublishBuildArtifacts@1
     inputs:
      pathToPublish: $(Build.StagingDirectory)
      artifactName: MyChangedFiles