【问题标题】:Aborting a Jenkins job from within the executing shell在执行的 shell 中中止 Jenkins 作业
【发布时间】:2014-11-26 05:35:53
【问题描述】:

首先是一些上下文:

目前我有一个 Jenkins 作业设置来运行一个 perl 脚本,然后在它运行的任何机器上构建源代码。

根据我对 Jenkins 行为的观察,如果我从 UI 中止正在运行的 Jenkins 作业,我的 perl 脚本的所有相关线程(单个或并行)都会在相应的从机上被杀死。

现在我想复制该行为,即中止 Jenkins 作业,如果在我的构建步骤中我的脚本产生了一些错误。不幸的是,我无法轻松修改或更新正在启动的 perl 脚本(我不是所有者),因此我必须找到一个解决方案,如果可能的话,当然需要对 perl 脚本本身进行最少的修改。

我需要中止它的原因是因为我们不想在产生错误的区域/存储库/位置之后构建任何下游依赖项。

我能否自动化这种行为?也许通过扫描 perl 脚本的日志来寻找错误?或者类似的东西?

任何线索将不胜感激。

如果需要更多信息/说明,请告诉我。

谢谢。

编辑:

我找到了一个有趣的解决方案,它实际上中止了这项工作。通过运行以下命令:

curl --request POST  -u <username>:<password> "%JENKINS_URL%/job/%JOB_NAME%/lastBuild/stop"

当然,我现在必须想办法在当前正在编译的区域中发现任何错误时启动此命令。

我觉得我已经完成了一半。

【问题讨论】:

    标签: shell jenkins abort


    【解决方案1】:

    xshell plugin 可以在运行时解析日志文件,如果遇到正则表达式(或花费太长时间),可能会使作业失败。这个插件取代了shell步骤。

    免责声明:我把这个改变放进去,我应该更新维基

    【讨论】:

    • 谢谢!我会看看这是否是我需要的。我会玩弄它,看看它是否可以作为我当前执行 shell 构建的附加命令
    • 所以我写了一个小的 *.sh 文件,它回显从 1 到 100 的数字。如果我将值 25 添加到“Regex to kill job”,它似乎允许脚本完成并然后它说“在输出中匹配 。终止”我需要在找到 25 值后立即终止工作。如果允许脚本完成然后它说终止,这似乎有点毫无意义。它仍然将构建标记为 FINISHED: SUCCESS...
    • 我也做了同样的事情,但是在我的循环中放了一个 sleep 1 就可以了。在内部,它会在轮询日志之间休眠 2 秒 - 所以不要破坏 CPU。我猜你发现了一个极端情况,它试图杀死进程但它已经退出了。我会调查的
    • 我找到了另一个解决方案,它更多地反映了我想做的事情。我在原始帖子中添加了一个编辑。
    猜你喜欢
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多