2016-11-25 4 views
1

Фон

Предположим, у меня есть две работы, одна «Трубопроводная работа» и «Строительная работа». «Трубопроводное задание» работает на хозяине и, конечно же, является конвейером (с использованием groovy). Затем для части сборки в конвейере я использую ведомый, работающий в Windows, «Build Job», который отвечает за создание чего-то, что я не могу сделать для мастера. Мастер также работает в Windows, но не хватает какого-либо программного обеспечения, необходимого для конкретной сборки.Дженкинс Трубопровод: Получить сборку от ведомого агента

Вопрос

У меня есть заводной сценарий, который выглядит примерно так:

#!groovy 
node { 
    stage('Environment Preparation') { 
     // fetches stuff and sets up the environment on master 
    } 
    stage('Unit Testing') { 
     // some testing 
    } 
    stage('Build on Slave') { 
     def slaveJob = build job: 'BuildJob' 
    } 
} 

Он отлично работает, где «BuildJob» является «Ограничить где этот проект может быть запущен», то есть на раб.

Моя проблема заключается в том, что я хочу, чтобы выходные данные «BuildJob» печатались в журналах конвейера. У вас есть некоторые умные способы, как это можно сделать? Я открыт для всего, поэтому, если вы знаете более умные способы запустить «BuildJob» и т. Д., Я очень хочу здесь.

Спасибо!

ответ

2

EDITED Вы должны одобрить то, что вы хотите получить при утверждении сценария. Не уверен, что вы действительно любили getRawBuild, но это сработало.

Search through console output of a Jenkins job

#!groovy 
node { 
    stage('Environment Preparation') { 
     // fetches stuff and sets up the environment on master 
    } 
    stage('Unit Testing') { 
     // some testing 
    } 
    stage('Build on Slave') { 
     def slaveJob = build job: 'BuildJob' 
     println slaveJob.rawBuild.log 
    } 
} 

jenkinsurl/scriptApproval/Вы одобряете следующее:

method hudson.model.Run getLog 
method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild 
+0

unfortunatly Я получаю "* org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: неклассифицированное поле org.jenkinsci.plugins.workflow.support.steps.build.Журнал RunWrapper * "при попытке вашего решения –

+0

Белые списки: https://github.com/jenkinsci/workflow-support-plugin/blob/master/src/main/java/org/jenkinsci/plugins/workflow/support/steps /build/RunWrapper.java – MaTePe

+0

Да, okey, это может сработать, но у меня нет времени, чтобы вернуться и протестировать его сейчас. Спасибо за ваше время! –

1

Ну, иногда, задавая вопрос, вы задумываетесь с другой точки зрения.

Надеюсь, кому-то это поможет. Я наткнулся на Pipeline-Plugin tutorial, где они показали, как вы можете использовать узел, чтобы обозначать, где должен работать код сценария. Полученный заводной файл выглядит примерно так:

#!groovy 
stage('Environment Preparation') { 
    node('master') { 
     // fetches stuff and sets up the environment on master 
    } 
} 
stage('Unit Testing') { 
    node('master') { 
     // some testing 
    } 
} 
stage('Build on Slave') { 
    node('remote') { 
     def out = bat script: 'C:\\Build\\build.bat', returnStdout: true 
    } 
} 

Как вы можете видеть, обучающий меня отрефакторить сценарий немного. Узел ('remote') - это то, что определяет, что предстоящий материал должен запускаться на подчиненном компьютере.

Мне пришлось внести некоторые изменения в пакетный скрипт, чтобы все важные данные были напечатаны в стандартном режиме.

Вы должны позволить Дженкинс знать, какой узел «удаленный», перейдя на сайт, чтобы Управление Дженкинс> Управление Узлов, выберите подчиненный агент в виду, Настройка узла и добавьте «удаленный» или что-то вам подходит к этикетки поле.

+0

Не можете вы сделать что-то вроде этого? http://stackoverflow.com/questions/36188512/search-through-console-output-of-a-jenkins-job Итак, вы первый код, а затем просто "println slaveJob.log"? – MaTePe

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