Jenkins Pipeline - 阅读上一阶段的日志

Cha*_*adi 5 jenkins jenkins-pipeline

考虑一个詹金斯管道有两个阶段,A阶段B阶段

在阶段 B 中,是否可以针对某些特定文本解析阶段 A 的日志?

Ger*_*sim 6

用于tee将输出拆分为 stdout 和文件。接下来解析文件中的文本。

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)}"
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

管道输出:

print some Stage_A log content ...
found: Stage_A
Finished: SUCCESS
Run Code Online (Sandbox Code Playgroud)


Pom*_*m12 5

7月28日起有更新!

正如这个答案中提到的,从Pipeline: Nodes and Processes 2.4 版本开始,您可以使用:

def out = sh script: 'command', returnStdout: true
Run Code Online (Sandbox Code Playgroud)

至少它比输出到文件然后读取文件要简单和干净得多。