Jenkins - Как установить переменные среды с помощью подключаемого модуля Groovy Postbuild

Я много раз просматривал эту проблему в Google и не нашел ничего, что помогло бы решить мою проблему.

Я пытаюсь проанализировать вывод консоли задания Jenkins и установить переменную среды. Мне понадобится эта переменная в моем родительском задании, которое будет выполняться на другом ведомом устройстве.

Я мог бы получить нужное строковое значение из вывода консоли, используя

def build = Thread.currentThread().executable    
def matcher = manager.getLogMatcher(".*myEnvironemntValue: (.*)")

if(matcher != null && matcher.matches()) {
    log('found my value')
    myEnvironemntValue= matcher.group(1).substring(0)
    def pa = new ParametersAction([
          new StringParameterValue("MY_ENV_VALUE", myEnvironemntValue)
    ])
    build.addAction(pa)
    manager.addInfoBadge(myEnvironemntValue)
}

Обновлять

У меня есть задание buildflow (родительское задание), из которого я буду вызывать другие дочерние задания с помощью сценария DSL, например,

def b1 = build("child_job1", NODE: node)
def b2 = build("child_job2", NODE: node)

Дочернее задание child_job1 и child_job2 являются многофазными заданиями, они по очереди вызывают другие задания на разных этапах, например phase1_job, phase2_job и phase3_job

После того, как задание phase3_job будет выполнено, я хотел бы получить конкретное значение из его консоли.


Может ли кто-нибудь помочь в решении этой проблемы? Я могу использовать другие плагины, если они помогают мне получить значение консоли и установить его как переменную среды.


person abdulH    schedule 20.07.2016    source источник


Ответы (1)


Следует отметить, что сборка Groovy Post выполняется на главном сервере, поэтому установка переменных среды может оказаться не тем, что вам нужно.

При этом, вероятно, существует множество способов передать эту информацию родителям. Ожидает ли родительская работа, пока ее завершит ребенок? Если это так, вы можете сохранить переменную среды как артефакт и вытащить ее, используя модель Jenkins, http или даже файловую систему (если родительский элемент запущен на главном сервере или вы обращаетесь к нему через родительский Groovy Postbuild).

Решило бы это вашу проблему? Если нет, не могли бы вы подробнее рассказать, как все устроено, и, возможно, привести нам пример?

person Daniel Omoto    schedule 21.07.2016
comment
Спасибо за ответ. Да, родительское задание ожидает завершения выполнения дочернего задания. Я добавил обновление к своим вопросам - person abdulH; 21.07.2016
comment
Спасибо за разъяснения! Как насчет использования плагина копирования артефакта для копирования последнего успешного артефакт сборки в самом конце dsl? Например, что-то вроде того, что делает этот парень. ? - person Daniel Omoto; 22.07.2016
comment
Я не могу скопировать артефакты, потому что из Groovy script, если я создаю файл, он создается на сервере, а не на моем подчиненном узле. Более того, я буду вызывать несколько дочерних заданий из моих родительских заданий, и все они будут иметь один и тот же отличный сценарий. - person abdulH; 22.07.2016
comment
Извините, я снова могу запутаться ... Вы пытаетесь перенести артефакты из одного выполненного задания в рабочую область другого задания? Тогда плагин Copy Artifacts должен справиться с этим. Он выполняется как этап сборки внутри задания. Он копирует артефакты из последнего успешного, неудачного, нестабильного и т. Д. Одного задания в рабочую область подчиненного устройства другого. Итак, если вы добавите этот этап сборки в child_job2 после этапа сборки phase3_job, вы можете получить артефакты phase3_job и перетащить их в child_job2. - person Daniel Omoto; 22.07.2016
comment
Что касается сохранения артефакта из phase3_job, вы правы, выполнение этого в postbuild поместит его на сервер, а не на подчиненное устройство. Вы можете сохранить его на этапе сборки? Например, в таком шаге сценария, как echo ENV_WORLD ›my_file_on_the_slave.txt. Модель Дженкинса также имеет возможность сохранять файлы непосредственно на ведомом устройстве от родителя, используя что-то вроде build.getWorkspace (). CreateTextTempFile (temp`` hello world) - person Daniel Omoto; 22.07.2016
comment
Если приведенное выше не отвечает на ваш вопрос, мне может потребоваться более подробное объяснение того, что вы делаете, чтобы дать вам лучший ответ. Прости! - person Daniel Omoto; 22.07.2016