我删除托管作业rm
的旧jenkins版本:
my_job/builds/$ rm -rf [1-9]*
这些旧版本在作业页面中仍然可见。
如何使用命令行删除它们?
(没有每个构建用户界面中的删除按钮)
答案 0 :(得分:52)
这是另一种选择:使用cURL远程删除构建。 (将URL的开头替换为您用浏览器访问Jenkins的任何内容。)
$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll
以上删除了作业myJob的#1到#56。
如果在Jenkins实例上启用了身份验证,则必须提供用户名和API令牌,如下所示:
$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll
必须从Jenkins的/ me / configure页面获取API令牌。只需单击“Show API Token ...”按钮即可显示用户名和API令牌。
修改:正如yegeniy在下面的评论中指出的那样,可能必须在上面的网址中将doDeleteAll
替换为doDelete
才能使其工作,具体取决于配置。
答案 1 :(得分:39)
看起来这已经添加到CLI中,或者至少已经处理过:http://jenkins.361315.n4.nabble.com/How-to-purge-old-builds-td385290.html
语法将是这样的:java -jar jenkins-cli.jar -s http://my.jenkins.host delete-builds myproject '1-7499' --username $user --password $password
答案 2 :(得分:23)
答案 3 :(得分:10)
您可以使用Hudson API通过Groovy脚本执行此操作。访问您的jenkins安装程序
http://localhost:38080/script.
例如,要使用以下脚本删除所有项目的所有旧版本: 注意:如果使用指纹,请注意,您将失去所有历史记录。
import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
// check that job is not building
if(!item.isBuilding()) {
System.out.println("Deleting all builds of job "+item.name)
for(build in item.getBuilds()){
build.delete()
}
}
else {
System.out.println("Skipping job "+item.name+", currently building")
}
}
或清理所有工作区:
import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
// check that job is not building
if(!item.isBuilding()) {
println("Wiping out workspace of job "+item.name)
item.doDoWipeOutWorkspace()
}
else {
println("Skipping job "+item.name+", currently building")
}
}
上有很多例子
答案 4 :(得分:7)
是否有理由需要手动执行此操作,而不是让Jenkins为您删除旧版本?
您可以根据天数或构建次数更改作业配置以自动删除旧版本。不再担心或不得不跟踪,詹金斯只为你做。
答案 5 :(得分:1)
以下脚本清除旧版本的作业。如果手动删除构建,则应从磁盘重新加载配置:
import hudson.model.*
for(item in Hudson.instance.items) {
if (!item.isBuilding()) {
println("Deleting old builds of job " + item.name)
for (build in item.getBuilds()) {
//delete all except the last
if (build.getNumber() < item.getLastBuild().getNumber()) {
println "delete " + build
try {
build.delete()
} catch (Exception e) {
println e
}
}
}
} else {
println("Skipping job " + item.name + ", currently building")
}
}
答案 6 :(得分:0)
从Jenkins Scriptler控制台运行以下Groovy脚本,删除视图下列出的所有作业构建:
import jenkins.model.Jenkins
hudson.model.Hudson.instance.getView('<ViewName>').items.each() {
println it.fullDisplayName
def jobname = it.fullDisplayName
def item = hudson.model.Hudson.instance.getItem(jobname)
def build = item.getLastBuild()
if (item.getLastBuild() != null) {
Jenkins.instance.getItemByFullName(jobname).builds.findAll {
it.number <= build.getNumber()
}.each {
it.delete()
}
}
}
答案 7 :(得分:0)
从脚本控制台运行此命令,但是您需要更改作业名称:
def jobName = "name"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
答案 8 :(得分:0)
def jobName = "MY_JOB_NAME"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().findAll { it.number < 10 }.each { it.delete() }
答案 9 :(得分:0)
此脚本将配置所有 Jenkins 作业的构建保留设置。
将值从 30 和 200 更改为您需要的套件,运行脚本,然后重新启动 Jenkins 服务。
#!/bin/bash
cd $HOME
for xml in $(find jobs -name config.xml)
do
sed -i 's#<daysToKeep>.*#<daysToKeep>30</daysToKeep>#' $xml
sed -i 's#<numToKeep>.*#<numToKeep>200</numToKeep>#' $xml
done