我阅读了这些链接:
首先,我围绕这些进行工作Folders
,这些分别包含Views
和这些Jobs
。
请考虑以下内容(为了简单起见):
- 文件夹:
jenkins-01
看法: α工作: 执行 - 文件夹:
jenkins-02
看法: 贝他克斯工作: 执行
从以上两个重要观察可以看出:
- 和
jenkins-01
jenkins-02
文件夹针对两个不同的项目。 - 这
Execute
工作,可以重复在许多不同的文件夹,但仅限于名字。
现在考虑以下情况:
我可以通过以下Job
方式执行:
不风俗 View
- 因此默认的默认All
/通用视图:
http://localhost:9090/job/jenkins-01/job/Execute/
通过许多视图,假设
http://localhost:9090/job/jenkins-01/view/alpha/job/Execute/
http://localhost:9090/job/jenkins-01/view/betax/job/Execute/
所有构建的历史记录或轨迹都位于以下路径位置:
/Users/username/ci/jenkins/Contents/jobs/jenkins-01/jobs/Execute
脚本控制台
通过以下方式:
def jobName = ???
println jobName;
//I used any of them
//def job = Jenkins.getInstance().getItemByFullName(jobName, Job.class)
//def job = Jenkins.instance.getItem(jobName)
if(job != null) {
job.getBuilds().each { println it }
//job.getBuilds().each { it.delete() }
//job.nextBuildNumber = 1
//job.save()
}
else
println 'job is NULL'
我尝试了许多关于jobName
(关于???
) 的组合,但总是得到null
。那么 的正确值应该是多少jobName
?
命令行
java -jar jenkins-cli.jar -s http://localhost:9090 delete-builds jobName=??? '1-56'
再次:正确的值应该是什么jobName
?
记住:每个都Job
在一个中声明Folder
,并且作业的名称(只是名称)可以在许多Folders
答案1
对于一份工作来说,只有一条权威的路径——那job.fullName
就是
http://localhost:9090/job/jenkins-01/job/Execute/
这将为您提供fullName
所有工作:
Jenkins.instance.allItems.findAll()
{ it instanceof AbstractProject }.each
{println it.fullName}
视图只是要显示的经过筛选的作业列表。您应该在每个视图中看到相同的作业历史记录。
注意:不幸的是,Jenkins 允许使用同名的作业,如果你“移动”一份作业,你可能会破坏另一个文件夹中同名的另一份作业。
更新:以下代码将选择所有“顶级”文件夹并对其进行迭代,列出每个文件夹的内容。注意递归处理的条件(或不递归处理)。作业的句柄永远只有一个,即it.fullName
。
您可以添加其他条件以将范围限制为特定文件夹或作业名称模式。
import com.cloudbees.hudson.plugins.folder.*
Folders = Jenkins.instance.allItems.findAll()
{ it instanceof com.cloudbees.hudson.plugins.folder.Folder && !it.fullName.contains("/")
// remove the && condition to retrieve nested folders
}
Folders.collect { folder ->
println "::: " + folder.fullName
// use folder.getItems().findAll() below to not recurse into nested folders
folder.allItems.findAll()
{ it instanceof AbstractProject }.each
{ println folder.fullName + ' - ' + it.fullName }
}
return