Я пытаюсь написать плагин Jenkins, который может автоматически прервать сборку, если эта сборка запускается в праздничный день (или только определенный входной день/с). Пользователь может настроить дни, и каждое задание получает флажок, который позволяет пользователю решить, хотят ли они, чтобы их работа прерывалась в отпуске или нет. В настоящее время мой плагин расширяет JobProperty и использует глобальную конфигурацию, где у меня есть список вложенных в черный список дат. Если сегодня в моем списке занесенных в черный список дней, то я не хочу, чтобы моя работа выполнялась. Плагин «работает», но с несколькими раздражающими оговорками.Вызов build.doStop() в prebuild не останавливается достаточно быстро
Моя основная проблема заключается в том, что я могу только СБЕРЕЖАТЬ сборку, если она срабатывает в день, который является одним из моих дней с черным списком. Это проблема для меня, потому что нет реальной ошибки. Работа работает так, как должно быть, и я не хочу получать электронные письма с ошибками только потому, что задание было остановлено в тот день, когда я не хотел его запускать (например: праздник)
Когда мой плагин решает прервать сборку, я хочу, чтобы я мог закончить работу с статусом «Прерванный». (Фактически - я хотел бы иметь возможность контролировать состояние и оставлять его в качестве потенциального параметра.)
Ниже представлен мой код prebuild().
@Override
public boolean prebuild(AbstractBuild build, BuildListener listener) {
boolean stopped = false;
if(checkIfClosed) {
LocalDate today = LocalDate.now();
listener.getLogger().println("Checking the date for " + DateFormats.yyyyMMdd.print(today));
if (getDescriptor().getUseCalculatedDateChecker()) {
if (!NyseHolidayChecker.isMarketOpen(today)) {
listener.getLogger().println("Closed (From auto calculation)!");
stopped = true;
}
}
if (getDescriptor().getListOfClosedDates() != null && !getDescriptor().getListOfClosedDates().isEmpty()) {
if (getDescriptor().getListOfClosedDates().contains(DateFormats.yyyyMMdd.print(today))) {
listener.getLogger().println("Closed. Date is in the Closed Date List. " +
"If this is wrong check global configuration.");
stopped = true;
}
}
}
if(stopped) {
try {
if(build.doStop() == null) {
return false;
}
} catch (IOException e) {
listener.getLogger().println(e.getMessage());
return false;
} catch (ServletException e) {
listener.getLogger().println(e.getMessage());
return false;
}
//throw new RuntimeException("This job has been told not to run when marked as Closed!");
//throw new AbortException("This job has been told not to run when marked as Closed!");
}
return true;
}
Я пробовал несколько разных способов, чтобы заставить работу немедленно прекратить работу и не иметь сборки, помеченной как неудачная.
doc говорит мне, что я должен бросить AbortException, но это, кажется, не поддерживается функцией я переопределяя.
Я также попытался вызвать doStop(), но мой первый шаг сборки (из 2) по-прежнему работает хотя бы немного. Это нежелательно, потому что я никогда не буду знать, в каком состоянии моя работа будет, когда она будет прервана (она могла бы уже sshed где-то и убил процесс ... или сделал что-то живое и т.д.)
Что я пропал без вести? Я чувствую, что я взламываю, чтобы получить то, что мне нужно. Я надеюсь, что кто-то может указать мне в правильном направлении, как лучше всего это сделать.