Shell 将生成步骤执行的控制台输出存储在Jenkins管道中
在jenkins管道中,我使用“executeshell命令”运行gradle构建脚本。 现在,我想检查构建是否失败,在这种情况下,我希望读取控制台输出,将其存储在字符串中,并将其发布到空闲通道。 我尝试过的代码如下所示:Shell 将生成步骤执行的控制台输出存储在Jenkins管道中,shell,jenkins,jenkins-pipeline,Shell,Jenkins,Jenkins Pipeline,在jenkins管道中,我使用“executeshell命令”运行gradle构建脚本。 现在,我想检查构建是否失败,在这种情况下,我希望读取控制台输出,将其存储在字符串中,并将其发布到空闲通道。 我尝试过的代码如下所示: try { for (int i = 0 ; i < noOfComponents ; i++ ){ component = compileProjectsWithPriority[i] node {
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)
}
试试看{
for(int i=0;i
但是,它甚至不执行shell脚本,并且控制台输出为null。正确的方法是什么
提前感谢Jenkins pipelines中的命令可能无法与cd
等shell内置程序一起使用。或许可以尝试使用,如下所示:
node {
dir("/home/jenkins/projects/${component}") {
out = sh script: "${gradleHome}/bin/gradle build", returnStdout: true
}
}
对于
目录
的{
和}
中的所有命令将以指定目录作为其工作目录执行。这将克服内置的cd
shell可能存在的任何问题。看起来一般都很好,对我来说也很好。您需要发布更多的Jenkins文件和生成输出。@Christopher“由于测试服务null中的编译错误,生成失败”。这是我在slack频道得到的信息。您使用的管道插件的版本是什么?我的是2.4,不管最新版本是什么。您可以尝试在try
之前添加def组件
和def out
,但它仍然可以工作。