Как прочитать файл журнала из конвейера? - PullRequest
0 голосов
/ 28 марта 2019

У меня есть конвейерная работа, которая запускает сборку 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.Run getLogFile

Из моего исследования, когда я сталкиваюсь с этим, я должен бытьвозможность перейти на страницу scriptApproval и увидеть подсказку для утверждения этих сценариев, но когда я перехожу на эту страницу, новых запросов нет.

Я также попытался загрузить скрипт из отдельного файла и запустить его на другом узле, но безуспешно.

Я не уверен, что еще можно попробовать на этом этапе, поэтому я здесь.Любая помощь очень ценится.

PS Мне известен инструмент BFA, и я пытался вручную запустить анализ на ранней стадии, но для этого мне нужно иметь доступ к файлу журнала.и я столкнулся с той же проблемой.

1 Ответ

2 голосов
/ 29 марта 2019

Вы можете использовать шаг конвейера 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, смотрите здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...