自定义 Jenkins Stop [x] 按钮功能
Customize Jenkins Stop [x] button function
我的 Jenkins 构建生成了许多它无法查看的作业。
如果我通过按下停止按钮中止构建,作业会继续,直到我开始一个新的构建,这会删除工作区,导致所有作业失败,因为目录不再存在。
这并不理想,所以我想知道是否可以向停止按钮添加一些功能来终止这些作业?
注意,我指的是this button
我刚创建:
A Freestyle 项目 Build → Execute 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 ...
我的 Jenkins 构建生成了许多它无法查看的作业。
如果我通过按下停止按钮中止构建,作业会继续,直到我开始一个新的构建,这会删除工作区,导致所有作业失败,因为目录不再存在。
这并不理想,所以我想知道是否可以向停止按钮添加一些功能来终止这些作业?
注意,我指的是this button
我刚创建:
A Freestyle 项目 Build → Execute 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 ...