如何以编程方式列出jenkins作业脚本路径

时间:2019-12-09 18:48:58

标签: jenkins jenkins-pipeline jenkins-groovy jenkins-api

我想创建一个可在jenkins控制台上运行的groovy脚本,以列出作业定义以及所使用的存储库和脚本路径(jenkinsfile),并显示如下输出:

JobName-> git repository->脚本路径

到目前为止,我已经能够列出作业名称和git存储库,但是我找不到找到脚本路径的方法。它似乎没有包含在GitSCM插件中,但是我找不到通过WorkflowJob获取它的方法。这是我当前的代码:

Jenkins.instance.getAllItems(Job.class).each{
  jobName = it.getName()
  if(it instanceof FreeStyleProject){
   return
  }
  scm = it.getTypicalSCM();
  if (scm instanceof hudson.plugins.git.GitSCM) {
    scm.getRepositories().each{
        it.getURIs().each{
            println(jobName +"-> "+ it.toString());
        }
    }
  }
}

如何检索脚本路径?

1 个答案:

答案 0 :(得分:0)

我找到了一种检索脚本路径的方法。我已经针对 WorkflowJob 对其进行了测试。如果是本地脚本,则以下代码打印脚本本身,如果是远程脚本,则打印路径:

Jenkins.instance.getAllItems(Job) { job ->
   if(job instanceof WorkflowJob) {
       if(job.getDefinition() instanceof org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition) {
           println("Local script: ")
           println(job.getDefinition().getScript())
       }
       else {
           println("Remote script path: " + job.getDefinition().getScriptPath())
       }
   }
}

对于FreeStyleProject,可以这样做:

   import hudson.tasks.Shell
   ...
   if(job instanceof hudson.model.FreeStyleProject) {
      println("Script: ")
      job.builders.findAll { it in Shell }.collect { shell -> println(shell.command) }
   }

我仍然没有找到多分支管道的方法,但由于它们由 WorkflowJob 组成,一些额外的努力可能会得到想要的结果。

注意:除了使用 getScriptPath() 函数之外,还可以使用属性 scriptPath。有时job.getDefinition()返回一个SCMBinder类型的对象,它没有getScriptPath()方法,但是可以使用属性