Jenkins管道-读取上一阶段日志
考虑具有两个阶段的Jenkins管道,阶段a然后阶段BJenkins管道-读取上一阶段日志,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,考虑具有两个阶段的Jenkins管道,阶段a然后阶段B 在阶段B中,是否可以解析阶段A的日志中的某些特定文本?正如建议的那样,我最后做的是使用tee写入文件(和标准输出) sh "command | tee <filename>" sh“命令| tee” 然后根据需要解析该文件,使用readFile从工作区读取该文件。自7月28日以来一直有更新 如中所述,从版本2.4起,您可以使用: def out=sh脚本:“命令”,返回stdout:true 至少它比输出到文件然后读取文件
在阶段B中,是否可以解析阶段A的日志中的某些特定文本?正如建议的那样,我最后做的是使用tee写入文件(和标准输出)
sh "command | tee <filename>"
sh“命令| tee”
然后根据需要解析该文件,使用
readFile
从工作区读取该文件。自7月28日以来一直有更新
如中所述,从版本2.4起,您可以使用:
def out=sh脚本:“命令”,返回stdout:true
至少它比输出到文件然后读取文件要简单和干净得多。如果要搜索模式的第一次出现,还可以使用
manager.logContains(regexp)
或manager.getLogMatcher(regexp)
。有关更多详细信息,请参见我的另一个答案:使用tee
将输出拆分为标准输出和文件。接下来,为文本解析文件
STAGE_A_LOG_FILE = 'stage_a.log'
pipeline {
agent any
stages {
stage('Stage A') {
steps {
script {
// tee log into file
tee(STAGE_A_LOG_FILE) {
echo 'print some Stage_A log content ...'
}
}
}
}
stage('Stage B') {
steps {
script {
// search log file for 'Stage_A'
regex = java.util.regex.Pattern.compile('some (Stage_A) log')
matcher = regex.matcher(readFile(STAGE_A_LOG_FILE))
if (matcher.find()) {
echo "found: ${matcher.group(1)}"
}
}
}
}
}
}
管道输出:
print some Stage_A log content ...
found: Stage_A
Finished: SUCCESS
我看你需要什么样的日志。例如,如果你想解析gradle输出,你可能可以将标准输出重定向到文件,然后读取下一个文件并解析它。嗨,也许你可以帮助我解析上一个“步骤”,因为我使用了copyArtifact插件,它需要一个“步骤”(所以在我的情况下,它不是命令,所以我不能使用“sh脚本”),我为它创建了一个问题:尽管要小心。如果您依赖于返回代码-此行将开始始终返回0。不幸的是
tee
has。