增加构建通知
This commit is contained in:
parent
46fb8fb5de
commit
c88426c7ad
@ -587,6 +587,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理单个构建的通知
|
* 处理单个构建的通知
|
||||||
|
* <p>参考 longi-deployment 的实现:每次都从 Jenkins API 实时获取最新状态
|
||||||
*/
|
*/
|
||||||
private void processBuildNotification(TeamEnvironmentNotificationConfig config, NotificationChannel channel, JenkinsJob job, JenkinsBuild build, ExternalSystem externalSystem, Application application, Environment environment) {
|
private void processBuildNotification(TeamEnvironmentNotificationConfig config, NotificationChannel channel, JenkinsJob job, JenkinsBuild build, ExternalSystem externalSystem, Application application, Environment environment) {
|
||||||
|
|
||||||
@ -595,7 +596,13 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
|
|||||||
JenkinsBuildNotification record = jenkinsBuildNotificationRepository.findByBuildIdAndTeamIdAndEnvironmentId(build.getId(), config.getTeamId(), config.getEnvironmentId())
|
JenkinsBuildNotification record = jenkinsBuildNotificationRepository.findByBuildIdAndTeamIdAndEnvironmentId(build.getId(), config.getTeamId(), config.getEnvironmentId())
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
|
|
||||||
// 2. 新构建(只处理6分钟内的新构建)
|
// 2. 从 Jenkins API 实时获取该构建的最新状态
|
||||||
|
JenkinsBuildResponse latestBuildInfo = fetchLatestBuildInfo(externalSystem, job, build.getBuildNumber());
|
||||||
|
String latestStatus = (latestBuildInfo != null && latestBuildInfo.getResult() != null)
|
||||||
|
? latestBuildInfo.getResult()
|
||||||
|
: "BUILDING";
|
||||||
|
|
||||||
|
// 3. 新构建(只处理6分钟内的新构建)
|
||||||
if (record == null) {
|
if (record == null) {
|
||||||
long minutesAgo = java.time.temporal.ChronoUnit.MINUTES.between(
|
long minutesAgo = java.time.temporal.ChronoUnit.MINUTES.between(
|
||||||
build.getStarttime(),
|
build.getStarttime(),
|
||||||
@ -618,15 +625,19 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 已有记录,检查结束通知
|
// 4. 已有记录,检查结束通知
|
||||||
if (!record.getBuildEndNotice()) {
|
if (!record.getBuildEndNotice()) {
|
||||||
if (isBuildFinished(build)) {
|
// 使用实时获取的状态判断是否已完成
|
||||||
// 构建已完成,发送结束通知
|
if (isStatusFinished(latestStatus)) {
|
||||||
String status = build.getBuildStatus();
|
// 更新数据库中的构建状态
|
||||||
|
if (latestBuildInfo != null) {
|
||||||
|
updateBuildFromResponse(build, latestBuildInfo);
|
||||||
|
jenkinsBuildRepository.save(build);
|
||||||
|
}
|
||||||
|
|
||||||
// 通知成功、失败、取消
|
// 发送结束通知
|
||||||
if ("SUCCESS".equals(status) || "FAILURE".equals(status) || "ABORTED".equals(status)) {
|
if ("SUCCESS".equals(latestStatus) || "FAILURE".equals(latestStatus) || "ABORTED".equals(latestStatus)) {
|
||||||
sendNotification(config, channel, job, build, status, externalSystem, application, environment);
|
sendNotification(config, channel, job, build, latestStatus, externalSystem, application, environment);
|
||||||
}
|
}
|
||||||
|
|
||||||
record.setBuildEndNotice(true);
|
record.setBuildEndNotice(true);
|
||||||
@ -654,6 +665,29 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从 Jenkins API 实时获取指定构建的最新信息
|
||||||
|
*/
|
||||||
|
private JenkinsBuildResponse fetchLatestBuildInfo(ExternalSystem externalSystem, JenkinsJob job, Integer buildNumber) {
|
||||||
|
try {
|
||||||
|
List<JenkinsBuildResponse> builds = jenkinsServiceIntegration.listBuilds(externalSystem, job.getJobName());
|
||||||
|
return builds.stream()
|
||||||
|
.filter(b -> b.getNumber().equals(buildNumber))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.warn("从Jenkins获取构建信息失败: job={}, buildNumber={}, error={}", job.getJobName(), buildNumber, e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断状态是否为已完成
|
||||||
|
*/
|
||||||
|
private boolean isStatusFinished(String status) {
|
||||||
|
return "SUCCESS".equals(status) || "FAILURE".equals(status) || "ABORTED".equals(status);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断构建是否已结束
|
* 判断构建是否已结束
|
||||||
*/
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user