Groovy 获取 Jenkins 管道脚本路径的脚本

Groovy script to get Jenkins pipeline's script path

我想在 Jenkins 脚本控制台中 运行 一个脚本来检索在 Jenkins 中配置的所有 jobs/pipelines 的 scriptPath 参数。我找到了获取管道名称的方法,但我想要每个管道的 scriptPath 参数。

有线索吗?

所有管道作业都是 org.jenkinsci.plugins.workflow.job.WorkflowJob 的实例,可以使用 Jenkins.instance.getAllItems 函数找到。
一旦找到,每个作业都包含 FlowDefinition class 的属性,可以通过 getDefinition() 方法访问该属性。管道有两种定义:

  1. CpsFlowDefinition - 对于定义内联脚本(非 SCM)的管道,可通过 getScript() 方法访问该脚本。
  2. CpsScmFlowDefinition - 对于定义 SCM 脚本的管道,可通过 getScriptPath() 方法访问该脚本。

因此,为了实现您想要的效果,您可以查看相关工作并提取相关属性:

def pipelineJobs =Jenkins.instance.getAllItems(org.jenkinsci.plugins.workflow.job.WorkflowJob)
def scmJobs = pipelineJobs.findAll { it.definition =~ 'CpsScmFlowDefinition'}

scmJobs.each {
    println "Pipeline Name: ${it.name}"
    println "SCM Script Path: ${it.definition.scriptPath}"
}

如果您的所有作业 都是 SCM 管道,您可以使用以下单衬里:

Jenkins.instance.getAllItems(org.jenkinsci.plugins.workflow.job.WorkflowJob)*.definition.scriptPath

对于单个特定作业,您可以使用:

Jenkins.instance.getItemByFullName("<PIPELINE_NAME>").definition.scriptPath // or just script for inline definition