2017-01-25 8 views
1

Я запускаю задание Flow Flow, которое выполняет несколько сборок параллельно, а затем использует Post-build Action для публикации HTML-отчетов.Получите номер сборки из другого задания в Jenkins как переменную

Как я могу получить номер сборки каждого из отдельных заданий в качестве переменной, чтобы я мог использовать, когда извлекал HTML-отчет?

EDIT

Это то, что мой параллельный код выглядит следующим образом:

parallel (
    { uarr = build("Baseline - Secure - UARR", param1: build.properties.get("number")) }, 
    { login = build("Baseline - Secure - Login", param2: build.properties.get("number")) } 
) 

И это то, что я пытался использовать при использовании публикации отчетов HTML для страницы индекса [с], но он не видит $ {param1} как переменную и пытается найти его буквально:

*Secure Baseline*Secure_UARR-${param1}.html 

Это то, что я использую в Maven построить работу, и это работает прекрасно на поиск отчета с правильным именем файла, который содержит номер сборки:

*Secure Baseline*Secure_UARR-${BUILD_NUMBER}.html 

Проблема заключается в том, если я использую эту же логику в параллельное задание Build Flow, он использует номер сборки этого задания, а не задание Maven, которое создает отчет. (Я надеюсь, что имеет смысл)

+0

Защиту п = билд («JOB_NAME», PARAM_1: «значение-1», PARAM_2: правда, ...) – Rik

+0

Но как я могу использовать эти параметры в действии Post-build? –

+0

Ага, вот что вы ищете. Я думаю, если вы хотите, чтобы вам пришлось сделать их переменными окружения – Rik

ответ

0

Вы можете хранить ссылки задания в переменной

parallel(
job1: { def n = build("JOB_NAME", PARAM_1: "value-1", PARAM_2: true, ...) } 
... 
) 

или даже хранить их в массив, если вам нравится

def jobs = [:] 

parallel(
    job1: { 
     def n1 = build("job1", param1: "value1", ...) 
     jobs["job1"] = n1.number 
    }, 
    job1: { 
     def n2 = build("job2", param1: "value1", ...) 
     jobs["job2"] = n2.number 
    }, 
    job1: { 
     def n3 = build("job3", param1: "value1", ...) 
     jobs["job3"] = n3.number 
    }, 
    jobm: { 
     def nm = build("jobm", param1: "value1", ...) 
     jobs["jobm"] = n1.number 
    } 
) 

И тогда вы можете прочитать карта, если вы хотите

Следующие answer показывает, как экспортировать это как переменные окружения.

def buildEnv = build.getEnvVars(); 
buildEnv.putAll(jobs) 
import org.jenkinsci.plugins.envinject.EnvInjectPluginAction 
def envInjectAction = build.getAction(EnvInjectPluginAction.class); 
envInjectAction.overrideAll(buildEnv) 

Вы можете использование его в вашем шаге postbuild (ы) как $job1, $job2, ..., $jobm.

Это resolved bug предполагает, что вы затем можете использовать его в HTML-publisher plugin (я не Верри знакомы с плагином)

+0

Источник также предлагает его (не отследил его полностью) https://github.com/jenkinsci/htmlpublisher-plugin/blob/cc21888701a965e5a47b23dbf57d55825166de17/src/main/java/htmlpublisher/HtmlPublisher .java # L150 – Rik

Смежные вопросы