Jenkins Pipeline:从奴隶代理

时间:2016-11-25 12:30:25

标签: jenkins groovy virtualbox jenkins-pipeline jenkins-slave

背景

假设我有两份工作,一份是“管道工作”,一份是“建立工作”。 'Pipeline Job'在master上运行,当然是一个管道(使用groovy)。然后,对于管道中的构建部分,我使用在Windows上运行的从属服务器,即“构建作业”,它负责构建我无法在主服务器上执行的操作。主服务器也在Windows上运行,但缺少特定构建所需的一些软件。

问题

我有一个看起来像这样的groovy脚本:

#!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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

好吧,有时提出一个问题让你从另一个角度思考。

希望有人能从中受益。 我偶然发现了一个Pipeline-Plugin tutorial,在那里他们展示了如何使用node来标记应该运行脚本代码的位置。生成的groovy文件如下所示:

#!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
    }
}

正如你所看到的那样,教程让我对脚本进行了重构。 节点('远程')部分定义了即将到来的东西应该在从机上运行。

我必须在批处理脚本中进行一些自定义,以便将所有重要内容打印到stdout。

你必须让詹金斯知道哪个节点是“远程”#39;进入 Manage Jenkins>管理节点,记住从属代理,配置节点并添加远程'或适用于标签字段的任何内容。