Jenkins SCM插件,如何获得自上次构建以来的每个更新文件的列表?

Jenkins SCM插件,如何获得自上次构建以来的每个更新文件的列表?,jenkins,Jenkins,我有一个Jenkins管道构建,我想迭代自上次构建以来更新的所有文件。我环顾四周,认为当前构建对象的changeSets变量可能会起作用。所以我试了一下: def gitUrl = "git@gitlab.xxx.com:me/myrepo.git" def gitResponse = dir(".") { checkout([ $class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[url: gitU

我有一个Jenkins管道构建,我想迭代自上次构建以来更新的所有文件。我环顾四周,认为当前构建对象的changeSets变量可能会起作用。所以我试了一下:

def gitUrl = "git@gitlab.xxx.com:me/myrepo.git"
def gitResponse = dir(".") { checkout([
  $class: 'GitSCM', branches: [[name: '*/master']],
  userRemoteConfigs: [[url: gitUrl,credentialsId:'xxxkey']]
]) }
// don't do anything if nothing changed
if(gitResponse.GIT_COMMIT == gitResponse.GIT_PREVIOUS_COMMIT) {
  echo "No changes detected."
  return
}
def changeLogSets = currentBuild.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]
    echo "Change detected: ${entry}"
  }
}

是否可以列出自上次生成以来每个更改的文件?

我创建了脚本管道,用于打印当前生成中引入的更改:

node {
    checkout([$class: 'GitSCM', branches: [[name: 'YOUR_BRANCH']],
     userRemoteConfigs: [[url: 'YOUR_GIT_URL']]])      
    stage('TEST') {
        def changeLogSets = currentBuild.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]
            entry.getAffectedPaths().each {
                echo "Change detected: ${it}"   
            }
          }
        }
    }
}
节点{
签出([$class:'GitSCM',分支:[[name:'YOUR_BRANCH']],
userRemoteConfigs:[[url:'YOUR\u GIT\u url']]
阶段(“测试”){
def changeLogSets=currentBuild.changeSets
对于(int i=0;i
我创建了脚本管道,用于打印当前版本中引入的更改:

node {
    checkout([$class: 'GitSCM', branches: [[name: 'YOUR_BRANCH']],
     userRemoteConfigs: [[url: 'YOUR_GIT_URL']]])      
    stage('TEST') {
        def changeLogSets = currentBuild.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]
            entry.getAffectedPaths().each {
                echo "Change detected: ${it}"   
            }
          }
        }
    }
}
节点{
签出([$class:'GitSCM',分支:[[name:'YOUR_BRANCH']],
userRemoteConfigs:[[url:'YOUR\u GIT\u url']]
阶段(“测试”){
def changeLogSets=currentBuild.changeSets
对于(int i=0;i
要以更实用的方式解释Krzysztof的答案,您可以获得修改路径集,如下所示:

def paths = currentBuild
  .changeSets.collectMany {
    it.items.collectMany {
      it.affectedPaths
    }
  }.unique()

然后可以使用
回显路径进行检查。加入('\n')
。您可以在
脚本
步骤中的声明性管道中使用它。

要以更实用的方式解释Krzysztof的答案,您可以获得修改路径集,如下所示:

def paths = currentBuild
  .changeSets.collectMany {
    it.items.collectMany {
      it.affectedPaths
    }
  }.unique()
然后可以使用
回显路径进行检查。加入('\n')
。您可以在
脚本
步骤中的声明性管道中使用它