diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/DeployAppConfigConverter.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/DeployAppConfigConverter.java index c8a1c507..8c10527c 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/DeployAppConfigConverter.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/converter/DeployAppConfigConverter.java @@ -4,10 +4,17 @@ import com.qqchen.deploy.backend.deploy.dto.DeployAppConfigDTO; import com.qqchen.deploy.backend.deploy.entity.DeployAppConfig; import com.qqchen.deploy.backend.framework.converter.BaseConverter; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.NullValuePropertyMappingStrategy; /** * 应用配置转换器 */ -@Mapper(config = BaseConverter.class) +@Mapper(config = BaseConverter.class, nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) public interface DeployAppConfigConverter extends BaseConverter { -} \ No newline at end of file + + @Override + @Mapping(target = "formVariablesSchema", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) + void updateEntity(@MappingTarget DeployAppConfig entity, DeployAppConfigDTO dto); +} \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/variables/build/JenkinsBaseBuildVariables.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/variables/build/JenkinsBaseBuildVariables.java index 0210c4a3..8c88a5d9 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/variables/build/JenkinsBaseBuildVariables.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/dto/variables/build/JenkinsBaseBuildVariables.java @@ -12,136 +12,13 @@ import java.util.Map; @FormilyForm(name = "Jenkins构建配置") public class JenkinsBaseBuildVariables { -// @FormilyField( -// title = "绑定三方Jenkins系统", -// component = "Select", -// order = 1, -// props = @FormilyComponentProps( -// labelField = "name", -// valueField = "id", -// allowClear = true, -// showSearch = true, -// placeholder = "请选择Jenkins系统" -// ), -// validators = { -// @FormilyValidator( -// required = true, -// message = "请选择Jenkins系统" -// ) -// }, -// reactions = { -// @FormilyReaction( -// state = "dataSource", -// value = "{{$fetch('/api/v1/external-system/list?type=JENKINS').then(data => data.data)}}", -// when = "{{$form.mounted && $form.values.__modalVisible}}" -// ) -// } -// ) -// private String externalSystemId; -// -// @FormilyField( -// title = "绑定Jenkins视图", -// component = "Select", -// order = 2, -// props = @FormilyComponentProps( -// labelField = "viewName", -// valueField = "id", -// allowClear = true, -// showSearch = true, -// placeholder = "请选择Jenkins视图" -// ), -// validators = { -// @FormilyValidator( -// required = true, -// message = "请选择Jenkins视图" -// ) -// }, -// reactions = { -// @FormilyReaction( -// dependencies = {"externalSystemId"}, -// state = "dataSource", -// value = "{{$fetch('/api/v1/jenkins-view/list?externalSystemId=' + $deps.externalSystemId).then(data => data.data)}}" -// ) -// } -// ) -// private String viewId; -// -// @FormilyField( -// title = "绑定Jenkins任务", -// component = "Select", -// order = 3, -// props = @FormilyComponentProps( -// labelField = "jobName", -// valueField = "id", -// allowClear = true, -// showSearch = true, -// placeholder = "请选择Jenkins任务" -// ), -// validators = { -// @FormilyValidator( -// required = true, -// message = "请选择Jenkins任务" -// ) -// }, -// reactions = { -// @FormilyReaction( -// dependencies = {"externalSystemId", "viewId"}, -// state = "dataSource", -// value = "{{$fetch('/api/v1/jenkins-job/list?externalSystemId=' + $deps.externalSystemId + '&viewId=' + $deps.viewId).then(data => data.data)}}" -// ) -// } -// ) -// private String jobId; -// -// @FormilyField( -// title = "环境变量", -// type = "map", -// order = 4, -// mapConfig = @FormilyMapConfig( -// keyTitle = "变量名", -// valueTitle = "变量值", -// keyComponent = "Select", -// valueComponent = "Input", -// keyProps = @FormilyComponentProps( -//// api = "/api/v1/env-vars/keys", -// showSearch = true, -// allowClear = true, -// placeholder = "请选择或输入变量名" -// ), -// valueProps = @FormilyComponentProps( -// placeholder = "请输入变量值" -// ), -// addText = "添加环境变量", -// allowCustomKey = true -// ) -// ) -// private Map envVars; -// -// @FormilyField( -// title = "Pipeline script", -// type = "string", -// component = "MonacoEditor", -// order = 5, -// props = @FormilyComponentProps( -// editor = @FormilyEditorProps( -// language = "groovy", -// theme = "vs-dark", -// minimap = false, -// lineNumbers = true, -// wordWrap = true, -// fontSize = 14, -// tabSize = 4, -// automaticLayout = true, -// folding = true, -// placeholder = "请输入Pipeline脚本" -// ) -// ), -// validators = { -// @FormilyValidator( -// required = true, -// message = "请输入Pipeline脚本" -// ) -// } -// ) -// private String script; + private String externalSystemId; + + private String viewId; + + private String jobId; + + private Map envs; + + private String script; } \ No newline at end of file diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/JenkinsServiceIntegrationImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/JenkinsServiceIntegrationImpl.java index f86f6df4..7645aa04 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/JenkinsServiceIntegrationImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/integration/impl/JenkinsServiceIntegrationImpl.java @@ -22,6 +22,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -42,6 +43,7 @@ import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.xml.sax.InputSource; +import java.nio.charset.Charset; import java.util.Base64; import java.util.Collections; import java.util.List; @@ -187,10 +189,19 @@ public class JenkinsServiceIntegrationImpl implements IJenkinsServiceIntegration // 获取Job配置 String configUrl = String.format("%s/job/%s/config.xml", externalSystem.getUrl(), jobName); HttpHeaders headers = createHeaders(externalSystem); + // 设置请求和响应的字符编码 headers.set(HttpHeaders.ACCEPT_CHARSET, "UTF-8"); + headers.set(HttpHeaders.CONTENT_TYPE, "application/xml;charset=UTF-8"); + headers.setAcceptCharset(Collections.singletonList(Charset.forName("UTF-8"))); + headers.set("Jenkins-Crumb", jenkinsCrumbIssue.getCrumb()); headers.set("Cookie", jenkinsCrumbIssue.getCookie()); + HttpEntity entity = new HttpEntity<>(headers); + + // 配置RestTemplate,确保使用UTF-8编码 + restTemplate.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8"))); + ResponseEntity response = restTemplate.exchange( configUrl, HttpMethod.GET, diff --git a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployAppConfigServiceImpl.java b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployAppConfigServiceImpl.java index 7b4d4241..043f9bc7 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployAppConfigServiceImpl.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/deploy/service/impl/DeployAppConfigServiceImpl.java @@ -31,6 +31,7 @@ import com.qqchen.deploy.backend.workflow.entity.WorkflowInstance; import com.qqchen.deploy.backend.workflow.repository.IWorkflowDefinitionRepository; import com.qqchen.deploy.backend.workflow.repository.IWorkflowInstanceRepository; import com.qqchen.deploy.backend.workflow.service.IWorkflowInstanceService; +import com.qqchen.deploy.backend.workflow.util.GenerateSchemaUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Page; @@ -175,7 +176,7 @@ public class DeployAppConfigServiceImpl extends BaseServiceImpl envs; + private String script; - }