Skip to content

Commit 8dfd0b1

Browse files
committed
feat: 支持读取 pipeline 中定义的环境变量
close #195
1 parent 2518904 commit 8dfd0b1

File tree

4 files changed

+56
-7
lines changed

4 files changed

+56
-7
lines changed

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

+8-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import hudson.model.TaskListener;
1414
import hudson.model.User;
1515
import hudson.model.listeners.RunListener;
16+
import io.jenkins.plugins.context.PipelineEnvContext;
1617
import io.jenkins.plugins.enums.BuildStatusEnum;
1718
import io.jenkins.plugins.enums.MsgTypeEnum;
1819
import io.jenkins.plugins.enums.NoticeOccasionEnum;
@@ -158,16 +159,17 @@ private Map<String, String> getUser(Run<?, ?> run, TaskListener listener) {
158159
}
159160

160161
private EnvVars getEnvVars(Run<?, ?> run, TaskListener listener) {
161-
EnvVars envVars;
162+
EnvVars jobEnvVars;
162163
try {
163-
envVars = run.getEnvironment(listener);
164+
jobEnvVars = run.getEnvironment(listener);
164165
} catch (InterruptedException | IOException e) {
165-
envVars = new EnvVars();
166+
jobEnvVars = new EnvVars();
166167
log.error(e);
167-
log(listener, "获取环境变量时发生异常,将只使用 jenkins 默认的环境变量。");
168-
log(listener, ExceptionUtils.getStackTrace(e));
168+
DingTalkUtils.log(listener, "获取环境变量时发生异常,将只使用 jenkins 默认的环境变量。");
169+
DingTalkUtils.log(listener, ExceptionUtils.getStackTrace(e));
169170
}
170-
return envVars;
171+
EnvVars pipelineEnvVars = PipelineEnvContext.get();
172+
return jobEnvVars.overrideAll(pipelineEnvVars);
171173
}
172174

173175
private boolean skip(TaskListener listener, NoticeOccasionEnum noticeOccasion,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package io.jenkins.plugins;
2+
3+
import hudson.EnvVars;
4+
import hudson.Extension;
5+
import io.jenkins.plugins.context.PipelineEnvContext;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.jenkinsci.plugins.workflow.flow.StepListener;
8+
import org.jenkinsci.plugins.workflow.steps.Step;
9+
import org.jenkinsci.plugins.workflow.steps.StepContext;
10+
import org.springframework.lang.NonNull;
11+
12+
@Slf4j
13+
@Extension
14+
public class DingTalkStepListener implements StepListener {
15+
@Override
16+
public void notifyOfNewStep(@NonNull Step step, @NonNull StepContext context) {
17+
try {
18+
EnvVars vars = context.get(EnvVars.class);
19+
PipelineEnvContext.merge(vars);
20+
} catch (Exception e) {
21+
log.error("钉钉插件在获取 pipeline 中的环境变量时异常", e);
22+
}
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.jenkins.plugins.context;
2+
3+
import hudson.EnvVars;
4+
5+
public class PipelineEnvContext {
6+
7+
private final static ThreadLocal<EnvVars> store = new ThreadLocal<>();
8+
9+
public static void merge(EnvVars value) {
10+
EnvVars current = store.get();
11+
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+
}
22+
23+
}

src/main/java/io/jenkins/plugins/sdk/DingTalkSender.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ private String call(DingTalkRobotRequest request) {
123123
return body;
124124
}
125125
} catch (IOException e) {
126-
log.error("钉钉消息发送失败", e);
126+
log.error("钉钉消息发送失败", e);
127127
return ExceptionUtils.getStackTrace(e);
128128
}
129129
return null;

0 commit comments

Comments
 (0)