从批处理脚本中引发 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 作业中止的主要内容,如果未能解决你的问题,请参考以下文章

如何创建参数化的Jenkins作业?

即使 ROBOCOPY 命令在 BAT 脚本中成功执行,JENKINS 作业也会失败

SQL Server 在触发器中引发错误“触发器中的事务注定要失败。批处理已中止。”

Jenkins 非特权用户如何从工作区下载文件?

从带有参数的python脚本执行python文件jenkins]

确保脚本在用户中止时退出