我需要超时功能的自定义行为。例如,当我使用时:
timeout(time: 10, unit: 'MINUTES') {
doSomeStuff()
}
它终止doSomeStuff()函数。
我想要实现的不是终止函数的执行,而是每隔10分钟调用一次另一个函数,直到doSomeStuff()执行完成。 我无法使用Jenkins的Build-timeout插件,因为我需要将此行为应用于管道。 任何帮助将不胜感激。
答案 0 :(得分:0)
如果其他人有相同的问题:经过研究后,我想到解决我的问题的唯一方法是修改jenkins管道的notification plugin,以添加新字段会包含时间值(以分钟为单位),以延迟url的调用。在调用url的代码本身中,我将这些行放入新线程中,并在执行其余代码之前让该线程休眠所需的时间。像这样:
@Override
public void onStarted(final Run r, final TaskListener listener) {
HudsonNotificationProperty property = (HudsonNotificationProperty) r.getParent().getProperty(HudsonNotificationProperty.class);
int invokeUrlTimeout = 0;
if (property != null && !property.getEndpoints().isEmpty()){
invokeUrlTimeout = property.getEndpoints().get(0).getInvokeUrlTimeout();
}
int finalInvokeUrlTimeout = invokeUrlTimeout;
new Thread(() -> {
sleep(finalInvokeUrlTimeout * 60 * 1000);
Executor e = r.getExecutor();
Phase.QUEUED.handle(r, TaskListener.NULL, e != null ? System.currentTimeMillis() - e.getTimeSpentInQueue() : 0L);
Phase.STARTED.handle(r, listener, r.getTimeInMillis());
}).start();
}
也许不是最好的解决方案,但它对我有用,我希望它对其他人也有帮助。