我想创建一个jenkins作业,该作业可以列出我所有的jenkins作业,它是已执行的构建数量的计数。 Jenkins API或Groovy可能会起作用。 API下方提供了特定作业的所有构建ID列表,但我正在寻找针对该作业执行的构建的计数。
http://[jenkins_server]/job/[jobname]/api/xml?tree=builds[id]
我也指的是:https://stackoverflow.com/a/28039134/12897205
让我知道我是否可以购买任何插件
答案 0 :(得分:0)
在管道中使用构建步骤。
为简单起见,我将简单地放一个简单的bash并获取每个作业的构建数量。另外请注意,仅当您未设置自定义内部版本号时,此方法才有效。 :)
要获取作业列表,
curl -s -g http://<jenkins-url>/api/json\?tree\=jobs\[name\] | jq -r '.jobs[].name' | awk -v ORS=, '{print $1}' | sed 's/,$/\n/'
要获取所有关联构建的列表,请将上面命令的值传递给下面的for loop的jobname参数。
for i in {jobname1,jobname2}; do count=$(curl -s http://<jenkins-url>/job/$i/api/json\?tree\=nextBuildNumber | jq .nextBuildNumber-1) && echo "\nJobName: $i \nNumber of builds:$count"; done;
EDIT-1 复制以下脚本,然后在您的Jenkinsfile中调用它。您可以传递要保留的作业数量作为参数。在作业中根据需要更改构建/作业网址,或者也可以将其作为参数传递。
#!/bin/bash
jobstokeep=$1
listofbuilds=$(curl -sg http://jenkins-url/job/jobName/api/json?tree=builds[number] | jq .[] | grep 'number' | sed 's/[^0-9]//g' | awk -v var=$jobstokeep 'NR>var' | awk -v RS='' -v OFS=',' '$1=$1')
echo $listofbuilds
for i in ${listofbuilds//,/ }; do curl -s $user:$pass -X POST http://jenkins-url/job/jobName/$i/doDelete && echo "Build $i is deleted"; done;
上面的脚本将首先打印要删除的作业数,以逗号分隔的值,然后循环遍历每个作业并使用curl命令(Jenkins Rest API)将其删除。