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

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


当前回答

以下是我在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。

其他回答

第一个提议的解决方案非常接近。如果使用stop()而不是interrupt(),它甚至会杀死在groovy系统脚本中无休止地运行的失控线程。这将杀死任何构建,任何工作。 代码如下:

Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {  
      println "Stopping $it.name"
      it.stop()
    }
}

我使用监控插件来完成这项任务。安装插件后

转到管理Jenkins >监控Hudson/Jenkins master 展开线程的细节,即右边的蓝色小链接 搜索挂起的作业名称 线程的名称将像这样开始 master的Executor #2:执行<your-job-name> #<build-number> 单击所需工作所在行的表格中最右边的红色圆形按钮

如果你有一个Multibranch Pipeline-job(并且你是Jenkins-admin),在Jenkins脚本控制台中使用这个脚本:

Jenkins.instance
.getItemByFullName("<JOB NAME>")
.getBranch("<BRANCH NAME>")
.getBuildByNumber(<BUILD NUMBER>)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

从https://issues.jenkins - ci.org/browse/jenkins - 43020

如果你不确定作业的全名(路径)是什么,你可以使用下面的代码片段列出所有项的全名:

  Jenkins.instance.getAllItems(AbstractItem.class).each {
    println(it.fullName)
  };

从https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs

我看了Jenkins源代码,似乎我要做的是不可能的,因为停止一个作业似乎是通过线程中断完成的。我不知道为什么这个工作被搁置了。

编辑:

就业势不可挡的可能原因:

如果Jenkins陷入了无限循环,它就永远不能中止。 如果Jenkins在Java虚拟机中进行网络或文件I/O(例如长时间的文件复制或SVN更新),则不能中止。

进入蓝海用户界面。 试着从那里阻止他。