如何从管道中读取日志文件?

时间:2019-03-28 18:45:24

标签: jenkins jenkins-pipeline

我有一个运行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工具,并且尝试过尽早手动触发分析,但是要做到这一点,我需要能够访问日志文件,因此遇到了同样的问题。

1 个答案:

答案 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