Как заставить работу Jenkins/Hudson следить за некоторыми другими работами и решать, строить или нет?

ПРОБЛЕМА

Учитывая, что все задания имеют строку LEVEL_X в имени задания, где X — число > 1. Я хочу, чтобы каждое задание с X = n отслеживало каждое задание с X = n-1 и начинало сборку, если каждое из них завершено успешно. И я хочу, чтобы задание с X = n наблюдало за другими заданиями с интервалом в 1 минуту.

Во-первых, мне интересно узнать, как это сделать лучше всего, во-вторых, мне нужно решение, если его можно реализовать с помощью небольшого скрипта, может быть, скрипта groovy, который можно запустить в system groovy script с помощью GROOVY PLUGIN.


person Gogi    schedule 27.05.2012    source источник


Ответы (1)


Вот несколько советов и фрагментов кода:

  • В http://<jenkins-server>/script есть консоль Groovy Script, которая поможет вам в отладке ваших скриптов.
  • Вот ссылка на Jenkins Java API.
  • Фрагмент кода, который выводит все имена заданий:

    def hi = hudson.model.Hudson.instance
       hi.getItems(hudson.model.Project).each {project ->
       println(project.displayName)
    }
    
  • Фрагмент кода, извлекающий n из LEVEL_n (реализован как замыкание):

    def level = { name ->
      def ret = 0
      name.eachMatch(~'LEVEL_([1-9]+[0-9*])', {ret = it[1].toInteger()})
      return ret
    }
    
  • Фрагмент кода, который получает статусы для всех последних сборок:

    def hi = hudson.model.Hudson.instance
    hi.getItems(hudson.model.Project).each {project ->
      println(project.lastBuild.result)
    }
    
  • Ссылка на метод, который запускает сборку.

Примечание: все становится немного сложнее, если вы используете сборки Matrix. Но пока вы этого не сделаете, этого должно быть достаточно.

person malenkiy_scot    schedule 28.05.2012
comment
+1 за URL-адрес сценария сервера jenkins - заводная консоль узла бесполезна, поскольку она не импортирует все классы. - person Epu; 30.03.2013
comment
В заводной консоли я обнаружил, что полный скрипт/команда должны быть в одной строке, иначе возникнут различные синтаксические ошибки. например фрагмент названия задания работает для меня так: '''def hi = hudson.model.Hudson.instance; hi.getItems(hudson.model.Project).each {project -> println(project.displayName) }''' - person gaoithe; 30.08.2016
comment
просто к вашему сведению для людей; некоторые из этих методов API должны иметь scriptApproval для запуска в задании. - person jxramos; 04.12.2018