如何使用 groovy 模板在 Jenkins 中发送电子邮件?

Posted

技术标签:

【中文标题】如何使用 groovy 模板在 Jenkins 中发送电子邮件?【英文标题】:How to send email in Jenkins with groovy template? 【发布时间】:2015-05-21 12:18:58 【问题描述】:

我正在使用 Jenkins 服务器进行 CI,我正在尝试使用 email-ext 插件和 groovy 模板发送构建后的电子邮件:appsgt.groovy,代码如下。我的默认内容为空,我的预发送脚本字段如下 $SCRIPT, script="managed:appsgt"。

但我在第 1 列的第 1 列得到一个错误:意外令牌

如果我将脚本更改为模板,我仍然会收到另一行的错误,同时电子邮件模板测试会创建格式良好的数据。

<STYLE>
BODY, TABLE, TD, TH, P 
  font-family:Verdana,Helvetica,sans serif;
  font-size:11px;
  color:black;


</STYLE>
<BODY>
<%
float versionadjust = 103.0f
float newversion = (build.number + 103) / 1000
def realVersion = newversion.round(3)
%>
<TABLE>
  <TR><TD align="right"><IMG SRC="$rooturlstatic/e59dfe28/images/32x32/<%= build.result.toString() == 'SUCCESS' ? "blue.gif" : build.result.toString() == 'FAILURE' ? 'red.gif' : 'yellow.gif' %>" />
  </TD><TD valign="center"><B style="font-size: 200%;">BUILD $build.result</B></TD></TR>
  <TR><TD>Build URL</TD><TD><A href="$rooturl$build.url">$rooturl$build.url</A></TD></TR>
  <TR><TD>Project:</TD><TD>$project.name</TD></TR>
  <TR><TD>Project version:</TD><TD>$realVersion</TD></TR>
  <TR><TD>Date of build:</TD><TD>$it.timestampString</TD></TR>
  <TR><TD>Build duration:</TD><TD>$build.durationString</TD></TR>
</TABLE>
<BR/>

<!-- CHANGE SET -->
<%
def changeSet = build.changeSet
if(changeSet != null) 
    def hadChanges = false %>
    <TABLE >
    <TR><TD class="bg1" colspan="2"><B>CHANGES</B></TD></TR>
<%  changeSet.each()  cs ->
        hadChanges = true %>        
      <TR>
        <TD colspan="2" class="bg2">&nbsp;&nbsp;Revision <B><%= cs.metaClass.hasProperty('commitId') ? cs.commitId : cs.metaClass.hasProperty('revision') ? cs.revision : 
        cs.metaClass.hasProperty('changeNumber') ? cs.changeNumber : "" %></B> by
          <B><%= cs.author %>: </B>
          <B>($cs.msgAnnotated)</B>
         </TD>
      </TR>
<%      cs.affectedFiles.each()  p -> %>
        <TR>
          <TD >&nbsp;&nbsp;$p.editType.name</TD>
          <TD>$p.path</TD>
        </TR>
<%      
    

    if(!hadChanges)  %>    
        <TR><TD colspan="2">No Changes</TD></TR>
<%   %>
  </TABLE>
<BR/>
<%  %>


<!-- CONSOLE OUTPUT -->
<% if(build.result==hudson.model.Result.FAILURE)  %>
<TABLE  cellpadding="0" cellspacing="0">
<TR><TD class="bg1"><B>CONSOLE OUTPUT</B></TD></TR>
<%  build.getLog(100).each()  line -> %>
    <TR><TD class="console">$org.apache.commons.lang.StringEscapeUtils.escapehtml(line)</TD></TR>
<%   %>
</TABLE>
<BR/>
<%  %>

</BODY>

【问题讨论】:

【参考方案1】:
$SCRIPT, script="managed:appsgt"

^ 那应该是:

$SCRIPT, template="managed.template"

...除非我误解了你的问题。

来源:https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+plugin#Email-extplugin-Scriptcontent

【讨论】:

以上是关于如何使用 groovy 模板在 Jenkins 中发送电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Groovy脚本在Jenkins中显示绘图?

如何在同一个 Jenkins 节点中加载另一个 groovy 脚本?

Jenkins 在 groovy 脚本中检索主动选择参数

如何在 Jenkins Groovy 中设置位置参数

如何在 Jenkins Email-Ext 中引用 groovy 脚本

Jenkins上的Groovy:Plot插件