使用groovy打印Git SCM详细信息以进行自由式和管道作业

时间:2020-06-03 08:37:42

标签: jenkins groovy jenkins-pipeline jenkins-groovy

我正在尝试在Freestyle下面单独打印/列出我们所有的詹金斯(Pipelinegroovy)作业以及SCM详细信息,例如(Git URL和Branch详细信息)。我能够分别列出我们的自由式和脚本化管道作业名称。

import jenkins.model.*
import hudson.model.*
import hudson.triggers.*
import org.jenkinsci.plugins.workflow.job.*

println("--- Jenkins Pipeline jobs List ---")
Jenkins.getInstance().getAllItems(WorkflowJob.class).each() { println(it.fullName) };

println("\n--- Jenkins FreeStyle jobs List ---")
Jenkins.getInstance().getAllItems(FreeStyleProject.class).each() { println(it.fullName) };

println '\nDone.'

使用以下常规代码,我可以打印两个freestyle & pipeline Git URL,但是它是单独打印的。

Jenkins.instance.getAllItems(hudson.model.AbstractProject.class).each {it ->
  scm = it.getScm()
  if(scm instanceof hudson.plugins.git.GitSCM)
  {
    println scm.getUserRemoteConfigs()[0].getUrl()
  }
}
println "Done"

在列出/打印作业名称和Git URL以及相应的作业时需要帮助。

1 个答案:

答案 0 :(得分:0)

如果我在Jenkins脚本控制台中运行此代码,我也会在输出DSL脚本管道(Jenkinsfile)作业中看到

import org.jenkinsci.plugins.workflow.job.WorkflowJob;

def printScm(project, scm){
    if (scm instanceof hudson.plugins.git.GitSCM) {
        scm.getRepositories().each {
            it.getURIs().each {
                println(project + "\t"+ it.toString());
            }
        }
    }
}

Jenkins.instance.getAllItems(Job.class).each {

    project = it.getFullName()
    if (it instanceof AbstractProject){
        printScm(project, it.getScm())
    } else if (it instanceof WorkflowJob) {
        it.getSCMs().each {
            printScm(project, it)
        }
    } else {
        println("project type unknown: " + it)
    }

}