Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
H
holmes
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
QA
holmes
Commits
00271737
Commit
00271737
authored
Feb 11, 2022
by
黎博
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
线上研发工单相关
parent
f7f0cad1
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
145 additions
and
23 deletions
+145
-23
JiraController.java
.../java/cn/qg/holmes/controller/quality/JiraController.java
+5
-0
WebhookService.java
...ain/java/cn/qg/holmes/service/quality/WebhookService.java
+10
-0
WebhookServiceImpl.java
...cn/qg/holmes/service/quality/impl/WebhookServiceImpl.java
+101
-0
DingdingUtils.java
src/main/java/cn/qg/holmes/utils/DingdingUtils.java
+29
-23
No files found.
src/main/java/cn/qg/holmes/controller/quality/JiraController.java
View file @
00271737
...
...
@@ -8,6 +8,7 @@ import cn.qg.holmes.entity.quality.SendSmokingResultVo;
import
cn.qg.holmes.service.quality.DingRobotService
;
import
cn.qg.holmes.service.quality.JiraBugPoolService
;
import
cn.qg.holmes.service.quality.JiraService
;
import
cn.qg.holmes.service.quality.WebhookService
;
import
cn.qg.holmes.utils.DingdingUtils
;
import
com.alibaba.fastjson.JSON
;
import
com.atlassian.jira.rest.client.api.domain.BasicProject
;
...
...
@@ -41,6 +42,9 @@ public class JiraController {
@Autowired
DingRobotService
dingRobotService
;
@Autowired
WebhookService
webhookService
;
/**
* jira webhook
* @param request
...
...
@@ -72,6 +76,7 @@ public class JiraController {
}
br
.
close
();
log
.
info
(
"收到线上JIRA BUG推送:{}"
,
jiraData
);
webhookService
.
handleProdJiraBugUpdate
(
String
.
valueOf
(
jiraData
));
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
...
...
src/main/java/cn/qg/holmes/service/quality/WebhookService.java
0 → 100644
View file @
00271737
package
cn
.
qg
.
holmes
.
service
.
quality
;
public
interface
WebhookService
{
/**
* 处理线上jira bug状态变化
* @param jiraData
*/
void
handleProdJiraBugUpdate
(
String
jiraData
);
}
src/main/java/cn/qg/holmes/service/quality/impl/WebhookServiceImpl.java
0 → 100644
View file @
00271737
package
cn
.
qg
.
holmes
.
service
.
quality
.
impl
;
import
cn.qg.holmes.service.quality.WebhookService
;
import
cn.qg.holmes.utils.DingdingUtils
;
import
com.jayway.jsonpath.JsonPath
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
@Service
public
class
WebhookServiceImpl
implements
WebhookService
{
@Override
public
void
handleProdJiraBugUpdate
(
String
jiraData
)
{
String
webhook
=
"https://oapi.dingtalk.com/robot/send?access_token=be220b4bd17f311d70365a0ee81a659b54f06d52f1ee8d4d7d1051a183a266e1"
;
String
webhookEvent
=
JsonPath
.
read
(
jiraData
,
"$.webhookEvent"
);
String
eventTypeName
=
JsonPath
.
read
(
jiraData
,
"$.issue_event_type_name"
);
String
creator
=
JsonPath
.
read
(
jiraData
,
"$.issue.fields.creator.displayName"
);
String
assignee
=
""
;
if
(
JsonPath
.
read
(
jiraData
,
"$.issue.fields.assignee"
)
==
null
)
{
assignee
=
"未分配"
;
}
else
{
assignee
=
JsonPath
.
read
(
jiraData
,
"$.issue.fields.assignee.displayName"
);
}
String
key
=
JsonPath
.
read
(
jiraData
,
"$.issue.key"
);
String
summary
=
JsonPath
.
read
(
jiraData
,
"$.issue.fields.summary"
);
String
priority
=
JsonPath
.
read
(
jiraData
,
"$.issue.fields.priority.name"
);
String
module
=
JsonPath
.
read
(
jiraData
,
"$.issue.fields.components[0].name"
);
List
<
String
>
attachmentList
=
JsonPath
.
read
(
jiraData
,
"$.issue.fields.attachment[*].content"
);
// BUG创建的时候发送通知
if
(
StringUtils
.
equals
(
webhookEvent
,
"jira:issue_created"
))
{
String
title
=
"线上研发工单提交"
;
String
content
=
creator
+
"提交了线上研发工单:"
+
key
;
content
+=
"概要:["
+
summary
+
"]("
+
"http://jira2.quantgroup.cn/browse/"
+
key
+
")"
+
"\n\n"
+
"- 优先级:"
+
priority
+
"\n"
+
"- 模块:"
+
module
+
"\n"
+
"- 经办人:"
+
assignee
+
"\n\n"
;
for
(
String
attachment:
attachmentList
)
{
content
+=
"\n"
;
}
DingdingUtils
.
sendToDingding
(
DingdingUtils
.
buildMarkdownMsg
(
title
,
content
,
true
),
webhook
);
}
// BUG更新的时候发送通知
if
(
StringUtils
.
equals
(
webhookEvent
,
"jira:issue_updated"
))
{
// 钉钉消息title
String
title
=
"研发工单更新"
;
String
issueUrl
=
"http://jira2.quantgroup.cn/browse/"
+
key
;
// 钉钉消息内容
String
content
=
""
;
switch
(
eventTypeName
)
{
case
"issue_work_started"
:
// BUG状态变为【处理中】
content
+=
"研发工单 "
+
key
+
" 状态更新:"
;
content
+=
"概要:["
+
summary
+
"]("
+
issueUrl
+
")"
+
"\n\n"
;
content
+=
"状态变更为:【处理中】\n\n"
;
DingdingUtils
.
sendToDingding
(
DingdingUtils
.
buildMarkdownMsg
(
title
,
content
,
false
),
webhook
);
break
;
case
"issue_resolved"
:
// BUG状态变为【已解决】
content
+=
"研发工单 "
+
key
+
" 状态更新:"
;
content
+=
"概要:["
+
summary
+
"]("
+
issueUrl
+
")"
+
"\n\n"
;
content
+=
"状态变更为:【已解决】\n\n"
;
DingdingUtils
.
sendToDingding
(
DingdingUtils
.
buildMarkdownMsg
(
title
,
content
,
false
),
webhook
);
break
;
case
"issue_reopened"
:
// BUG状态变为【重新打开】
content
+=
"研发工单 "
+
key
+
" 状态更新:"
;
content
+=
"概要:["
+
summary
+
"]("
+
issueUrl
+
")"
+
"\n\n"
;
content
+=
"状态变更为:【重新打开】\n\n"
;
DingdingUtils
.
sendToDingding
(
DingdingUtils
.
buildMarkdownMsg
(
title
,
content
,
false
),
webhook
);
break
;
case
"issue_closed"
:
// BUG状态变为【关闭】
// 暂不处理
break
;
case
"issue_commented"
:
// 新增BUG备注
content
+=
"研发工单 "
+
key
+
" 新增备注:"
;
content
+=
"概要:["
+
summary
+
"]("
+
issueUrl
+
")"
+
"\n\n"
;
content
+=
"新增备注:\n\n"
;
content
+=
JsonPath
.
read
(
jiraData
,
"$.comment.body"
);
DingdingUtils
.
sendToDingding
(
DingdingUtils
.
buildMarkdownMsg
(
title
,
content
,
false
),
webhook
);
break
;
case
"issue_updated"
:
// BUG更新
String
changedField
=
JsonPath
.
read
(
jiraData
,
"$.changelog.items[0].field"
);
if
(
StringUtils
.
equals
(
changedField
,
"assignee"
))
{
content
+=
"研发工单 "
+
key
+
" 经办人变更:"
;
content
+=
"概要:["
+
summary
+
"]("
+
issueUrl
+
")"
+
"\n\n"
;
content
+=
"- 原经办人:"
+
JsonPath
.
read
(
jiraData
,
"$.changelog.items[0].fromString"
)
+
"\n"
;
content
+=
"- 新经办人:"
+
JsonPath
.
read
(
jiraData
,
"$.changelog.items[0].toString"
)
+
"\n"
;
DingdingUtils
.
sendToDingding
(
DingdingUtils
.
buildMarkdownMsg
(
title
,
content
,
false
),
webhook
);
}
break
;
default
:
break
;
}
}
}
}
src/main/java/cn/qg/holmes/utils/DingdingUtils.java
View file @
00271737
package
cn
.
qg
.
holmes
.
utils
;
import
cn.qg.holmes.entity.quality.DingRobot
;
import
cn.qg.holmes.service.quality.JiraService
;
import
com.alibaba.fastjson.JSON
;
import
com.atlassian.jira.rest.client.api.domain.Issue
;
import
lombok.extern.slf4j.Slf4j
;
import
org.joda.time.DateTime
;
import
org.joda.time.Days
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
java.text.DateFormat
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
/**
* 钉钉发送消息类
...
...
@@ -78,6 +73,19 @@ public class DingdingUtils {
return
buildMarkdownMsg
(
title
,
content
,
true
);
}
public
static
String
buildProdBugCreateMarkdownMsg
(
String
key
,
String
summary
,
String
creator
,
String
assignee
,
String
priority
,
String
module
,
List
<
String
>
attachmentList
)
{
String
title
=
"线上研发工单"
;
String
content
=
creator
+
"提交了研发工单:"
+
key
;
content
+=
"概要:["
+
summary
+
"]("
+
"http://jira2.quantgroup.cn/browse/"
+
key
+
")"
+
"\n\n"
+
"- 优先级:"
+
priority
+
"\n"
+
"- 模块:"
+
module
+
"\n"
+
"- 经办人:"
+
assignee
+
"\n\n"
;
for
(
String
attachment:
attachmentList
)
{
content
+=
"\n"
;
}
return
buildMarkdownMsg
(
title
,
content
,
false
);
}
/**
* for 数据工单
* 根据issueList构建未解决issueList的markdown格式
...
...
@@ -326,24 +334,22 @@ public class DingdingUtils {
}
public
static
void
main
(
String
[]
args
)
{
// String markdown = buildMarkdownMsg("YXM-1499", "【羊小咩v7.6.00】【VCC首次交易率提升专题】巴拉巴拉", "黎博", "于巧玲", "p1", "kddsp");
// String markdown = buildPipelineMarkdownMsg("holmes", "master", "bo.li", "测试", "2021-06-03 14:59:45", "fe");
// sendToDingding(markdown, "https://oapi.dingtalk.com/robot/send?access_token=835663338d638e40daaf3ab358af741ef0680a826a962c91bedc53b149d85ee1");
// String str = "2021-06-03T09:23:00Z";
// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// String commitDate = simpleDateFormat.format(DateTime.parse(str).toDate());
// System.out.println(commitDate);
String
model
=
"(\\{\\{[A-Za-z0-9]+}})"
;
String
sql
=
"select * from vcc_talos.risk_record where uuid={{uuid}} and userId={{userId}}"
;
Pattern
pattern
=
Pattern
.
compile
(
model
);
Matcher
matcher
=
pattern
.
matcher
(
sql
);
while
(
matcher
.
find
())
{
String
replace
=
matcher
.
group
();
// 去掉首位的{{和}}
String
tempKey
=
replace
.
substring
(
2
,
replace
.
length
()
-
2
);
sql
=
sql
.
replace
(
replace
,
"'"
+
"1234"
+
"'"
);
String
title
=
"测试同学提交BUG"
;
String
issueUrl
=
"http://jira2.quantgroup.cn/browse/CSXT-178"
;
String
content
=
"黎博提交了BUG:CSXT-178 \n\n"
;
List
<
String
>
attachmentList
=
new
ArrayList
<>();
// attachmentList.add("http://jira2.quantgroup.cn/secure/attachment/17004/%E5%BD%A9%E8%89%B2Q_%E7%94%BB%E6%9D%BF+1.jpg");
attachmentList
.
add
(
"http://jira2.quantgroup.cn/secure/attachment/17013/image.png"
);
attachmentList
.
add
(
"https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png"
);
content
+=
"概要:["
+
"【定时推送】啦啦啦"
+
"]("
+
issueUrl
+
")"
+
"\n\n"
+
"- 优先级:"
+
"P3一般"
+
"\n"
+
"- 模块:"
+
"kdsp"
+
"\n"
+
"- 经办人:"
+
"王晓彤"
+
"\n"
;
// content += "> 附件:\n";
for
(
String
attachment:
attachmentList
)
{
content
+=
"\n"
;
}
System
.
out
.
println
(
sql
);
String
msg
=
buildMarkdownMsg
(
title
,
content
,
false
);
sendToDingding
(
msg
,
"https://oapi.dingtalk.com/robot/send?access_token=835663338d638e40daaf3ab358af741ef0680a826a962c91bedc53b149d85ee1"
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment