我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。
有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。
我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。
有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。
当前回答
在这种情况下,我通常使用jenkins-cli。你可以从http://your-jenkins-host:PORT/cli上下载这个罐子。然后运行
java -jar jenkins-cli.jar delete-builds name_of_job_to_delete hanging_job_number
辅助信息:
你也可以通过350:400这样的构建范围。 一般帮助可通过运行
java -jar jenkins-cli.jar help
上下文命令帮助删除构建by
java -jar jenkins-cli.jar delete-builds
其他回答
我使用监控插件来完成这项任务。安装插件后
转到管理Jenkins >监控Hudson/Jenkins master 展开线程的细节,即右边的蓝色小链接 搜索挂起的作业名称 线程的名称将像这样开始 master的Executor #2:执行<your-job-name> #<build-number> 单击所需工作所在行的表格中最右边的红色圆形按钮
Alexandru Bantiuc的回答很好地让我停止了构建,但我的执行人仍然很忙。我可以使用以下命令清除繁忙的执行程序状态
server_name_pattern = /your-servers-[1-5]/
jenkins.model.Jenkins.instance.getComputers().each { computer ->
if (computer.getName().find(server_name_pattern)) {
println computer.getName()
execList = computer.getExecutors()
for( exec in execList ) {
busyState = exec.isBusy() ? ' busy' : ' idle'
println '--' + exec.getDisplayName() + busyState
if (exec.isBusy()) {
exec.interrupt()
}
}
}
}
如果“X”按钮不起作用,作业被卡住,那么只需删除特定的版本号。这将解放遗嘱执行人。
在我的例子中,即使工作完成了,它仍然停留在执行者几个小时。删除构建对我来说是有效的。
这对我来说每次都很有效:
Thread.getAllStackTraces().keySet().each() {
if (it.name.contains('YOUR JOBNAME')) {
println "Stopping $it.name"
it.stop()
}
}
感谢funql.org
你可以复制作业,然后删除旧的。如果你丢失了旧的构建日志没有关系的话。