本文转自 Bruceweien 51CTO博客,原文链接:
http://blog.51cto.com/bruceweien/1932395
1、开启Jelly Runner功能,点击administrator,进入管理员配置界面,依次选择system-advanced-Jelly Runner我们会看到以下英文提示As a security precaution, the Jelly Runner on this installation is currently disabled. To enable Jelly support, please start JIRA with "-Djira.jelly.on=true". For more information see the Jelly Documentation.看到这些则代表功能还没有开启。
2、在jira目录/bin下看有没有setenv.sh文件,有则打开在JVM_REQUIRED_ARGS="-Djava.awt.headless=true这个后面添加-Djira.jelly.on=true并保存,服务器是windows时则添加java -Djira.jelly.on=true
3、自定义邮件模板,进入/usr/local/atlassian-jira-4.4.5-standalone/atlassian-jira/WEB-INF/classes目录,打开email-template-id-mappings.xml文件按照里面的格式添加一个新的模板如下图:
图上id=17的则是我们刚添加的模板,name可以随便命名,template中间是模板文件名称,templatetype则是issueevent,修改完并保存。
4、 进入/usr/local/atlassian-jira-4.4.5-standalone/atlassian-jira/WEB-INF/classes目录,打开velocity.properties文件,设置class.resource.loader.cache=false再将#velocimacro.library.autoreload=true的#号去掉
5、 创建模板文件进入atlassian-jira/WEB-INF/classes/templates/email/subject,把issuecreated.vm这个文件复制一份,名字叫issueovertime.vm,这个就是图一上我们定义的xml文件名称
6、 进入/atlassian-jira/WEB-INF/classes/templates/email/html,同样复制把issuecreated.vm这个文件复制一份,名字叫issueovertime.vm
7、 重启jira
8、 检查Jelly Runner功能是否开启,如果开启了会看到下面图这样的
9、建立JQL搜索问题过滤器,点击issue-我的issue-新建-advanced输入以下查询语句,然后点击search,没有报错的话就点击左边的保存按钮。
project = 项目名称 and status = "open"AND updated <= -30m and updated >= startOfDay("8h") and updated <= startOfDay("20h")这语句意思为在项目名称下搜索在8点到20点之间的超过30分钟未更新的open状态的问题,然后保存查看这个过滤器的id,查看过滤器id方法为鼠标移动到那过滤器,浏览器网址有显示id号,需使用ie浏览器.
10、建立一个新的事件,进入管理员页面-system-Advanced-events-Add New Event事件名称随便定义,比如问题超时未更新提醒,Template选择Issue OverTime
11、建立工作流动作,进入要使用规则的工作流,比如系统运维这个项目使用的是yunat default(customized)这个工作流,那我们就在这里面建立工作流动作。点击问题- workflows找到yunat default(customized)点击工作流右边的steps,比如我想当issue处于ln Progress这个状态时执行新的动作,则在这下面建立新动作,点击Add Transition,动作名称可以与第10建立的事件名称一样,Destination Step选择ln Progress,其他的默认就行了,增加完在给这个动作设置权限,主要是为了防止别人去点击这个按钮。
12、新建jellyrunner脚本文件,进入/usr/local/atlassian-jira-4.4.5-standalone/home/data/目录建立jellyrunnerovertime.xml文件和jellyrunnerovertime.log文件,在jellyrunnerovertime.xml内添加如下内容:
<JiraJelly xmlns:jira="jelly:com.atlassian.jira.jelly.enterprise.JiraTagLib" xmlns:core="jelly:core" xmlns:log="jelly:log" >
<jira:Login username="管理员" password="管理员密码">
<log:warn>Running Inactivate issues service</log:warn>
<core:set var="comment"></core:set>
<core:set var="workflowStep" value="问题超时未更新提醒" />
<core:set var="workflowUser" value="system" />
<!-- Run the SearchRequestFilter -->
<jira:RunSearchRequest filterid="11530" var="issues" />
<core:forEach var="issue" items="${issues}">
<log:warn>Inactivating issue ${issue.key}</log:warn>
<jira:TransitionWorkflow key="${issue.key}" user="${workflowUser}" workflowAction="${workflowStep}" comment="${comment}"/>
</core:forEach>
</jira:Login>
</JiraJelly>
上面的管理员也可以填写其他有权限的管理员用户,问题超时未更新提醒是动作名称,11530是第9步建立的过滤器的id
13、 添加一个系统服务,点击system-advanced-services,名称比如为IssueOverTimeRemindUser,Class选择Run Jelly script(com.atlassian.jira.jelly.service.JellyService),Delay选择1,这里的1表示多久执行一次此服务,我们这里设置为1表示1分钟,添加服务后,在服务里找到该服务,点击编辑在Input File输入步骤12的脚本文件的绝对路径,比如此例子为:/usr/local/atlassian-jira-4.4.5-standalone/home/data/jellyrunnerovertime.xml,Output File输入步骤12的脚本日志的绝对路径,比如此例子为:/usr/local/atlassian-jira-4.4.5-standalone/home/data/jellyrunnerovertime.log
输出文件设置为:步骤12的日志文件的绝对路径,比如此例子为:/usr/local/atlassian-jira-4.4.5-standalone/home/data/jellyrunnerovertime.log
14、 设置邮件格式为html的,因为我们设置的是邮件模板是html格式的,点击system-mail-Send Email-Message Type-html
15、 重建索引,system-Indexing-Relndex
16、 使用jellyrunnerovertime.xml里面设置的管理员用户收藏步骤9建立的过滤器,收藏点击过滤器左边的星号颜色变成黄色后即可。
17、 添加邮件接收者,问题-Notification Schemes-Default Notification Scheme-问题超时未更新提醒(这里的问题超时未更新提醒事件是我们在步骤10建立的)-增加-选择需要通知的人和组或者项目。
18、 现在可以进行测试了,整个自动执行过程原理如下:
JIRA每隔1分钟执行下jellyrunnerovertime.xml这个脚本,即每隔1分钟用过滤器11530搜出满足条件的问题,再用管理员这个账户登录并执行下这些问题的“问题超时未更新提醒”动作。这个动作会触发“问题超时未更新提醒”事件。同时该事件又会根据通知方案里的配置来通知相关人员。
19、 如果要更改状态,请在工作流中相应的状态下增加“问题超时未更新提醒”动作,然后在过滤中也修改下状态。
20、 如果要修改邮件模板标题请进入步骤5中的issueovertime.vm文件输入你想要显示的文字,比如你的issue超时了。如果要修改邮件模板内容,请进入步骤6中的issueovertime.vm文件,比如你要在提醒邮件中显示“issue状态“项目,可以按照里面的格式添加#parse("templates/email/html/includes/fields/status.vm")
比如你要在邮件中显示自定义内容,可以这样输入
<td id="email-fields" style="padding:0 32px 32px 32px;">
<p style=’margin-bottom:10px;’>自定义内容</p>
<table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">