我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。
有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。
我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。
有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。
当前回答
进入蓝海用户界面。 试着从那里阻止他。
其他回答
上面的答案对我来说几乎是可行的,但我有一个主要问题:由于Jenkins重启的时间特别糟糕,我有非常多的僵尸作业(大约100个),所以手动查找每个僵尸作业的作业名称和构建号,然后手动杀死它们是不可可行的。以下是我如何自动找到并杀死僵尸工作的方法:
Jenkins.instance.getItemByFullName(multibranchPipelineProjectName).getItems().each { repository->
repository.getItems().each { branch->
branch.builds.each { build->
if (build.getResult().equals(null)) {
build.doKill()
}
}
}
}
该脚本遍历所有作业的所有构建,并使用getResult().equals(null)来确定作业是否已经完成。在队列中但尚未开始的构建将不会被迭代(因为该构建不会在job.builds中),并且已经完成的构建对于build. getresult()将返回非null的值。合法运行的作业的构建结果也会为null,因此在运行此作业之前,请确保没有不想终止的正在运行的作业。
在Multibranch Pipeline项目中,多个嵌套循环主要用于发现每个存储库的每个分支/PR;如果你没有使用Multibranch pipeline,你可以直接使用Jenkins.instance.getItems().each这样的东西来循环所有的作业。
以下是我在2.100版本中使用Blue Ocean解决这个问题的方法
我唯一安装的插件是bitbucket。 我只有一个节点。
ssh到我的Jenkins盒子里 cd ~ /。詹金斯(我放詹金斯的地方) cd工作/ < job_name > /分支/ < problem_branch_name > /构建 Rm -rf <build_number>
在此之后,您可以选择在nextBuildNumber中更改数字(我这样做) 最后,我重新启动jenkins (brew services restart jenkins),这一步显然会有所不同,这取决于您如何管理和安装jenkins。
这些方法对我来说都没用。我不得不重新启动安装服务器的机器。这种杀不死的工作现在已经没有了。
如果你有一个不可阻挡的管道作业,试试下面的方法:
通过单击构建进度条旁边的红色X来终止作业 点击构建上的“Pause/resume”暂停 再次单击“暂停/恢复”以恢复构建
Jenkins将意识到该作业应该终止并停止构建
我编写的一个名为jkillthread的实用程序可以用来停止任何Java进程中的任何线程,只要您能够以相同的帐户登录到运行该服务的机器。