Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;取消“;groovy脚本中的变量在Jenkins Email ext插件中不起作用_Groovy_Jenkins_Email Ext - Fatal编程技术网

&引用;取消“;groovy脚本中的变量在Jenkins Email ext插件中不起作用

&引用;取消“;groovy脚本中的变量在Jenkins Email ext插件中不起作用,groovy,jenkins,email-ext,Groovy,Jenkins,Email Ext,我遇到一个问题,当作业从不稳定状态进入固定状态时,我想取消发送电子邮件。因此,如果某个作业失败但得到修复,我想发送消息。但是,如果某个作业不稳定(测试未通过)并得到修复,则不要发送电子邮件。作业可能在处于失败状态后被标记为不稳定。当它走向成功(即,它是固定的),我希望在这种情况下的电子邮件。您可以在下面的代码中看到这些情况 我的问题是,当我根据定义[1]将变量cancel设置为true时,它应该取消电子邮件,但它不会。每次都会发送电子邮件。当然,我使用触发器来表示“失败”、“仍然失败”和“修复”

我遇到一个问题,当作业从不稳定状态进入固定状态时,我想取消发送电子邮件。因此,如果某个作业失败但得到修复,我想发送消息。但是,如果某个作业不稳定(测试未通过)并得到修复,则不要发送电子邮件。作业可能在处于失败状态后被标记为不稳定。当它走向成功(即,它是固定的),我希望在这种情况下的电子邮件。您可以在下面的代码中看到这些情况

我的问题是,当我根据定义[1]将变量
cancel
设置为
true
时,它应该取消电子邮件,但它不会。每次都会发送电子邮件。当然,我使用触发器来表示“失败”、“仍然失败”和“修复”

詹金斯版本: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")
//此脚本的目标是阻止发送“已修复”消息
//当状态从“不稳定”变为“成功”
//
//以下是一些情况(其中F=失败,U=不稳定,S=成功)
//S-S:无消息(以前的状态:S,当前状态:S)
//F-S:msg

//S-U。。。美国:没有消息我也有类似的问题。
Pre-send脚本中
I放入:

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

我收到了一封附有
build.log
文件的电子邮件,其中显示了
“cancel=true”
“cancel=false”
案例。

我遇到了同样的问题,并在几天内找到了解决方案

“取消”仅在最后一行代码中使用时有效

这将取消生成:

changed = false
files = 5
cancel = true
这不会:

changed = false
cancel = true
files = 5
这也将执行取消:

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

我希望这能为某人节省一些时间。

奇怪的是,它现在起作用了。我不得不重新启动詹金斯的另一个问题,现在它的逻辑。如果有人能很好地解释为什么会发生这样的事,我会把这个打开。你试过重新启动詹金斯吗?它对我起作用了。我相信它是固定的。