将构建步骤执行的控制台输出存储在Jenkins管道

时间:2017-03-14 13:08:02

标签: shell jenkins jenkins-pipeline

在我的jenkins管道中,我使用"执行shell命令"运行我的gradle构建脚本。 现在我想检查构建是否失败在哪种情况下我想读取控制台输出,将其存储在字符串中并将其发布到松弛通道。 我试过的代码如下:

try {
    for (int i = 0 ; i < noOfComponents ; i++ ){
        component = compileProjectsWithPriority[i]
        node {       
            out = sh script: "cd /home/jenkins/projects/${component} && ${gradleHome}/bin/gradle build", returnStdout: true}
    }
}
catch (e){
    def errorSummary = 'Build failed due to compilation error in '+"${component}"+'\n'+"${out}"
    slackSend (channel: '#my_channel', color: '#FF0000', message: errorSummary)
}

但是它甚至不执行shell脚本,并且控制台输出也为null。这样做的正确方法是什么。

提前致谢

1 个答案:

答案 0 :(得分:0)

Jenkins 管道中的 sh 命令可能不适用于 cd 等 shell 内置程序。也许尝试使用 dir,如下所示:

node {
    dir("/home/jenkins/projects/${component}") {
        out = sh script: "${gradleHome}/bin/gradle build", returnStdout: true
    }
}

{} 中的 dir 的所有命令都将以指定目录作为其工作目录执行。这将克服内置 cd shell 可能存在的任何问题。