Как отказаться от старых сборок в Jenkins, основываясь на их статусе завершения?

#jenkins

Вопрос:

У меня есть задание Дженкинса, настроенное для опроса на предмет изменений в репозитории git каждые 10 минут. Если он не находит его (99/100 раз, вот что происходит), он рано прерывает сборку и помечает ее как НЕСТАБИЛЬНУЮ . Если он находит изменение, он проходит через него и отмечает его как УСПЕХ, сохраняя свои артефакты. Я знаю, что могу использовать плагин для удаления старых сборок, но он допускает только эти опции: Параметры Дженкинсакак вы можете видеть, нет возможности фильтровать по статусу завершения.

В идеале я хочу удалить все, кроме последней НЕСТАБИЛЬНОЙ сборки, и сохранить все УСПЕШНЫЕ или НЕУДАЧНЫЕ сборки и их артефакты. Если это невозможно, то также сработает простое удаление всех НЕСТАБИЛЬНЫХ сборок.

Примечание: Я использую декларативный конвейер

Комментарии:

1. Какой проект вы используете-конвейерный или фристайл-проект? Если конвейер, то это декларативный конвейер или сценарий?

2. @HussainK Извините, забыл включить это. Это декларативный конвейер.

Ответ №1:

Одной из возможностей было бы отказаться от сборки программно. Получите свой объект работы с
def job = Jenkins.instance.getItem("JobName")
Поскольку вы используете декларативный конвейер, job он имеет тип WorkflowJob [1], и вы можете получить все его сборки с
job.getBuilds() . Теперь вы можете проверить результат каждой сборки ( WorkflowRun объекты [2]) и решить, хотите ли вы удалить ее или нет. Должно сработать что-то вроде следующего

 def job = Jenkins.instance.getItem("JobName")
job.getBuilds().each { 
  if(it.result.toString() == "UNSTABLE") {
    it.delete()
    job.save()
  }
}
 

Вы можете создать новое задание, которое выполняет приведенный выше код и запускается после YourJob создания.

[1] https://javadoc.jenkins.io/plugin/workflow-job/org/jenkinsci/plugins/workflow/job/WorkflowJob.html
[2] https://javadoc.jenkins.io/plugin/workflow-job/org/jenkinsci/plugins/workflow/job/WorkflowRun.html

Комментарии:

1. Может ли этот фрагмент кода также быть включен в post { always { } } мой файл Дженкинса или, что еще лучше post { unstable { } } , чтобы избежать if утверждения?

2. Я еще не пробовал этого. Я не уверен, что это хорошая идея, так как это означало бы, что сборка все еще работает ( UNSTABLE ) и пытается удалить себя.