Jenkins管道捕获Jenkins步骤的输出
如何将jenkins管道步骤(如Jenkins管道捕获Jenkins步骤的输出,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,如何将jenkins管道步骤(如docker.build(someTag))的控制台输出存档(作为文件) 背景: 我使用jenkins管道构建了一整套微服务 我想将jenkins控制台中的所有相关信息提取到归档文件中,这样开发人员就不必查看会混淆它们的控制台。这对于sh步骤很好,因为我可以重定向stdout和stderr,但如何对jenkins管道步骤执行类似操作?作为解决方法,我们使用以下LogRecorder类: class LogRecorder implements Serializab
docker.build(someTag)
)的控制台输出存档(作为文件)
背景:
我使用jenkins管道构建了一整套微服务
我想将jenkins控制台中的所有相关信息提取到归档文件中,这样开发人员就不必查看会混淆它们的控制台。这对于
sh
步骤很好,因为我可以重定向stdout和stderr,但如何对jenkins管道步骤执行类似操作?作为解决方法,我们使用以下LogRecorder
类:
class LogRecorder implements Serializable {
def logStart
def logEnd
def currentBuild
def steps
LogRecorder(currentBuild) {
this.currentBuild = currentBuild
}
void start() {
logStart = currentBuild.getRawBuild().getLog(2000)
}
String stop() {
logEnd = currentBuild.getRawBuild().getLog(2000)
getLog()
}
String getLog() {
def logDiff = logEnd - logStart
return logDiff.join('\n')
}
}
根据需要,您可能需要调整对getLog()
的调用中的日志行数
可能的用途:
LogRecorder logRecorder = new LogRecorder(currentBuild)
logRecorder.start()
docker.build(someTag)
testResult.stdOut = logRecorder.stop()
请注意,日志的最后一行有时会丢失,这可能是由于缓存问题造成的。也许睡一觉会有帮助。但到目前为止,这里还没有要求这样做。下面是我用来捕获构建的docker映像的sha256的内容
docker.build(someTag)
def dockerSha256 = sh(returnStdout: true, script: "docker image inspect $someTag | jq .[0].Id").trim()
我使用“jq”来解析json响应
或者是传统的方式
def json = sh(returnStdout: true, script: "docker image inspect $someTag").trim()
def obj = new JsonSlurper().parseText(json)
println "raw json: " + obj
println "groovy docker sha256: " + obj[0].Id