Skip to content

Commit

Permalink
feat: pipeline 模式支持输出日志
Browse files Browse the repository at this point in the history
  • Loading branch information
liuweiGL committed Feb 5, 2023
1 parent 646d2a3 commit 2518904
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 40 deletions.
7 changes: 5 additions & 2 deletions src/main/java/io/jenkins/plugins/DingTalkGlobalConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import java.net.Proxy;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import jenkins.model.Jenkins;
Expand All @@ -34,8 +36,6 @@
public class DingTalkGlobalConfig extends Descriptor<DingTalkGlobalConfig> implements
Describable<DingTalkGlobalConfig> {

private static volatile DingTalkGlobalConfig instance;

/**
* 网络代理
*/
Expand Down Expand Up @@ -166,4 +166,7 @@ public static DingTalkGlobalConfig getInstance() {
return Jenkins.get().getDescriptorByType(DingTalkGlobalConfig.class);
}

public static Optional<DingTalkRobotConfig> getRobot(String robotId) {
return getInstance().robotConfigs.stream().filter(item -> Objects.equals(item.getId(), robotId)).findAny();
}
}
28 changes: 9 additions & 19 deletions src/main/java/io/jenkins/plugins/DingTalkRunListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import io.jenkins.plugins.model.ButtonModel;
import io.jenkins.plugins.model.MessageModel;
import io.jenkins.plugins.service.impl.DingTalkServiceImpl;
import io.jenkins.plugins.tools.DingTalkUtils;
import io.jenkins.plugins.tools.Logger;
import io.jenkins.plugins.tools.Utils;
import java.io.IOException;
Expand Down Expand Up @@ -50,7 +51,7 @@ public class DingTalkRunListener extends RunListener<Run<?, ?>> {
@Override
public void onStarted(Run<?, ?> run, TaskListener listener) {
DingTalkGlobalConfig globalConfig = DingTalkGlobalConfig.getInstance();
log(listener, "全局配置信息,%s", Utils.toJson(globalConfig));
DingTalkUtils.log(listener, "全局配置信息,%s", Utils.toJson(globalConfig));
this.send(run, listener, NoticeOccasionEnum.START);
}

Expand All @@ -62,7 +63,7 @@ public void onCompleted(Run<?, ?> run, @NonNull TaskListener listener) {
this.send(run, listener, noticeOccasion);
} catch (Exception e) {
e.printStackTrace();
log(listener, "发送消息时报错: %s", e);
DingTalkUtils.log(listener, "发送消息时报错: %s", e);
}
}

Expand Down Expand Up @@ -137,7 +138,7 @@ private Map<String, String> getUser(Run<?, ?> run, TaskListener listener) {
}
}
if (executorName == null) {
log(listener, "未获取到构建人信息,将尝试从构建信息中模糊匹配。");
DingTalkUtils.log(listener, "未获取到构建人信息,将尝试从构建信息中模糊匹配。");
executorName = run.getCauses()
.stream().map(Cause::getShortDescription)
.collect(Collectors.joining());
Expand All @@ -146,7 +147,7 @@ private Map<String, String> getUser(Run<?, ?> run, TaskListener listener) {
executorName = user.getDisplayName();
executorMobile = user.getProperty(DingTalkUserProperty.class).getMobile();
if (executorMobile == null) {
log(listener, "用户【%s】暂未设置手机号码,请前往 %s 添加。", executorName,
DingTalkUtils.log(listener, "用户【%s】暂未设置手机号码,请前往 %s 添加。", executorName,
user.getAbsoluteUrl() + "/configure");
}
}
Expand Down Expand Up @@ -176,28 +177,17 @@ private boolean skip(TaskListener listener, NoticeOccasionEnum noticeOccasion,
if (noticeOccasions.contains(stage)) {
return false;
}
log(listener, "机器人 %s 已跳过 %s 环节", notifierConfig.getRobotName(), stage);
DingTalkUtils.log(listener, "机器人 %s 已跳过 %s 环节", notifierConfig.getRobotName(), stage);
return true;
}


private void log(TaskListener listener, String formatMsg, Object... args) {
DingTalkGlobalConfig globalConfig = DingTalkGlobalConfig.getInstance();
boolean verbose = globalConfig.isVerbose();
if (verbose) {
// Logger.line(listener, LineType.START);
Logger.debug(listener, "[钉钉插件]" + formatMsg, args);
// Logger.line(listener, LineType.END);
}
}


private void send(Run<?, ?> run, TaskListener listener, NoticeOccasionEnum noticeOccasion) {
Job<?, ?> job = run.getParent();
DingTalkJobProperty property = job.getProperty(DingTalkJobProperty.class);

if (property == null) {
this.log(listener, "不支持的项目类型,已跳过");
DingTalkUtils.log(listener, "当前任务未配置机器人,已跳过");
return;
}

Expand Down Expand Up @@ -264,8 +254,8 @@ private void send(Run<?, ?> run, TaskListener listener, NoticeOccasionEnum notic
.btns(btns)
.build();

log(listener, "当前机器人信息,%s", Utils.toJson(item));
log(listener, "发送的消息详情,%s", Utils.toJson(message));
DingTalkUtils.log(listener, "当前机器人信息,%s", Utils.toJson(item));
DingTalkUtils.log(listener, "发送的消息详情,%s", Utils.toJson(message));

String msg = service.send(robotId, message);

Expand Down
42 changes: 23 additions & 19 deletions src/main/java/io/jenkins/plugins/DingTalkStep.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import io.jenkins.plugins.model.ButtonModel;
import io.jenkins.plugins.model.MessageModel;
import io.jenkins.plugins.service.impl.DingTalkServiceImpl;
import io.jenkins.plugins.tools.DingTalkUtils;
import io.jenkins.plugins.tools.Logger;
import io.jenkins.plugins.tools.Utils;
import java.util.Arrays;
Expand Down Expand Up @@ -177,27 +178,29 @@ public String send(Run<?, ?> run, EnvVars envVars, TaskListener listener) {

if (at != null) {
String atStr = envVars.expand(Utils.join(at));

this.at = new HashSet<>(Arrays.asList(Utils.split(atStr)));
}

return service.send(
envVars.expand(robot),
MessageModel.builder()
.type(type)
.atMobiles(at)
.atAll(atAll)
.title(envVars.expand(title))
.text(envVars.expand(Utils.join(text)))
.messageUrl(envVars.expand(messageUrl))
.picUrl(envVars.expand(picUrl))
.singleTitle(envVars.expand(singleTitle))
.singleUrl(envVars.expand(singleUrl))
.btns(btns)
.btnOrientation(getBtnLayout())
.hideAvatar(isHideAvatar())
.build());

MessageModel message = MessageModel.builder()
.type(type)
.atMobiles(at)
.atAll(atAll)
.title(envVars.expand(title))
.text(envVars.expand(Utils.join(text)))
.messageUrl(envVars.expand(messageUrl))
.picUrl(envVars.expand(picUrl))
.singleTitle(envVars.expand(singleTitle))
.singleUrl(envVars.expand(singleUrl))
.btns(btns)
.btnOrientation(getBtnLayout())
.hideAvatar(isHideAvatar())
.build();

DingTalkUtils.log(listener, "当前机器人信息,%s",
Utils.toJson(DingTalkGlobalConfig.getRobot(robot)));
DingTalkUtils.log(listener, "发送的消息详情,%s", Utils.toJson(message));

return service.send(envVars.expand(robot), message);
}

@Override
Expand All @@ -214,6 +217,7 @@ private DingTalkStepExecution(DingTalkStep step, StepContext context) {
this.step = step;
}


@Override
public boolean start() throws Exception {
StepContext context = this.getContext();
Expand All @@ -225,7 +229,7 @@ public boolean start() throws Exception {
if (StringUtils.isEmpty(result)) {
context.onSuccess(result);
} else {
context.onFailure(new Exception(Logger.format(result)));
context.onFailure(new Throwable(Logger.format(result)));
}
return true;
} catch (Exception e) {
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/io/jenkins/plugins/tools/DingTalkUtils.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.jenkins.plugins.tools;

import hudson.model.TaskListener;
import io.jenkins.plugins.DingTalkGlobalConfig;

public class DingTalkUtils {

public static void log(TaskListener listener, String formatMsg, Object... args) {
DingTalkGlobalConfig globalConfig = DingTalkGlobalConfig.getInstance();
boolean verbose = globalConfig.isVerbose();
if (verbose) {
// Logger.line(listener, LineType.START);
Logger.debug(listener, "[钉钉插件]" + formatMsg, args);
// Logger.line(listener, LineType.END);
}
}
}

0 comments on commit 2518904

Please sign in to comment.