Jenkinsfile,获取PR中所有修改过的文件

时间:2019-05-30 09:48:03

标签: git jenkins continuous-integration jenkins-pipeline

我想在PR中列出修改过的文件,我尝试了一些解决方案,但是我只能在上次提交到远程的提交中访问修改过的文件。

示例:

  • 通过3次提交创建PR,新的jenkins作业开始;
  • 已修改文件的列表包括3次提交中的所有文件;
  • 构建失败,将带有修订的新提交推送到PR中,开始新的jenkins作业;
  • 修改后的文件列表仅包括新提交的文件;

因此,在此示例中,我想获得PR中所有新提交的文件列表。

代码:

  def changeLogSets = currentBuild.rawBuild.changeSets
    for (int i = 0; i < changeLogSets.size(); i++) {
        def entries = changeLogSets[i].items
        for (int j = 0; j < entries.length; j++) {
            def entry = entries[j]
            def files = new ArrayList(entry.affectedFiles)
            for (int k = 0; k < files.size(); k++) {
                def file = files[k]
                print file.path 
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

使用Git插件(如果尚未安装)。然后是这样的:

git diff --name-status $GIT_PREVIOUS_SUCCESSFUL_COMMIT..$GIT_COMMIT > allchanges

这将为您提供自上次成功构建以来的所有更改的列表。

答案 1 :(得分:0)

我已经使用git命令找到了解决方案:

/**
 * Compares the current branch and target branch and extract the changed files.
 *
 * @return the PR changed files.
 */
def getPRChangelog() {
    return sh(
            script: "git --no-pager diff origin/${params.target} --name-only",
            returnStdout: true
    ).split('\n')
}