Jenkins - Проблемы с почтовыми уведомлениями PostBuild

Попытка использовать следующий фрагмент кода для запуска уведомлений по электронной почте для задания с несколькими филиалами:

1    def emailNotification() {
2        def to = emailextrecipients([[$class: 'CulpritsRecipientProvider'],
3                                     [$class: 'DevelopersRecipientProvider'],
4                                     [$class: 'RequesterRecipientProvider']])
5       
6       //def to = "firstname.lastname@domain.com"                               
7        //String currentResult = currentBuild.result
8       String currentResult = manager.build.getResult()
9       echo "CurrentResult1=${currentResult}"
10      echo "CurrentResult2=${manager.build.getResult()}"
11      echo "CurrentResult3=${manager.build.result}"
12        String previousResult = currentBuild.getPreviousBuild().result
13    
14        def causes = currentBuild.rawBuild.getCauses()
15        // E.g. 'started by user', 'triggered by scm change'
16        def cause = null
17        if (!causes.isEmpty()) {
18            cause = causes[0].getShortDescription()
19        }
20    
21        // Ensure we don't keep a list of causes, or we get
22        // "java.io.NotSerializableException: hudson.model.Cause$UserIdCause"
23        // see http://stackru.com/a/37897833/509706
25        causes = null
26    
27        String subject = "${env.JOB_NAME} ${env.BUILD_NUMBER}: ${currentResult}"
28    
29        String body = """
30                      <p>Triggered by: <b>${cause}</b></p>
31    
32                      <p>Last build result: <b>${previousResult}</b></p>
33    
34    
35                      <p>Build <b>${env.BUILD_NUMBER}</b> ran on <b>${env.NODE_NAME}</b> and terminated with <b>${currentResult}</b>.
36                      </p>
37    
38                      <p>See: <a href="${env.BUILD_URL}">${env.BUILD_URL}</a></p>
39    
40                      """
41    
42        String log = currentBuild.rawBuild.getLog(40).join('\n')
43        if (currentBuild != 'SUCCESS') {
44            body = body + """
45                          <h2>Last lines of output</h2>
46                          <pre>${log}</pre>
47                          """
48        }
49    
50        if (to != null && !to.isEmpty()) {
51            // Email on any failures, and on first success.
52            if (currentResult != 'SUCCESS' || currentResult != previousResult) {
53                mail to: to, subject: subject, body: body, mimeType: "text/html"
54            }
55            echo 'Sent email notification'
56        }
57    }

Теперь проблемы, с которыми я сталкиваюсь:

  1. def to = emailextrecipients... не работает. Я обнаружил, что у Дженкинса и Джиры возникают проблемы с тем, что это может быть причиной, но без обходного пути. Хотя кажется странным, что если сборка запускается вручную, скажем, пользователем, прошедшим аутентификацию через Github Oauth, письмо может быть отправлено. Если Github начинает сборку через webhook, я получаю это в журналах Jenkins:

Не отправлять почту пользователю firstname.lastname@domain.com без разрешения на просмотр

  1. Вторая проблема, которую я вижу, связана с триггером электронной почты PostBuild. Трубопровод выглядит так:

    def emailNotification() {
        //the one from above
    }
    try {
       stage('Stage1') {
           /*
           creating multiple nodes based on an array provided
           each node will execute:
           checkout scm
           buildSolution() //custom method defined
           */
           parallel <stuff_above>
       }
       stage('Stage2') {
           //do other stuff
           parallel <other_stuff_above>
        }
    } finally {
        emailNotification()
    }
    

Эхо сверху (строки 9-11) все показывают null

CurrentResult1= нуль

CurrentResult2= нуль

CurrentResult3= нуль

С помощью currentBuild.currentResult покажет мне только SUCCESS или же FAILED, но нет UNSTABLEна случай, если некоторые из тестов не пройдены.

Есть идеи, где проблема?

1 ответ

Решение

Состояние сборки равно нулю, пока что-то не установит его или пока задание не завершится. Используете ли вы какие-либо этапы модульного тестирования, которые могут привести к нестабильной сборке?

Вам не нужно использовать emailextrecipients вместо этого используйте.

emailext body: body, mimeType: 'text/html', recipientProviders: [
  [$class: 'CulpritsRecipientProvider'], 
  [$class: 'DevelopersRecipientProvider'], 
  [$class: 'RequesterRecipientProvider']], subject: subject

Не отправлять почту пользователю firstname.lastname@domain.com без разрешения на просмотр

Означает, что ни у какого пользователя jenkins этот адрес электронной почты не связан или у пользователя, с которым он связан, нет разрешения на работу

Также по причинам поместите эту логику в другую функцию и добавьте @NonCPS аннотация, которая остановит jenkins, пытающуюся сериализовать состояние во время работы этой функции, так как у вас есть такая возможность, есть небольшая вероятность того, что она все равно прекратит работу с этим исключением, см. /questions/20405624/truboprovod-dzhenkinsa-notserializableexception-groovyjsoninternallazymap/20405636#20405636

Другие вопросы по тегам