【问题标题】:How to get list of changed files in Jenkinsfile for a pull request?如何在 Jenkinsfile 中获取拉取请求的更改文件列表?
【发布时间】:2020-10-12 00:43:35
【问题描述】:

是否可以在拉取请求构建期间获取 Jenkinsfile 中已更改文件的列表?我目前正在这样做...

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 
            }
        }
    }

但是如果我是第一次构建一个新分支,这个方法不会返回任何更改,因为没有以前的构建可以比较。有没有人找到解决办法?

谢谢

【问题讨论】:

  • 你不是先手动构建,下次再继续吗?
  • 这里用的是哪个源码控制,也许你可以使用它的API来查找信息?

标签: jenkins jenkins-pipeline jenkins-plugins jenkins-groovy jenkins-cli


【解决方案1】:

据我所知,没有内置功能可以做到这一点。

幸运的是,您可以通过编程方式找到它:

    def local_branch = sh (
        script: "git rev-parse --abbrev-ref HEAD",
        label: "Getting current branch name",
        returnStdout: true
    ).trim()
    println "Local branch is ${local_branch}"

    def base_branch = 'master' 
    // This is very naive.
    // In reality, you need a better way to find out what your base branch is.
    // One way is to have a file with a name of a base branch.
    // Another one is to invoke API, e.g. GitHub API, to find out base branch.
    // Use whatever works for you.
    println "Base branch is ${base_branch}"

    sh script: "git fetch origin --no-tags ${base_branch}", label: "Getting base branch"

    def git_diff = sh (
        script: "git diff --name-only origin/${base_branch}..${local_branch}",
        returnStdout: true
    ).trim()

现在您在git_diff 变量中有一个更改文件的列表。

使用 Jenkins 变更集大部分都不起作用,并且无论如何都保留用于其他目的。

【讨论】:

  • 感谢您的回复!如果我事先知道分支的名称,这会改变什么吗?
  • 然后您可以将名称放入 base_branchlocal_branch 变量中,并去掉我猜得到它们的代码。
【解决方案2】:

这也可以通过pipeline-github 插件实现:

def changedFiles = pullRequest.files.collect {
    it.getFilename()
}

【讨论】:

    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 2017-04-29
    • 2013-06-09
    • 2015-04-26
    • 2019-03-07
    相关资源
    最近更新 更多