Jira 吉拉问题提醒

Jira 吉拉问题提醒,jira,Jira,如何在问题开放24/36/48小时时通过电子邮件向预定义邮件组发送通知 这些类型中的任何一种都应该有一个提醒(24/36/48),如果问题被重新打开,则应重新开始计数。这最好通过以下方式实现 首先为每种类型(24小时、36小时等)创建一个搜索筛选器。注意:在这一点上,我们必须更准确地理解“24小时开放”的含义。我假设您关心的问题是长期未分配的 因此,要过滤掉这些问题,您可以使用如下过滤器: created <= -24h and status = Open and assignee is

如何在问题开放24/36/48小时时通过电子邮件向预定义邮件组发送通知

这些类型中的任何一种都应该有一个提醒(24/36/48),如果问题被重新打开,则应重新开始计数。

这最好通过以下方式实现

首先为每种类型(24小时、36小时等)创建一个搜索筛选器。注意:在这一点上,我们必须更准确地理解“24小时开放”的含义。我假设您关心的问题是长期未分配的

因此,要过滤掉这些问题,您可以使用如下过滤器:

created <= -24h and status = Open and assignee is null
created Manage Filters有一列“subscriptions”,您可以在其中为自己或任何Jira组订阅此筛选器。只要每天使用时间表,每天间隔一次,选择一个方便的时间就可以了

对重新打开的问题使用相同的方法,但将筛选查询更改为:

status = Reopened AND updated <= -24h

status=重新打开并更新经过大量搜索后,我将其解决如下:

created <= -24h and status = Open and assignee is null
  • 创建了一个名为“打开时间”的自定义字段,该字段是一个“日期-时间”字段,用于保存问题打开的时间
  • 创建了一个名为“通知”的自定义字段—一个只读文本字段
  • 使用,我创建了一个post函数,并将其放置在每个转换到“打开”状态时。这是为了保持问题的开放时间
守则:

from com.atlassian.jira import ComponentManager
from datetime import datetime

opend_since_field = "customfield_10001"

# get opened since custom field:
cfm = ComponentManager.getInstance().getCustomFieldManager()
# get current time
currentTime = datetime.today()
# save current time
issue.setCustomFieldValue(cfm.getCustomFieldObject(opend_since_field),currentTime)
  • 我创建了一个新的过滤器,以获取开放时间超过24小时的问题列表:
JQL:

  • 最后,我使用了这个方法编写了一个python脚本,计划每5分钟运行一次。剧本 读取从筛选器发出的所有提醒,提取所有处于“打开”状态超过24小时/36小时/48小时的提醒,发送提醒电子邮件,并将其标记为已通知,因此每种类型仅发送一个提醒
python代码:

#!/usr/bin/python

# Refer to the XML-RPC Javadoc to see what calls are available:
# http://docs.atlassian.com/software/jira/docs/api/rpc-jira-plugin/latest/com/atlassian/jira/rpc/xmlrpc/XmlRpcService.html
# /home/issues_reminder.py

import xmlrpclib
import time
from time import mktime
from datetime import datetime
from datetime import timedelta
import smtplib,email
from smtplib import SMTP 
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders

# Jira connction info
server = 'https://your.jira.com/rpc/xmlrpc'
user = 'user'
password = 'password'
filter = '10302' # Filter ID
# Email definitions 
smtpserver = 'mail.server.com'
fromAddr = 'support@your.jira.com'
mail_user = 'jira_admin@your.domain.com'
mail_password = 'password'
toAddr = 'support@your.domain.com'
mysubject = "hrs Issue notification!!!"
opend_since_field = "customfield_10101"


COMMASPACE = ', '
def email_issue(issue,esc_time):
    # create html email
    subject = '['+issue+'] '+esc_time+mysubject
    html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" '
    html +='"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">'
    html +='<body style="font-size:12px;font-family:Verdana">'
    html +='<p align="center"><img src="your_logo.jpg" alt="logo" height="43" width="198"></p> '
    html +='<p> The issue ['+issue+'] is open for over '+esc_time+' hours.</p>'
    html +='<p> A link to view the issue: https://your.jira.com/browse/'+issue+'.</p>'
    html +='<BR><p> This is an automated email sent from Jira.</p>'
    html +='</body></html>'
    emailMsg = email.MIMEMultipart.MIMEMultipart('alternative')
    emailMsg['Subject'] = subject
    emailMsg['From'] = fromAddr
    emailMsg['To'] = toAddr
    emailMsg.attach(MIMEText(html, 'html'))
    # Send the email
    emailserver = SMTP(smtpserver) # ip or domain name of smtp server
    emailserver.login(mail_user, mail_password)
    emailserver.sendmail(fromAddr, [toAddr], emailMsg.as_string())
    emailserver.quit()
    return


s = xmlrpclib.ServerProxy(server)
auth = s.jira1.login(user, password)

esc12List = []
esc24List = []
esc48List = []


issues = s.jira1.getIssuesFromFilter(auth, filter)
print "Modifying issue..."
for issue in issues:
        creation = 0;
        # get open since time
        for customFields in issue['customFieldValues']:
                if customFields['customfieldId'] == opend_since_field :
                        print "found field!"+  customFields['values']
                        creation = customFields['values']
        if (creation == 0):
                creation = issue['created']
                print "field not found"
    creationTime = datetime.fromtimestamp(mktime(time.strptime(creation, '%d/%b/%y %I:%M %p')))
    currentTime = datetime.fromtimestamp(mktime(time.gmtime()))
    delta = currentTime - creationTime
    esc12 = timedelta(hours=12)
    esc24 = timedelta(hours=24)
    esc48 = timedelta(hours=48)
    print "\nchecking issue "+issue['key']
    if (delta < esc12):
        print "less than 12 hours"
        print "not updating"
        continue
    if (delta < esc24):
        print "less than 24 hours"
        for customFields in issue['customFieldValues']:
            if customFields['customfieldId'] == 'customfield_10412':
                if customFields['values'] == '12h':
                    print "not updating"
                    break
                else:
                    print "updating !!!"
                    s.jira1.updateIssue(auth, issue['key'], {"customfield_10412": ["12h"]})
                    esc12List.append(issue['key'])
                    break
        continue
    if (delta < esc48):
        print "less than 48 hours"
        for customFields in issue['customFieldValues']:
            if customFields['customfieldId'] == 'customfield_10412':
                if customFields['values'] == '24h':
                    print "not updating"
                    break
                else:
                    print "updating !!!"
                    s.jira1.updateIssue(auth, issue['key'], {"customfield_10412": ["24h"]})
                    esc24List.append(issue['key'])
                    break
        continue
    print "more than 48 hours"
    for customFields in issue['customFieldValues']:
        if customFields['customfieldId'] == 'customfield_10412':
            if customFields['values'] == '48h':
                print "not updating"
                break
            else:
                print "updating !!!"
                s.jira1.updateIssue(auth, issue['key'], {"customfield_10412": ["48h"]})
                esc48List.append(issue['key'])
                break

for key in esc12List:
    email_issue(key,'12')
for key in esc24List:
    email_issue(key,'24')
for key in esc48List:
    email_issue(key,'48')
#/usr/bin/python
#请参阅XML-RPC Javadoc以查看可用的调用:
# http://docs.atlassian.com/software/jira/docs/api/rpc-jira-plugin/latest/com/atlassian/jira/rpc/xmlrpc/XmlRpcService.html
#/home/issues\u.py
导入xmlrpclib
导入时间
自始至终
从日期时间导入日期时间
从日期时间导入时间增量
导入smtplib、电子邮件
从smtplib导入SMTP
从email.MIMEMultipart导入MIMEMultipart
从email.MIMEBase导入MIMEBase
从email.MIMEText导入MIMEText
从电子邮件导入编码器
#吉拉连接信息
服务器https://your.jira.com/rpc/xmlrpc'
用户='user'
密码='password'
过滤器='10302'#过滤器ID
#电子邮件定义
smtpserver='mail.server.com'
fromAddr=support@your.jira.com'
mail_user='jira_admin@your.domain.com'
邮件密码='password'
解决问题support@your.domain.com'
mysubject=“hrs问题通知!!!”
opend_自_field=“customfield_10101”
逗号空间=','
def电子邮件问题(问题、esc时间):
#创建html电子邮件
subject='['+issue+']'+esc_time+mysubject
html=“”
html+=''
html+='

' html+='问题['+issue+']的开放时间超过'+esc_time+'小时。

' html+='查看问题的链接:https://your.jira.com/browse/“+问题+”。

' html+='
这是一封由Jira自动发送的电子邮件。

' html+='' emailMsg=email.MIMEMultipart.MIMEMultipart('alternative') emailMsg['Subject']=主题 emailMsg['From']=fromAddr emailMsg['To']=ToAddress emailMsg.attach(MIMEText(html,'html')) #发送电子邮件 emailserver=SMTP(smtpserver)#SMTP服务器的ip或域名 emailserver.login(邮件用户、邮件密码) emailserver.sendmail(fromAddr[toAddr],emailMsg.as\u string()) emailserver.quit() 返回 s=xmlrpclib.ServerProxy(服务器) auth=s.jira1.login(用户、密码) esc12List=[] esc24List=[] esc48List=[] issues=s.jira1.getIssuesFromFilter(auth,filter) 打印“修改问题…” 发行中的问题: 创建=0; #从早到晚开门 对于问题中的customFields['customFieldValues']: 如果customFields['customfieldId']==opend\u自\u字段: 打印“找到字段!”+自定义字段['values'] 创建=自定义字段['values'] 如果(创建==0): 创建=问题['created'] 打印“未找到字段” creationTime=datetime.fromtimestamp(mktime(time.strTime(创建,'%d/%b/%y%I:%M%p')) currentTime=datetime.fromtimestamp(mktime(time.gmtime())) delta=当前时间-creationTime esc12=时间增量(小时=12) esc24=时间增量(小时=24) esc48=时间增量(小时=48) 打印“\n检查问题”+问题['key'] 如果(δ