我们的Jenkins服务器有一个已经运行了三天的作业,但是没有做任何事情。单击角落里的小X没有任何作用,控制台输出日志也没有显示任何内容。我在我们的构建服务器上检查过,该作业实际上似乎根本没有在运行。

有没有办法告诉jenkins工作已经“完成”了,比如编辑一些文件或锁之类的?因为我们有很多任务,所以我们并不想重新启动服务器。


当前回答

不需要使用脚本控制台或其他插件,您可以通过在浏览器中的构建URL后输入/stop、/term或/kill来简单地中止构建。

从上述链接逐字引用:

管道作业可以通过向URL发送HTTP POST请求来停止 构建的端点。 <BUILD ID URL>/stop -中止管道。 <BUILD ID URL>/term -强制终止构建(应该只在stop不起作用时使用。 <BUILD ID URL>/kill -硬杀死一个管道。这是阻止管道的最具破坏性的方法,只能作为最后一种方法 度假胜地。

其他回答

构建超时插件在这种情况下可以派上用场。如果花费太长时间,它会自动终止工作。

不需要使用脚本控制台或其他插件,您可以通过在浏览器中的构建URL后输入/stop、/term或/kill来简单地中止构建。

从上述链接逐字引用:

管道作业可以通过向URL发送HTTP POST请求来停止 构建的端点。 <BUILD ID URL>/stop -中止管道。 <BUILD ID URL>/term -强制终止构建(应该只在stop不起作用时使用。 <BUILD ID URL>/kill -硬杀死一个管道。这是阻止管道的最具破坏性的方法,只能作为最后一种方法 度假胜地。

我编写的一个名为jkillthread的实用程序可以用来停止任何Java进程中的任何线程,只要您能够以相同的帐户登录到运行该服务的机器。

在https://my-jenkins/script上使用脚本控制台

import hudson.model.Job
import org.jenkinsci.plugins.workflow.job.WorkflowRun

Collection<Job> jobs = Jenkins.instance.getItem('My-Folder').getAllJobs()
for (int i = 0; i < jobs.size(); i++) {
  def job = jobs[i]
  for (int j = 0; j < job.builds.size(); j++) {
    WorkflowRun build = job.builds[j]
    if (build.isBuilding()) {
      println("Stopping $job ${build.number}")
      build.setResult(Result.FAILURE)
    }
  }
}

你可以复制作业,然后删除旧的。如果你丢失了旧的构建日志没有关系的话。