【问题标题】:Handle technical error in Jenkins Step (Jenkins pipeline)处理 Jenkins Step(Jenkins 管道)中的技术错误
【发布时间】:2017-11-29 13:01:26
【问题描述】:
一个步骤调用了一个 shell 脚本(例如,在测试服务器上安装一个工件)并且由于技术原因(网络不工作、数据库崩溃等)而失败。可能的反应:
使整个作业失败。这不是一个好主意,因为这样就需要无缘无故地重复前面的步骤(这些步骤可能包括手动步骤)。
在 e.g. 之后重试该步骤5分钟的等待。有时可以解决问题,但如果问题是由错误配置引起的,也可能导致死循环。
询问用户是继续还是中止。最灵活但需要(意外)使用交互的方法。
Jenkins 有对此的标准解决方案吗?
【问题讨论】:
标签:
jenkins
jenkins-pipeline
【解决方案1】:
让整个工作失败。这不是一个好主意,因为这样就需要无缘无故地重复前面的步骤(这些步骤可能包括手动步骤)。
这取决于您如何对问题的严重性进行排名。我个人会说,如果您有任何类型的构建问题,请将其记录下来,失败并向需要知道的人发送通知。但是,如果您觉得这太过分了,您可能想尝试其他方法。
在 e.g. 之后重试该步骤5分钟的等待。有时可以解决问题,但如果问题是由错误配置引起的,也可能导致无限循环。
您可以在 Jenkinsfile 中 set a timeout 放弃,比如一个小时,或者您认为这项工作需要多长时间。这样你就可以重试几次,如果卡住了,你肯定会终止工作。
询问用户是继续还是中止。最灵活但需要(意外)使用交互的方法。
用户交互不是一个很好的选择,尤其是当您不知道它何时会发生或者您的工作计划在晚上 10 点到凌晨 5 点之间运行时。
在所有选项中,听起来最适合您的可能是第二个;重试几次,如果不起作用,则记录发生的情况,失败并通知某人。这应该涵盖您的零星技术问题。此外,如果重试不起作用,则可能表明有更大的问题需要解决。