自定义 Jenkins Stop [x] 按钮功能

Customize Jenkins Stop [x] button function

我的 Jenkins 构建生成了许多它无法查看的作业。

如果我通过按下停止按钮中止构建,作业会继续,直到我开始一个新的构建,这会删除工作区,导致所有作业失败,因为目录不再存在。

这并不理想,所以我想知道是否可以向停止按钮添加一些功能来终止这些作业?

注意,我指的是this button

我刚创建:

  • A Freestyle 项目 BuildExecute shell → 命令:

    #!/bin/bash
    
    while true
    do
      echo "  SO-33348825-sub-1 running eternally..."
      sleep 10
    done
    
  • 一个 Workflow 项目 工作流程 → 定义 → 脚本:

    println("  SO-33348825-main-workflow started")
    build("SO-33348825-sub-1")
    println("  SO-33348825-main-workflow ended")
    

启动和中止后 SO-33348825-main-workflow 的日志:

...
  SO-33348825-main-workflow started
Running: Building SO-33348825-sub-1
Starting building project: SO-33348825-sub-1
Aborted by anonymous
Running: End of Workflow
java.lang.Exception: ABORTED
    at org.jenkinsci.plugins.workflow.support.steps.build.BuildTriggerListener.onCompleted(BuildTriggerListener.java:20)
    at hudson.model.listeners.RunListener.fireCompleted(RunListener.java:201)
    at hudson.model.Run.execute(Run.java:1786)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:408)
Finished: ABORTED

启动和中止后 SO-33348825-sub-1 的日志 SO-33348825-main-workflow:

Started by upstream project "SO-33348825-main-workflow" build number 1
...
[workspace] $ /bin/bash /tmp/hudson1610853144078403465.sh
  SO-33348825-sub-1 running eternally...
  SO-33348825-sub-1 running eternally...
  SO-33348825-sub-1 running eternally...
Build was aborted
Calling workflow was cancelled
...
Finished: ABORTED

结论

如果工作流构建被中止,则由工作流项目启动的构建也会被中止。

对于外部作业(顺便说一句,可以使用作业类型 External Job 进行监控),您可以执行以下操作:

  • 创建一个 parameterized 自由式作业。

  • 配置版本号。作为参数输入,例如NUMBER_OF_BUILD_TO_ABORT,在作业开始时。

  • 添加执行shell执行Groovy脚本构建步骤,其中包含:

     
    ... code to kill the external jobs ...
    
    ... code that calls http://jenkins/job/<job name>/${NUMBER_OF_BUILD_TO_ABORT}/stop ...