Переменная "cancel" в скрипте groovy не работает в плагине Jenkins Email-ext
У меня возникла проблема, когда я хочу отменить отправку электронного письма, когда задание переходит в состояние FIXED из состояния UNSTABLE. Так что, если работа не удалась, но была исправлена, я хочу отправить сообщение. Но если работа нестабильна (тесты не пройдены) и исправлена, не отправляйте электронное письмо. Может случиться так, что задание помечается как НЕСТАБИЛЬНОЕ после того, как оно было в состоянии ОТКАЗ Когда дело доходит до УСПЕХА (т.е. это исправлено), я хочу электронное письмо в этом случае. Вы можете увидеть случаи в коде ниже.
Моя проблема в том, что когда я устанавливаю переменную cancel
в true
по определению [1] следует отменить письмо, но это не так. Письмо отправляется каждый раз. Конечно, я использую триггеры для "Failure", "Still fail" и "Fixed".
Дженкинс версия: 1.533. Версия для электронной почты: 2.37.2.2
// The goal of this script is to block sending the 'FIXED' message
// when the status goes from 'UNSTABLE' to 'SUCCESS'
//
// These are the cases (where F=FAILURE, U=UNSTABLE, S=SUCCESS)
// S - S : no msg (previous state: S, current state: S)
// F - S : msg
// S - U ... U - S : no msg <-- this is the one we need to avoid sending an email
// F - U ... U - S : msg
logger.println("Entering pre-send script")
// variable definitions
def keepGoing= true
def cancelEmail = false
// object to current job
job = hudson.model.Hudson.instance.getItem("incr-build-master")
// current build number
buildNumber = build.getNumber()
logger.println("Current build number: " + buildNumber)
// if the build failed or is unstable don't to anything,
// the specific triggers should take care of the messages
if (build.result.toString().equals("SUCCESS"))
{
logger.println("Build is successful. Procesing...")
while( keepGoing )
{
// get the number of the next past build
pastBuild = job.getBuildByNumber(--buildNumber)
buildResult = pastBuild.result.toString()
switch ( buildResult )
{
case "SUCCESS":
// if the previous non-unstable build was successful
// don't send a 'FIXED' message
cancelEmail = true
keepGoing = false
logger.println("Cancel sending email")
break
case "FAILURE":
// here we exit, but we will send the 'FIXED' message
keepGoing = false
logger.println("Send email")
break
case "UNSTABLE":
// let us keep looking until we find a previous build
// that is either 'SUCCESS' or 'FAILURE*
logger.println("Build " + buildNumber + " is unstable")
break
default:
logger.println("Error in script: result string is wrong - " + buildResult)
return
}
}
}
logger.println("Emailed canceled?: " + cancelEmail)
cancel=cancelEmail
logger.println("Exiting pre-send script")
[1] на значке справки: "Вы также можете отменить отправку электронного письма, установив для логической переменной" cancel "значение true".
2 ответа
Я столкнулся с той же проблемой и нашел решение через пару дней.
"Отмена" работает только тогда, когда используется в последней строке кода.
Это отменит сборку:
changed = false
files = 5
cancel = true
Это не будет:
changed = false
cancel = true
files = 5
И это также сделает отмену:
changed = false
files = 5
if (files > 2) {
cancel = true
}
Я надеюсь, что это сэкономит время для кого-то.
У меня похожая проблема.
в Pre-send script
Я кладу:
if ((build.getNumber() % 2) == 0) {
cancel=true;
} else {
cancel=false;
}
logger.println("cancel = " + cancel);
Я получаю электронную почту, с build.log
прикрепленный файл, который показывает "cancel = true"
а также "cancel = false"
случаев.