如何归档(作为文件)jenkins管道步骤的控制台输出,例如docker.build(someTag)
?
背景:
我使用jenkins管道来构建一大堆微服务。
我想将jenkins控制台中的所有相关信息提取到归档文件中,这样开发人员就不必查看混淆了它们的控制台。这适用于sh
步骤我可以重定向stdout和stderr但是我怎样才能为jenkins管道步骤做类似的事情呢?
答案 0 :(得分:1)
作为一种解决方法,我们使用以下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()
请注意,可能会发生 - 很可能是由于缓存问题 - 日志的最后一行有时会丢失。也许睡觉会有所帮助。但到目前为止,这里并不需要这样做。
答案 1 :(得分:-1)
这就是我用来捕获已构建的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