Skip to content

Commit c5d1e54

Browse files
authored
fix: must be restarted to take effect after modify server url (#253)
Signed-off-by: BobDu <i@bobdu.cc>
1 parent 804897f commit c5d1e54

File tree

5 files changed

+79
-74
lines changed

5 files changed

+79
-74
lines changed

src/main/java/io/jenkins/plugins/DingTalkGlobalConfig.java

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.util.Optional;
1313
import java.util.Set;
1414
import java.util.stream.Collectors;
15+
import io.jenkins.plugins.service.DingTalkService;
1516
import jenkins.model.Jenkins;
1617
import lombok.Getter;
1718
import lombok.ToString;
@@ -86,6 +87,7 @@ public void setProxyConfig(DingTalkProxyConfig proxyConfig) {
8687

8788
@DataBoundSetter
8889
public void setRobotConfigs(ArrayList<DingTalkRobotConfig> robotConfigs) {
90+
DingTalkService.getInstance().resetSenders();
8991
this.robotConfigs = robotConfigs;
9092
}
9193

src/main/java/io/jenkins/plugins/DingTalkRunListener.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import io.jenkins.plugins.model.BuildJobModel;
2222
import io.jenkins.plugins.model.ButtonModel;
2323
import io.jenkins.plugins.model.MessageModel;
24-
import io.jenkins.plugins.service.impl.DingTalkServiceImpl;
24+
import io.jenkins.plugins.service.DingTalkService;
2525
import io.jenkins.plugins.tools.DingTalkUtils;
2626
import io.jenkins.plugins.tools.Logger;
2727
import io.jenkins.plugins.tools.Utils;
@@ -43,8 +43,6 @@
4343
@Extension
4444
public class DingTalkRunListener extends RunListener<Run<?, ?>> {
4545

46-
private final DingTalkServiceImpl service = new DingTalkServiceImpl();
47-
4846
@Override
4947
public void onStarted(Run<?, ?> run, TaskListener listener) {
5048
DingTalkGlobalConfig globalConfig = DingTalkGlobalConfig.getInstance();
@@ -329,7 +327,7 @@ private void send(Run<?, ?> run, TaskListener listener, NoticeOccasionEnum notic
329327
DingTalkUtils.log(listener, "当前机器人信息,%s", Utils.toJson(item));
330328
DingTalkUtils.log(listener, "发送的消息详情,%s", Utils.toJson(message));
331329

332-
String msg = service.send(robotId, msgModel);
330+
String msg = DingTalkService.getInstance().send(robotId, msgModel);
333331

334332
if (msg != null) {
335333
result.add(msg);

src/main/java/io/jenkins/plugins/DingTalkStep.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import io.jenkins.plugins.enums.MsgTypeEnum;
1010
import io.jenkins.plugins.model.ButtonModel;
1111
import io.jenkins.plugins.model.MessageModel;
12-
import io.jenkins.plugins.service.impl.DingTalkServiceImpl;
12+
import io.jenkins.plugins.service.DingTalkService;
1313
import io.jenkins.plugins.tools.DingTalkUtils;
1414
import io.jenkins.plugins.tools.Logger;
1515
import io.jenkins.plugins.tools.Utils;
@@ -74,8 +74,6 @@ public class DingTalkStep extends Step {
7474

7575
private String rootPath = Jenkins.get().getRootUrl();
7676

77-
private DingTalkServiceImpl service = new DingTalkServiceImpl();
78-
7977
@DataBoundConstructor
8078
public DingTalkStep(String robot) {
8179
this.robot = robot;
@@ -200,7 +198,7 @@ public String send(Run<?, ?> run, EnvVars envVars, TaskListener listener) {
200198
Utils.toJson(DingTalkGlobalConfig.getRobot(robot)));
201199
DingTalkUtils.log(listener, "发送的消息详情,%s", Utils.toJson(message));
202200

203-
return service.send(envVars.expand(robot), message);
201+
return DingTalkService.getInstance().send(envVars.expand(robot), message);
204202
}
205203

206204
@Override
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,84 @@
11
package io.jenkins.plugins.service;
22

3+
import io.jenkins.plugins.DingTalkGlobalConfig;
4+
import io.jenkins.plugins.DingTalkRobotConfig;
5+
import io.jenkins.plugins.enums.MsgTypeEnum;
36
import io.jenkins.plugins.model.MessageModel;
7+
import io.jenkins.plugins.sdk.DingTalkSender;
8+
import java.net.Proxy;
9+
import java.util.ArrayList;
10+
import java.util.Map;
11+
import java.util.Optional;
12+
import java.util.concurrent.ConcurrentHashMap;
413

514
/**
615
* 发送消息
716
*
817
* @author liuwei
918
*/
10-
public interface DingTalkService {
19+
public class DingTalkService {
1120

12-
String send(String robot, MessageModel msg);
21+
private static volatile DingTalkService instance;
22+
private final Map<String, DingTalkSender> senders = new ConcurrentHashMap<>();
23+
24+
public static DingTalkService getInstance() {
25+
if (instance == null) {
26+
synchronized (DingTalkService.class) {
27+
if (instance == null) {
28+
instance = new DingTalkService();
29+
}
30+
}
31+
}
32+
return instance;
33+
}
34+
35+
private DingTalkSender getSender(String robotId) {
36+
DingTalkSender sender = senders.get(robotId);
37+
if (sender == null) {
38+
synchronized (senders) {
39+
sender = senders.get(robotId);
40+
if (sender == null) {
41+
DingTalkGlobalConfig globalConfig = DingTalkGlobalConfig.getInstance();
42+
Proxy proxy = globalConfig.getProxy();
43+
ArrayList<DingTalkRobotConfig> robotConfigs = globalConfig.getRobotConfigs();
44+
Optional<DingTalkRobotConfig> robotConfigOptional = robotConfigs.stream()
45+
.filter(item -> robotId.equals(item.getId()))
46+
.findAny();
47+
if (robotConfigOptional.isPresent()) {
48+
DingTalkRobotConfig robotConfig = robotConfigOptional.get();
49+
sender = new DingTalkSender(robotConfig, proxy);
50+
senders.put(robotId, sender);
51+
}
52+
}
53+
}
54+
}
55+
return sender;
56+
}
57+
58+
public void resetSenders() {
59+
senders.clear();
60+
}
61+
62+
public String send(String robotId, MessageModel msg) {
63+
MsgTypeEnum type = msg.getType();
64+
DingTalkSender sender = getSender(robotId);
65+
if (sender == null) {
66+
return String.format("ID 为 %s 的机器人不存在。", robotId);
67+
}
68+
if (type == null) {
69+
return "消息类型【type】不能为空";
70+
}
71+
switch (type) {
72+
case TEXT:
73+
return sender.sendText(msg);
74+
case LINK:
75+
return sender.sendLink(msg);
76+
case MARKDOWN:
77+
return sender.sendMarkdown(msg);
78+
case ACTION_CARD:
79+
return sender.sendActionCard(msg);
80+
default:
81+
return String.format("错误的消息类型:%s", type.name());
82+
}
83+
}
1384
}

src/main/java/io/jenkins/plugins/service/impl/DingTalkServiceImpl.java

-64
This file was deleted.

0 commit comments

Comments
 (0)