2

背景

假设我有两份工作,一份“管道作业”和一份“构建作业”。“管道作业”在 master 上运行,当然是一个管道(使用 groovy)。然后对于管道中的构建部分,我使用在 Windows 上运行的从属设备,即“构建作业”,它负责构建我无法在主服务器上执行的操作。master 也在 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”等。我很想在这里。

谢谢!

4

2 回答 2

2

已编辑您必须在脚本批准下批准要访问的内容。不确定您是否真的需要 getRawBuild,但它确实有效。

搜索 Jenkins 作业的控制台输出

#!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
于 2016-11-28T08:49:43.273 回答
1

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

希望有人会从中受益。我偶然发现了一个 Pipeline-Plugin教程,他们展示了如何使用节点来标记脚本代码应该运行的位置。生成的 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
    }
}

如您所见,教程让我稍微重构了脚本。node('remote')部分定义了即将到来的东西应该在从机上运行。

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

您必须通过进入Manage Jenkins > Manage Nodes让 Jenkins 知道哪个节点是“远程”的,选择记住的从代理,配置节点并添加“远程”或任何适合您的标签字段。

于 2016-11-25T16:00:06.107 回答