Jenkinsfile с электронной почтой в цикле терпит неудачу на первой итерации - PullRequest
0 голосов
/ 08 февраля 2019

Последние использованные Jenkins.

edit: pastebin of full Java исключения - https://pastebin.com/zZDNj18E

Цель: перебрать все узлы, проверить автономность, уведомление по электронной почте для каждого автономного узла.(пробовал также оповещения по электронной почте, не мог использовать «офлайн»)

Не удалось: Мой jenkinsfile работает отлично, без электронной почты.Если электронная почта находится в цикле for или определена отдельно в функции, задание вылетает после первого сообщения электронной почты.

[Pipeline] End of Pipeline an exception which occurred:     in field hudson.model.Slave.launcher    in object hudson.slaves.DumbSlave@ae938e61 .... and many more

Мой jenkinsfile:

pipeline {
  agent{
    label  'master'
  }

  options {
        // Enable timestamps in log
        timestamps()
        skipDefaultCheckout()
        timeout(time: 4, unit: 'MINUTES')
    }
  stages {
        stage('Monitor') {
            steps{
              script{
                  def offlineSlaves = []

                  for (aSlave in hudson.model.Hudson.instance.slaves) {
                        def thisSlave = aSlave.name
                        echo 'Name: ' + thisSlave + ' is being checked.'
                        if ( aSlave.getComputer().isOffline().toString() == 'true') {
                            slaveState = 'OFFLINE'
                            echo 'Name: ' + thisSlave + ' is ' + slaveState + ' !'
                            emailext (
                              mimeType: 'text/html',
                              body: "${env.JOB_NAME} found an OFFLINE node: ${name}  ",
                              subject: "Jenkins ERROR: Build Node ${name} is OFFLINE " ,
                              to: 'jfisher@xxx')
                        }
                    }
                }
            }
        }
      }
    post {
        failure {
            emailext (
                body: 'Monitor Nodes Jenkins Job failed !',
                presendScript: '$DEFAULT_PRESEND_SCRIPT',
                recipientProviders: [requestor(),culprits()],
                subject: 'Monitor Nodes Jenkins Failed',
                to: 'jfisher@intouchhealth.com')
        }
    }
}

1 Ответ

0 голосов
/ 11 февраля 2019

Проблема с этим кодом - часть getComputer().В конвейере вы должны использовать только Serializable, а SlaveComputer, возвращаемый из getComputer(), - нет.

https://javadoc.jenkins.io/hudson/slaves/SlaveComputer.html

Что вам нужно сделать, это переместить эту часть в функцию, аннотированную NonCPS

       @NonCPS
       def shallTrigger() {
              for (aSlave in hudson.model.Hudson.instance.slaves) {
                    def thisSlave = aSlave.name
                    echo 'Name: ' + thisSlave + ' is being checked.'
                    if ( aSlave.getComputer().isOffline().toString() == 'true') {
                        slaveState = 'OFFLINE'
                        echo 'Name: ' + thisSlave + ' is ' + slaveState + ' !'
                        emailext (
                          mimeType: 'text/html',
                          body: "${env.JOB_NAME} found an OFFLINE node: ${name}  ",
                          subject: "Jenkins ERROR: Build Node ${name} is OFFLINE " ,
                          to: 'jfisher@xxx')
                    }
              }
       }
...