Mik*_*peg 5 jenkins jenkins-groovy jenkins-pipeline jenkins-api
我想创建一个在 jenkins 控制台上运行的 groovy 脚本,以列出作业定义以及使用的存储库和脚本路径(jenkinsfile),输出如下:
作业名称 -> git 仓库 -> 脚本路径
到目前为止,我能够列出作业名称和 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());
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何检索脚本路径?
我找到了一种检索脚本路径的方法。我已经针对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())
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于FreeStyleProject可以这样做:
import hudson.tasks.Shell
...
if(job instanceof hudson.model.FreeStyleProject) {
println("Script: ")
job.builders.findAll { it in Shell }.collect { shell -> println(shell.command) }
}
Run Code Online (Sandbox Code Playgroud)
我仍然没有找到多分支管道的方法,但由于它们由WorkflowJob组成,因此一些额外的努力可能会给出想要的结果。
注意:除了使用getScriptPath()函数之外,还可以使用属性scriptPath 。有时job.getDefinition()返回SCMBinder类型的对象,该对象没有getScriptPath()方法,但可以在其中使用该属性。
| 归档时间: |
|
| 查看次数: |
287 次 |
| 最近记录: |