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 }
Теперь проблемы, с которыми я сталкиваюсь:
def to = emailextrecipients...
не работает. Я обнаружил, что у Дженкинса и Джиры возникают проблемы с тем, что это может быть причиной, но без обходного пути. Хотя кажется странным, что если сборка запускается вручную, скажем, пользователем, прошедшим аутентификацию через Github Oauth, письмо может быть отправлено. Если Github начинает сборку через webhook, я получаю это в журналах Jenkins:
Не отправлять почту пользователю firstname.lastname@domain.com без разрешения на просмотр
Вторая проблема, которую я вижу, связана с триггером электронной почты 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