Skip to content

Commit 3e91374

Browse files
committed
fix: 合并环境变量时发生 NPE 错误
close #198,#199
1 parent bfa42fe commit 3e91374

File tree

2 files changed

+35
-19
lines changed

2 files changed

+35
-19
lines changed

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

+16-6
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import io.jenkins.plugins.tools.DingTalkUtils;
2525
import io.jenkins.plugins.tools.Logger;
2626
import io.jenkins.plugins.tools.Utils;
27-
import java.io.IOException;
2827
import java.util.ArrayList;
2928
import java.util.HashMap;
3029
import java.util.List;
@@ -65,6 +64,9 @@ public void onCompleted(Run<?, ?> run, @NonNull TaskListener listener) {
6564
} catch (Exception e) {
6665
e.printStackTrace();
6766
DingTalkUtils.log(listener, "发送消息时报错: %s", e);
67+
}finally {
68+
// 重置环境变量
69+
PipelineEnvContext.reset();
6870
}
6971
}
7072

@@ -162,14 +164,22 @@ private EnvVars getEnvVars(Run<?, ?> run, TaskListener listener) {
162164
EnvVars jobEnvVars;
163165
try {
164166
jobEnvVars = run.getEnvironment(listener);
165-
} catch (InterruptedException | IOException e) {
167+
} catch (Exception e) {
166168
jobEnvVars = new EnvVars();
167169
log.error(e);
168-
DingTalkUtils.log(listener, "获取环境变量时发生异常,将只使用 jenkins 默认的环境变量。");
170+
DingTalkUtils.log(listener, "获取 job 任务的环境变量时发生异常");
171+
DingTalkUtils.log(listener, ExceptionUtils.getStackTrace(e));
172+
Thread.currentThread().interrupt();
173+
}
174+
try {
175+
EnvVars pipelineEnvVars = PipelineEnvContext.get();
176+
jobEnvVars.overrideAll(pipelineEnvVars);
177+
}catch (Exception e){
178+
log.error(e);
179+
DingTalkUtils.log(listener, "获取 pipeline 环境变量时发生异常");
169180
DingTalkUtils.log(listener, ExceptionUtils.getStackTrace(e));
170181
}
171-
EnvVars pipelineEnvVars = PipelineEnvContext.get();
172-
return jobEnvVars.overrideAll(pipelineEnvVars);
182+
return jobEnvVars;
173183
}
174184

175185
private boolean skip(TaskListener listener, NoticeOccasionEnum noticeOccasion,
@@ -238,7 +248,7 @@ private void send(Run<?, ?> run, TaskListener listener, NoticeOccasionEnum notic
238248
.executorName(executorName)
239249
.executorMobile(executorMobile)
240250
.content(
241-
envVars.expand(content).replaceAll("\\\\n", "\n")
251+
envVars.expand(content).replace("\\\\n", "\n")
242252
)
243253
.build()
244254
.toMarkdown();

src/main/java/io/jenkins/plugins/context/PipelineEnvContext.java

+19-13
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,26 @@
44

55
public class PipelineEnvContext {
66

7-
private final static ThreadLocal<EnvVars> store = new ThreadLocal<>();
7+
private static final ThreadLocal<EnvVars> store = new ThreadLocal<>();
88

9-
public static void merge(EnvVars value) {
10-
EnvVars current = store.get();
9+
public static void merge(EnvVars value) {
10+
if (value == null) {
11+
return;
12+
}
13+
EnvVars current = store.get();
14+
if (current == null) {
15+
store.set(value);
16+
} else {
17+
current.overrideAll(value);
18+
}
19+
}
1120

12-
if (current == null) {
13-
store.set(value);
14-
} else {
15-
current.overrideAll(value);
16-
}
17-
}
18-
19-
public static EnvVars get() {
20-
return store.get();
21-
}
21+
public static EnvVars get() {
22+
EnvVars current = store.get();
23+
return current == null ? new EnvVars() : current;
24+
}
2225

26+
public static void reset() {
27+
store.remove();
28+
}
2329
}

0 commit comments

Comments
 (0)