如何在上游作业中获取下游作业的控制台产量? [英] How to get console output of downstream job in upstream job?

查看:19
本文介绍了如何在上游作业中获取下游作业的控制台产量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试寻找解决方法,因为第一个问题仍未得到回答。 can't run Start-Job with credentials from Jenkins

我有作业A。作业A在服务器上启动PowerShell脚本并显示一些输出。

我还有一个管道B,它在不同的服务器上运行作业A的多个副本。 以下是groovy代码

stage 'Copy sources from Git'
build job: 'DeploymentJobs/1_CopySourcesFromGit'
stage 'Deploy to servers'
def servers = env.SERVERLIST.split('
')
def steps =[:]

for (int i=0; i<servers.size(); i++) {
    def server = servers[i]
    def stepName = "running ${server}"
    steps[stepName] = {->
        echo server
        build job: 'DeploymentJobs/2_DeployToServer', parameters: 
[booleanParam(name: 'REBOOTAFTER', value: Boolean.valueOf(REBOOTAFTER)), 
string(name: 'SERVERNAME', value: server)]
    }

}

parallel steps
在管道的输出中,我只看到作业A的N个副本已启动的信息,但没有它们的输出。 我希望在管道B的控制台输出中仅看到作业A的所有实例的PowerShell输出。

我不知道怎么做,可以吗?

推荐答案

更短的替代方案:

def result = build job: 'job_name', wait: true
println result.getRawBuild().getLog()

必须将两种方法都列入白名单。

编辑:由于您不想等待生成运行,因此可以在作业结束时(或在所有触发的生成应完成后的某个时间点)添加此命令,在本例中,number_of_Builds将为servers.size()。

def job = Jenkins.getInstance().getItemByFullName('job_A_name')
def last_build = job.getLastBuild().getNumber()
def first_build = last_build - number_of_builds

(first_build..last_build).each {
    println "Log of build $it"
    def build = job.getBuildByNumber(it)
    println build.log
}

如果您确实要确保您正在获取的生成是由您的作业触发的生成,您可以从Build对象中获取生成原因。

这篇关于如何在上游作业中获取下游作业的控制台产量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆