【发布时间】:2016-07-05 13:49:45
【问题描述】:
在 Jenkins 中,我需要一个 groovy 脚本来通过以下条件取消在 Email-Ext 插件中发送电子邮件。
如果 Jenkins 工作区中没有 status.html 文件,那么我需要取消发送电子邮件。
【问题讨论】:
-
有没有可以在声明式詹金斯文件中使用的解决方案?我不确定如何在以下答案中使用取消。你的问题得到答案了吗?
在 Jenkins 中,我需要一个 groovy 脚本来通过以下条件取消在 Email-Ext 插件中发送电子邮件。
如果 Jenkins 工作区中没有 status.html 文件,那么我需要取消发送电子邮件。
【问题讨论】:
回应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
}
【讨论】:
Groovy 是要走的路,只需查看 WORKSPACE 中是否存在 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'
【讨论】:
如果您愿意接受其他想法,我们来吧
我们可以在这种情况下使用电子邮件触发器,当找不到 status.html 文件时,我们可以显式地使作业失败,然后我们可以仅在成功条件下配置电子邮件触发器。
如果您不想玩到工作状态,那么我们可以创建一个新的 Jenkins 工作来触发电子邮件,并从您的原始工作中使用 conditional build step 并检查文件是否存在,因此您可以触发下游发送电子邮件的工作或忽略给孩子打电话的工作[电子邮件工作]。
你可以在stackoverflow查看这个答案。
【讨论】: