在Jenkins,我需要一个groovy脚本来取消在以下情况下在Email-Ext插件中发送电子邮件。
如果Jenkins工作区中没有status.html
文件,那么我需要取消发送电子邮件。
答案 0 :(得分:1)
回应holibob的建议:
如果节点是本地节点,则需要实例化通道
if(build.workspace.isRemote())
{
channel = build.workspace.channel;
}
else
{
channel = null;
}
我相信它缺少实际存在检查,否则构造函数总是返回一个有效的实例,即使该文件不存在:
if ((fp != null) && fp.exists())
{
cancel = false;
}
最后,在路径中需要通配符的情况下,我担心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)
如果您愿意接受其他想法,请点击此处
我们可以针对这种情况使用电子邮件触发器,当找不到status.html文件时我们可以明确地使作业失败,然后我们只能在成功条件下配置电子邮件触发器。
如果您不想玩到工作状态,那么我们可以为电子邮件触发和原始作业conditional build step创建一个新的Jenkins作业并检查文件是否存在,因此您可以触发用于通过电子邮件发送或忽略呼叫子[电子邮件作业]的下游作业。
您可以在stackoverflow。
答案 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
}
中可以看到更广泛的取消使用示例