从批处理脚本中引发 Jenkins 作业中止
Posted
技术标签:
【中文标题】从批处理脚本中引发 Jenkins 作业中止【英文标题】:Raise Abort in Jenkins Job from Batch script 【发布时间】:2018-05-15 06:42:30 【问题描述】:我有一份 Jenkins 工作,负责 Git 同步和构建源代码。
我添加并创建了一个“构建后任务”选项。
在“构建后任务”中,我正在控制台输出中搜索关键字“TIMEOUT:”(这部分已完成),如果关键字匹配,我想将作业声明为失败和中止。
如果关键字匹配,我如何从批处理脚本中将作业提升/声明为已中止。 echo ABORT
之类的东西?
【问题讨论】:
您是否尝试过:currentBuild.result = 'ABORTED'
在您的后期构建任务中?
@Sagar 是 currentBuild.result = 'ABORTED'
批处理脚本吗?
不。它的 Jenkins 属性
@Sagar 'currentBuild.result' 未被识别为内部或外部命令
【参考方案1】:
如果您想将其标记为“FAIL”会更容易
只需退出 1 即可。
在后期构建任务插件中实现“中止”是很棘手的,使用 Groovy 后期构建插件要容易得多。
groovy post build 提供了丰富的功能来帮助你。
如匹配函数:
def matcher = manager.getLogMatcher(".*Total time: (.*)\$")
if(matcher?.matches())
manager.addShortText(matcher.group(1), "grey", "white", "0px", "white")
中止功能:
def executor = build.executor ?: build.oneOffExecutor;
if (executor != null)
executor.interrupt(Result.ABORTED)
兄弟,
提姆
【讨论】:
def matcher = manager.getLogMatcher(".*Building remotely.*") if(matcher?.matches()) def executor = build.executor ?: build.oneOffExecutor; if (executor != null) executor.interrupt(Result.ABORTED)
这是正确的做法吗?我得到 groovy.lang.MissingPropertyException: No such property: build for class: groovy.lang.Binding
尝试使用 manager.build 代替 build,详情请参考wiki.jenkins.io/display/JENKINS/Groovy+Postbuild+Plugin【参考方案2】:
您可以简单地退出流程并提出您想要的错误代码:
echo "Timeout detected!"
exit 1
Jenkins 应该检测到错误并将构建设置为失败。
错误代码必须在 1 到 255 之间。您可以选择任何您想要的,只是要注意一些代码是保留的: http://tldp.org/LDP/abs/html/exitcodes.html#EXITCODESREF
您也可以考虑使用超时插件: https://wiki.jenkins.io/display/JENKINS/Build-timeout+Plugin
另一种选择是构建对BUILD ID URL/stop
的查询。这正是您手动中止构建时所做的事情。
echo "Timeout detected!"
curl yourjenkins/job_name/11/stop
【讨论】:
我不想让构建失败。我想把它变成 Aborted。 您可以为此使用专用插件。或者您可以向您的buildurl/stop 发送请求。它会中止你的构建。以上是关于从批处理脚本中引发 Jenkins 作业中止的主要内容,如果未能解决你的问题,请参考以下文章
即使 ROBOCOPY 命令在 BAT 脚本中成功执行,JENKINS 作业也会失败
SQL Server 在触发器中引发错误“触发器中的事务注定要失败。批处理已中止。”