我想创建一个可在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());
}
}
}
}
如何检索脚本路径?
答案 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()方法,但是可以使用属性