2014-06-03 2 views
0

У меня возникла проблема, когда я хочу отменить отправку электронной почты, когда задание переходит в состояние FIXED из состояния UNSTABLE. Поэтому, если работа была неудачной, но исправлена, я хочу отправить сообщение. Но если работа нестабильна (тесты не проходят) и фиксируется, не отправляйте электронное письмо. Возможно, что задание помечено как UNSTABLE после того, как оно было в состоянии FAILURE. Когда он переходит к УСПЕХУ (т. Е. Он исправлен), я хочу получить электронное письмо в этом случае. Вы можете увидеть случаи в коде ниже.переменная «отменить» в строчном скрипте, не работающем в Jenkins. Email-ext plugin

Моя проблема в том, что когда я устанавливаю переменную cancel на true по определению [1], она должна отменить электронную почту, но это не так. Электронная почта отправляется каждый раз. Конечно, я использую триггеры для «Неудачи», «Неудачи» и «Исправлено».

Jenkins версия: 1.533. версия Email-доб: 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] с помощью значка справки: «истина„“Вы также можете отменить отправку электронной почты, установив логическую переменную» отменить

+0

Странно, теперь он работает. Я должен был перезагрузить Дженкинса для другого вопроса, и теперь он следит за логикой. Я оставлю это открытым, если у кого-то есть хорошее объяснение, почему это произошло. – perrocontodo

ответ

0

У меня такая же проблема.
В Pre-send script я поставил:

if ((build.getNumber() % 2) == 0) { 
    cancel=true; 
} else { 
    cancel=false; 
} 
logger.println("cancel = " + cancel); 

я получаю по электронной почте, с файлом build.log прилагается, который показывает "cancel = true" и "cancel = false" случаев.

+0

Вы пытались перезапустить Дженкинса? Это сработало для меня. – perrocontodo

2

Я столкнулся с той же проблемой и нашел решение через пару дней.

«Отмена» работает только в том случае, если она используется в последней строке кода.

Это отменит сборку:

changed = false 
files = 5 
cancel = true 

Это не будет:

changed = false 
cancel = true 
files = 5 

И это также сделать отменить:

changed = false 
files = 5 
if (files > 2) { 
    cancel = true 
} 

Я надеюсь, что это позволит сэкономить некоторые время для кого-то.

+0

Я не могу поверить, что это сработало для меня тоже. <Спасибо – Carlos

+0

Я считаю, что это исправлено в рамках [JENKINS-27448] (https://issues.jenkins-ci.org/browse/JENKINS-27448). – sT331h0rs3

 Смежные вопросы

  • Нет связанных вопросов^_^