我有一个运行Maven构建的管道作业。在管道的“ post”部分中,我想要获取日志文件,以便可以使用一些正则表达式对其执行一些故障分析。我尝试了以下方法:
def logContent = Jenkins.getInstance()
.getItemByFullName(JOB_NAME)
.getBuildByNumber(
Integer.parseInt(BUILD_NUMBER))
.logFile.text
上述代码错误
不允许脚本使用staticMethod jenkins.model.Jenkins getInstance
currentBuild.rawBuild.getLogFile()
上述代码错误
不允许脚本使用hudson.model方法。运行getLogFile
从我的研究中,当我遇到这些脚本时,我应该能够进入scriptApproval页面并看到批准这些脚本的提示,但是当我进入该页面时,没有新的提示。
我也尝试过从一个单独的文件中加载脚本,并在没有运气的情况下在另一个节点上运行它。
我不确定目前还可以尝试什么,所以这就是为什么我在这里。任何帮助将不胜感激。
P.S。我知道BFA工具,并且尝试过尽早手动触发分析,但是要做到这一点,我需要能够访问日志文件,因此遇到了同样的问题。
答案 0 :(得分:2)
您可以使用here中的管道步骤httpRequest
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Test fetch build log'
}
post {
always {
script {
def logUrl = env.BUILD_URL + 'consoleText'
def response = httpRequest(
url: logUrl,
authentication: '<credentialsId of jenkins user>',
ignoreSslErrors: true
)
def log = response.content
echo 'Build log: ' + log
}
}
}
}
}
}
如果您的jenkins作业可以在linux计算机上运行,则可以使用curl
来归档相同的目标。
pipeline {
agent any
stages {
stage('Build') {
environment {
JENKINS_AUTH = credentials('< credentialsId of jenkins user')
}
steps {
sh 'pwd'
}
post {
always {
script {
def logUrl = env.BUILD_URL + 'consoleText'
def cmd = 'curl -u ${JENKINS_AUTH} -k ' + logUrl
def log = sh(returnStdout: true, script: cmd).trim()
echo 'Build log: ' +
echo log
}
}
}
}
}
}
以上两种方法都要求凭据为Username and password
格式。有关它的详细信息以及如何在Jenkins中添加,请查看here