用于取消在Email-Ext插件中发送电子邮件的Groovy脚本

时间:2016-07-05 13:49:45

标签: jenkins groovy email-ext

在Jenkins,我需要一个groovy脚本来取消在以下情况下在Email-Ext插件中发送电子邮件。

如果Jenkins工作区中没有status.html文件,那么我需要取消发送电子邮件。

3 个答案:

答案 0 :(得分:1)

回应holibob的建议:

  1. 如果节点是本地节点,则需要实例化通道

    if(build.workspace.isRemote())
    {
        channel = build.workspace.channel;
    }
    else 
    {
        channel = null;
    }
    
  2. 我相信它缺少实际存在检查,否则构造函数总是返回一个有效的实例,即使该文件不存在:

    if ((fp != null) && fp.exists())
    {
        cancel = false;
    }
    
  3. 最后,在路径中需要通配符的情况下,我担心exists()不起作用,但以下情况确实如此:

    import jenkins.*
    import jenkins.model.*
    import hudson.*
    import hudson.model.*
    
    import javax.mail.internet.*
    import javax.mail.*
    import javax.activation.*
    
    def workspace = build.getEnvVars()["WORKSPACE"]
    listener.logger.println('WS: ' + workspace)
    
    if(build.workspace.isRemote())
    {
        channel = build.workspace.channel;
    }
    else 
    {
        channel = null
    }
    
    fp = new hudson.FilePath(channel, build.workspace.toString() )
    
    if ((fp != null) && fp.list("**/path/to/*.html").size()>0) 
    {
        listener.logger.println('file found')
        cancel = false
    }
    else
    {
        // file not found
        listener.logger.println('file not found, cancelling email')
        cancel = true // disable email
    }
    

答案 1 :(得分:0)

如果您愿意接受其他想法,请点击此处

  1. 我们可以针对这种情况使用电子邮件触发器,当找不到status.html文件时我们可以明确地使作业失败,然后我们只能在成功条件下配置电子邮件触发器。

  2. 如果您不想玩到工作状态,那么我们可以为电子邮件触发和原始作业conditional build step创建一个新的Jenkins作业并检查文件是否存在,因此您可以触发用于通过电子邮件发送或忽略呼叫子[电子邮件作业]的下游作业。

  3. 您可以在stackoverflow

  4. 中查看此答案

答案 2 :(得分:0)

Groovy是可行的方法,只需查看WORKAPACE中是否存在status.html。 插件中的Email-ext预发送脚本选项提供了预定义变量,包括'取消 - 布尔值,当设置为true时将取消发送电子邮件'

import jenkins.*
import jenkins.model.*
import hudson.*
import hudson.model.*

import javax.mail.internet.*;
import javax.mail.*
import javax.activation.*

def workspace = manager.build.getEnvVars()["WORKSPACE"]
manager.listener.logger.println('WS: ' + workspace)
if(manager.build.workspace.isRemote())
{
    channel = manager.build.workspace.channel;
}

fp = new hudson.FilePath(channel, manager.build.workspace.toString() + "/status.html")

if(fp != null)
{
    manager.listener.logger.println('status.html found')
    cancel = false
}
else
{
    // file not found
    cancel = true // disable email
}

'Disable email notifications using Jenkins job parameter'

中可以看到更广泛的取消使用示例