From 7bf536cb41037a9f8322c57a01f5412279504031 Mon Sep 17 00:00:00 2001 From: dengqichen Date: Fri, 28 Nov 2025 11:23:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9E=84=E5=BB=BA=E9=80=9A?= =?UTF-8?q?=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../deploy/dto/DeployExecuteRequest.java | 8 ++++-- .../service/impl/DeployServiceImpl.java | 25 ++++++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/DeployExecuteRequest.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/DeployExecuteRequest.java index ff6e3fc3..d14105ba 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/DeployExecuteRequest.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/DeployExecuteRequest.java @@ -1,5 +1,6 @@ package com.qqchen.deploy.backend.deploy.dto; +import com.qqchen.deploy.backend.deploy.enums.BuildTypeEnum; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; @@ -19,8 +20,11 @@ import java.util.List; @Schema(description = "部署执行请求") public class DeployExecuteRequest { - @Schema(description = "Jenkins配置", required = true) - @NotNull(message = "Jenkins配置不能为空") + @Schema(description = "构建类型", required = true) + @NotNull(message = "构建类型不能为空") + private BuildTypeEnum buildType; + + @Schema(description = "Jenkins配置(buildType为JENKINS时必填)") @Valid private JenkinsConfig jenkins; diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java index bfb4fb9b..fe1205ff 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployServiceImpl.java @@ -2,6 +2,7 @@ package com.qqchen.deploy.backend.deploy.service.impl; import com.qqchen.deploy.backend.deploy.dto.*; import com.qqchen.deploy.backend.deploy.entity.*; +import com.qqchen.deploy.backend.deploy.enums.BuildTypeEnum; import com.qqchen.deploy.backend.deploy.repository.*; import com.qqchen.deploy.backend.notification.entity.NotificationChannel; import com.qqchen.deploy.backend.notification.entity.NotificationTemplate; @@ -744,7 +745,11 @@ public class DeployServiceImpl implements IDeployService { @Override @Transactional public DeployResultDTO executeDeploy(DeployExecuteRequest request) { - log.info("开始执行部署: teamApplicationId={}, applicationCode={}, environmentCode={}", request.getTeamApplicationId(), request.getApplicationCode(), request.getEnvironmentCode()); + log.info("开始执行部署: teamApplicationId={}, applicationCode={}, environmentCode={}, buildType={}", + request.getTeamApplicationId(), request.getApplicationCode(), request.getEnvironmentCode(), request.getBuildType()); + + // 0. 根据构建类型校验Jenkins配置 + validateJenkinsConfig(request); // 1. 查询工作流定义 TeamApplication teamApp = teamApplicationRepository.findById(request.getTeamApplicationId()).orElseThrow(() -> new BusinessException(ResponseCode.TEAM_APPLICATION_NOT_FOUND)); @@ -800,6 +805,24 @@ public class DeployServiceImpl implements IDeployService { return result; } + /** + * 根据构建类型校验Jenkins配置 + *

当buildType为JENKINS时,jenkins配置必填 + */ + private void validateJenkinsConfig(DeployExecuteRequest request) { + if (request.getBuildType() == BuildTypeEnum.JENKINS) { + if (request.getJenkins() == null) { + throw new BusinessException(ResponseCode.DEPLOY_JENKINS_CONFIG_MISSING); + } + if (request.getJenkins().getServerId() == null) { + throw new BusinessException(ResponseCode.INVALID_PARAM, new Object[]{"Jenkins服务器ID不能为空"}); + } + if (request.getJenkins().getJobName() == null || request.getJenkins().getJobName().isBlank()) { + throw new BusinessException(ResponseCode.INVALID_PARAM, new Object[]{"Jenkins任务名称不能为空"}); + } + } + } + @Override public List getMyApprovalTasks(Long teamId, Long environmentId, List workflowDefinitionKeys) { // 1. 获取当前登录用户