增加生成后端服务代码。

This commit is contained in:
asp_ly 2024-12-30 21:53:02 +08:00
parent 1c166c2559
commit 5d375b7783
2 changed files with 38 additions and 32 deletions

View File

@ -28,6 +28,7 @@ import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.Instant; import java.time.Instant;
@ -75,7 +76,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
private ThreadPoolTaskExecutor threadPoolTaskExecutor; private ThreadPoolTaskExecutor threadPoolTaskExecutor;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional
public Integer syncAllBuilds(Long externalSystemId) { public Integer syncAllBuilds(Long externalSystemId) {
// 1. 创建同步历史记录 // 1. 创建同步历史记录
JenkinsSyncHistoryDTO syncHistory = new JenkinsSyncHistoryDTO(); JenkinsSyncHistoryDTO syncHistory = new JenkinsSyncHistoryDTO();
@ -120,7 +121,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
} }
jenkinsSyncHistoryService.saveOrUpdateHistory(syncHistory); jenkinsSyncHistoryService.saveOrUpdateHistory(syncHistory);
log.info("Successfully synchronized total {} builds for external system: {}", log.info("Successfully synchronized total {} builds for external system: {}",
totalSyncedBuilds, externalSystemId); totalSyncedBuilds, externalSystemId);
return totalSyncedBuilds; return totalSyncedBuilds;
} catch (Exception e) { } catch (Exception e) {
@ -175,7 +176,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
} }
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
public Integer syncBuilds(ExternalSystem externalSystem, JenkinsJob job) { public Integer syncBuilds(ExternalSystem externalSystem, JenkinsJob job) {
JenkinsJobResponse queryJob = jenkinsServiceIntegration.job(externalSystem, job.getJobName()); JenkinsJobResponse queryJob = jenkinsServiceIntegration.job(externalSystem, job.getJobName());
if (queryJob == null || queryJob.getLastBuild() == null) { if (queryJob == null || queryJob.getLastBuild() == null) {
@ -216,7 +217,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
// Batch save // Batch save
if (!jenkinsBuilds.isEmpty()) { if (!jenkinsBuilds.isEmpty()) {
jenkinsBuildRepository.saveAll(jenkinsBuilds); jenkinsBuildRepository.saveAll(jenkinsBuilds);
// Update job's last build info // Update job's last build info
job.setLastBuildNumber(queryJob.getLastBuild().getNumber()); job.setLastBuildNumber(queryJob.getLastBuild().getNumber());
if (queryJob.getLastBuild().getTimestamp() != null) { if (queryJob.getLastBuild().getTimestamp() != null) {
@ -226,10 +227,10 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
)); ));
} }
jenkinsJobRepository.save(job); jenkinsJobRepository.save(job);
log.info("Successfully synchronized {} builds for job: {}", jenkinsBuilds.size(), job.getJobName()); log.info("Successfully synchronized {} builds for job: {}", jenkinsBuilds.size(), job.getJobName());
} }
return jenkinsBuilds.size(); return jenkinsBuilds.size();
} }
@ -240,7 +241,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
jenkinsBuild.setBuildUrl(response.getUrl()); jenkinsBuild.setBuildUrl(response.getUrl());
jenkinsBuild.setBuildStatus(response.getResult()); jenkinsBuild.setBuildStatus(response.getResult());
jenkinsBuild.setDuration(response.getDuration()); jenkinsBuild.setDuration(response.getDuration());
// 转换时间戳为LocalDateTime // 转换时间戳为LocalDateTime
if (response.getTimestamp() != null) { if (response.getTimestamp() != null) {
LocalDateTime startTime = LocalDateTime.ofInstant( LocalDateTime startTime = LocalDateTime.ofInstant(
@ -249,7 +250,7 @@ public class JenkinsBuildServiceImpl extends BaseServiceImpl<JenkinsBuild, Jenki
); );
jenkinsBuild.setStarttime(startTime); jenkinsBuild.setStarttime(startTime);
} }
// 将构建参数转换为JSON字符串 // 将构建参数转换为JSON字符串
try { try {
String actionsJson = objectMapper.writeValueAsString(response.getActions()); String actionsJson = objectMapper.writeValueAsString(response.getActions());

View File

@ -11,51 +11,56 @@ import lombok.EqualsAndHashCode;
public class DeployNodeFormVariables extends BaseNodeFormVariables { public class DeployNodeFormVariables extends BaseNodeFormVariables {
@SchemaProperty( @SchemaProperty(
title = "项目", title = "绑定三方Jenkins系统",
description = "选择项目", description = "请选择三方Jenkins系统",
required = true, required = true,
dataSource = @SchemaPropertyDataSource( dataSource = @SchemaPropertyDataSource(
type = "api", type = "api",
url = "/api/v1/projects", url = "/api/v1/external-system/list?type=JENKINS",
valueField = "id", valueField = "id",
labelField = "name" labelField = "name"
) ),
order = 1
) )
private String projectId; private String externalSystemId;
@SchemaProperty( @SchemaProperty(
title = "Jenkins视图", title = "绑定Jenkins视图",
description = "Jenkins视图名称", description = "Jenkins视图",
required = true, required = true,
dataSource = @SchemaPropertyDataSource( dataSource = @SchemaPropertyDataSource(
type = "api", type = "api",
url = "/api/v1/jenkins/views", url = "/api/v1/jenkins-view/list",
valueField = "name", valueField = "id",
labelField = "name", labelField = "viewName",
dependsOn = {"projectId"}, dependsOn = {"externalSystemId"},
params = { params = {
@SchemaPropertyDataSourceParam(name = "projectId", value = "${projectId}") @SchemaPropertyDataSourceParam(name = "externalSystemId", value = "${externalSystemId}")
} }
) ),
order = 2
) )
private String view; private String viewId;
@SchemaProperty( @SchemaProperty(
title = "Jenkins任务", title = "绑定Jenkins任务",
description = "Jenkins任务名称", description = "Jenkins任务",
required = true, required = true,
dataSource = @SchemaPropertyDataSource( dataSource = @SchemaPropertyDataSource(
type = "api", type = "api",
url = "/api/v1/jenkins/jobs", url = "/api/v1/jenkins-job/list",
valueField = "name", valueField = "id",
labelField = "name", labelField = "jobName",
dependsOn = {"projectId", "view"}, dependsOn = {"externalSystemId", "viewId"},
params = { params = {
@SchemaPropertyDataSourceParam(name = "projectId", value = "${projectId}"), @SchemaPropertyDataSourceParam(name = "externalSystemId", value = "${externalSystemId}"),
@SchemaPropertyDataSourceParam(name = "view", value = "${view}") @SchemaPropertyDataSourceParam(name = "viewId", value = "${viewId}")
} }
) ),
order = 3
) )
private String job; private String jobId;
} }