Jenkins:使用命令行删除旧版本
我删除了带有Jenkins:使用命令行删除旧版本,jenkins,Jenkins,我删除了带有rm的旧jenkins构建,其中包含作业宿主: my_job/builds/$ rm -rf [1-9]* 这些旧版本在作业页面中仍然可见。 如何使用命令行删除它们? (在每个生成用户界面中没有“删除”按钮)看起来这已经添加到CLI,或者至少正在处理: 语法如下:java-jar-jenkins-cli.jar-shttp://my.jenkins.host 删除构建我的项目“1-7499”-username$user--password$password您需要手动执行此操作,而不
rm
的旧jenkins构建,其中包含作业宿主:
my_job/builds/$ rm -rf [1-9]*
这些旧版本在作业页面中仍然可见。
如何使用命令行删除它们?(在每个生成用户界面中没有“删除”按钮)看起来这已经添加到CLI,或者至少正在处理:
语法如下:
java-jar-jenkins-cli.jar-shttp://my.jenkins.host 删除构建我的项目“1-7499”-username$user--password$password
您需要手动执行此操作,而不是让Jenkins为您删除旧的构建吗
您可以更改作业配置,根据天数或生成数自动删除旧生成。不用再担心,也不用跟踪,詹金斯只是为你做的
- “管理Jenkins”==>“配置系统”
- 选中字段“主目录”(通常为/var/lib/jenkins)
/jenkins_home/jobs> rm -rf */builds/*
- “管理Jenkins”==>“从磁盘重新加载配置”
这里还有另一个选项:使用cURL远程删除构建。(将URL的开头替换为使用浏览器访问Jenkins的内容。) 上面删除了job myJob的构建#1到#56 如果在Jenkins实例上启用了身份验证,则必须提供用户名和API令牌,如下所示:
$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll
API令牌必须从Jenkins中的/me/configure页面获取。只需单击“显示API令牌…”按钮即可显示用户名和API令牌
编辑:正如yegeniy在下面的评论中指出的那样,可能需要将上面URL中的
doDeleteAll
替换为doDelete
,才能实现这一点,具体取决于配置。您可以通过使用Hudson API的Groovy脚本来实现。。访问你的詹金斯装置
http://localhost:38080/script.
例如,使用以下脚本删除所有项目的所有旧版本:
注意:如果使用指纹,请小心,您将丢失所有历史记录
导入hudson.model*
//对于每个项目
for(Hudson.instance.items中的项){
//检查作业是否未生成
如果(!item.isBuilding()){
System.out.println(“删除作业的所有生成”+item.name)
for(内置项.getBuilds()){
build.delete()
}
}
否则{
System.out.println(“正在跳过作业”+item.name+”,当前正在生成)
}
}
或用于清洁所有工作区:
导入hudson.model*
//对于每个项目
for(Hudson.instance.items中的项){
//检查作业是否未生成
如果(!item.isBuilding()){
println(“清除作业的工作区”+item.name)
项目.doDoWipeOutWorkspace()
}
否则{
println(“正在跳过作业”+项.名称+”,当前正在生成)
}
}
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()
}
}
}
导入jenkins.model.jenkins
hudson.model.hudson.instance.getView(“”).items.each(){
println it.fullDisplayName
def jobname=it.fullDisplayName
def item=hudson.model.hudson.instance.getItem(作业名)
def build=item.getLastBuild()
if(item.getLastBuild()!=null){
Jenkins.instance.getItemByFullName(jobname.builds.findAll){
it.number以下脚本清除旧版本的作业。如果手动删除版本,则应从磁盘重新加载配置:
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")
}
}
导入hudson.model*
for(Hudson.instance.items中的项){
如果(!item.isBuilding()){
println(“删除作业的旧版本”+item.name)
for(内置项.getBuilds()){
//删除除最后一个之外的所有
if(build.getNumber()
从脚本控制台运行此操作,但您需要更改作业名称:
def jobName = "name"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
def jobName=“我的工作名称”
def job=Jenkins.instance.getItem(作业名)
job.getBuilds().findAll{it.number<10}.each{it.delete()}
如果您有12个版本,这将清除0-9个版本,剩下12、11、10个版本。只需打开脚本控制台,此脚本将配置所有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
!/bin/bash
cd$HOME
对于$中的xml(find jobs-name config.xml)
做
sed-i的#.*30#'$xml
sed-i的#.*200#'$xml
完成
我发现,当您创建一个项目时,此选项非常有用。在正确设置之前,您会遇到多次失败。完成后,我想清除旧的错误版本,因为它们最终会发出噪音。此选项在哪里?我在Jenkins-1.5的版本中找不到它。它位于每个作业的配置中。请选择“放弃旧版本”lds复选框和选项可用于控制删除旧版本的方式。@ziggy您找不到它,因为它是一个需要首先安装的插件。我想使用此功能“”“更改作业配置以自动删除旧版本”。但它不起作用。我已经设置好了,保留了数千个旧版本。您没有提到从何处获取jenkins cli.jar
:您的jenkins安装将告诉您此页面上的位置:http://localhost:8080/cli/
。我应该在哪里安装jar文件?不能安装jar。只需将其放在文件中的某个位置即可stem并输入带有完整路径的命令(或在该目录中输入命令
def jobName = "MY_JOB_NAME"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().findAll { it.number < 10 }.each { it.delete() }
#!/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