diff --git a/init-database.sh b/init-database.sh
index a615ca9024..52143bdc72 100755
--- a/init-database.sh
+++ b/init-database.sh
@@ -8,11 +8,11 @@ mvn org.apache.maven.plugins:maven-dependency-plugin:get \
-Dartifact=${TOOL_GROUP_ID}:${TOOL_ARTIFACT_ID}:${TOOL_VERSION} \
-Dtransitive=false
-java -Dspring.datasource.url="jdbc:mysql://localhost:33306/?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \
+java -Dspring.datasource.url="jdbc:mysql://localhost:3306/?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \
-Dspring.datasource.username=root \
-Dspring.datasource.password=root \
-Dspring.datasource.driver-class-name=com.mysql.jdbc.Driver \
- -Dinstaller.datasources.platform.url="jdbc:mysql://localhost:33306/?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \
+ -Dinstaller.datasources.platform.url="jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \
-Dinstaller.datasources.platform.username=root \
-Dinstaller.datasources.platform.password=root \
-Ddata.init=true \
diff --git a/pom.xml b/pom.xml
index 9df1662b11..bf6db7add2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
devops-service
- 2.0.9.RELEASE
+ 2.2.0-SNAPSHOT
jar
https://github.com/open-hand/devops-service
@@ -11,7 +11,7 @@
io.choerodon
choerodon-framework-parent
- 2.0.1.RELEASE
+ 2.1.0.RELEASE
@@ -21,6 +21,11 @@
+
+ io.choerodon
+ choerodon-starter-core
+
+
org.hzero.boot
@@ -212,7 +217,7 @@
com.squareup.retrofit2
retrofit
- 2.3.0
+ 2.5.0
io.codearte.props2yaml
@@ -238,7 +243,7 @@
io.kubernetes
client-java
- 1.0.0-beta3
+ 16.0.0
compile
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java
index 8c7f84839a..1cf280b8f7 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java
@@ -73,9 +73,7 @@ public ResponseEntity creatstatefulSetWorkLoade(
@PathVariable(value = "project_id") Long projectId,
@ApiParam(value = "服务信息", required = true)
@RequestBody @Validated AppServiceReqVO appServiceReqVO) {
- return Optional.ofNullable(applicationServiceService.create(projectId, appServiceReqVO))
- .map(target -> new ResponseEntity<>(target, HttpStatus.OK))
- .orElseThrow(() -> new CommonException("error.app.service.create"));
+ return ResponseEntity.ok(applicationServiceService.create(projectId, appServiceReqVO));
}
@@ -570,23 +568,6 @@ public ResponseEntity queryByCode(
.orElseThrow(() -> new CommonException(ERROR_APPLICATION_GET));
}
-
- /**
- * 校验chart仓库配置信息是否正确
- *
- * @param configVO chartMuseum信息
- */
- @Permission(level = ResourceLevel.ORGANIZATION, roles = {InitRoleCode.PROJECT_OWNER})
- @ApiOperation(value = "校验chart仓库配置信息是否正确")
- @PostMapping(value = "/check_chart")
- public void checkChart(
- @ApiParam(value = "项目id", required = true)
- @PathVariable(value = "project_id") Long projectId,
- @ApiParam(value = "chartMuseum信息", required = true)
- @RequestBody ConfigVO configVO) {
- applicationServiceService.checkChart(configVO.getUrl(), configVO.getUserName(), configVO.getPassword());
- }
-
/**
* 验证用于克隆仓库的url及授权的access token是否有效
*
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java
index 4e361c2138..46d48b0cd5 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java
@@ -141,46 +141,6 @@ public ResponseEntity> pageInstanceInfoByOptions(
appServiceInstanceService.pageInstanceInfoByOptions(projectId, envId, pageable, params), HttpStatus.OK);
}
-
-// /**
-// * 分页查询服务部署
-// *
-// * @param projectId 项目id
-// * @param pageable 分页参数
-// * @param envId 环境id
-// * @param versionId 版本id
-// * @param appServiceId 服务id
-// * @param params 搜索参数
-// * @return page of DevopsEnvPreviewInstanceVO
-// */
-// @Permission(level = ResourceLevel.ORGANIZATION,
-// roles = {InitRoleCode.PROJECT_OWNER,
-// InitRoleCode.PROJECT_MEMBER})
-// @ApiOperation(value = "分页查询服务部署")
-// @CustomPageRequest
-// @PostMapping(value = "/page_by_options")
-// public ResponseEntity> pageByOptions(
-// @ApiParam(value = "项目ID", required = true)
-// @PathVariable(value = "project_id") Long projectId,
-// @ApiIgnore
-// @ApiParam(value = "分页参数") PageRequest pageable,
-// @ApiParam(value = "环境ID")
-// @RequestParam(value = "env_id", required = false) Long envId,
-// @ApiParam(value = "版本ID")
-// @RequestParam(value = "version_id", required = false) Long versionId,
-// @ApiParam(value = "服务ID")
-// @RequestParam(value = "app_service_id", required = false) Long appServiceId,
-// @ApiParam(value = "实例ID")
-// @RequestParam(value = "instance_id", required = false) Long instanceId,
-// @ApiParam(value = "查询参数")
-// @RequestBody(required = false) String params) {
-// return Optional.ofNullable(appServiceInstanceService.pageByOptions(
-// projectId, pageable, envId, versionId, appServiceId, instanceId, params))
-// .map(target -> new ResponseEntity<>(target, HttpStatus.OK))
-// .orElseThrow(() -> new CommonException("error.application.version.query"));
-// }
-
-
/**
* 获取实例上次部署配置
*
@@ -900,22 +860,22 @@ public ResponseEntity> pageDeployTimeTable(
.orElseThrow(() -> new CommonException("error.deploy.time.get"));
}
- /**
- * 部署自动化测试服务
- *
- * @param projectId 项目id
- * @param appServiceDeployVO 部署信息
- */
- @ApiOperation(value = "部署自动化测试服务")
- @Permission(level = ResourceLevel.ORGANIZATION)
- @PostMapping("/deploy_test_app")
- public void deployTestApp(
- @ApiParam(value = "项目ID", required = true)
- @PathVariable(value = "project_id") Long projectId,
- @ApiParam(value = "部署信息", required = true)
- @RequestBody AppServiceDeployVO appServiceDeployVO) {
- appServiceInstanceService.deployTestApp(projectId, appServiceDeployVO);
- }
+// /**
+// * 部署自动化测试服务
+// *
+// * @param projectId 项目id
+// * @param appServiceDeployVO 部署信息
+// */
+// @ApiOperation(value = "部署自动化测试服务")
+// @Permission(level = ResourceLevel.ORGANIZATION)
+// @PostMapping("/deploy_test_app")
+// public void deployTestApp(
+// @ApiParam(value = "项目ID", required = true)
+// @PathVariable(value = "project_id") Long projectId,
+// @ApiParam(value = "部署信息", required = true)
+// @RequestBody AppServiceDeployVO appServiceDeployVO) {
+// appServiceInstanceService.deployTestApp(projectId, appServiceDeployVO);
+// }
/**
* 操作pod的数量
@@ -1021,7 +981,6 @@ public ResponseEntity> batchDeployment(
return new ResponseEntity<>(appServiceInstanceService.batchDeployment(projectId, appServiceDeployVOs), HttpStatus.OK);
}
- @Deprecated
@ApiOperation("查询引用了实例作为替换对象的流水线信息")
@Permission(level = ResourceLevel.ORGANIZATION)
@GetMapping("/{instance_id}/pipeline_reference")
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java
index ccec2cfba8..03bbb89a13 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java
@@ -61,10 +61,15 @@ public ResponseEntity> pageByOptions(
@RequestBody(required = false) String params,
@ApiParam(value = "指定版本")
@RequestParam(required = false) String version) {
- return Optional.ofNullable(appServiceVersionService.pageByOptions(
- projectId, appServiceId, appServiceVersionId, deployOnly, doPage, params, pageable, version))
- .map(target -> new ResponseEntity<>(target, HttpStatus.OK))
- .orElseThrow(() -> new CommonException(VERSION_QUERY_ERROR));
+ return ResponseEntity.ok(appServiceVersionService.pageByOptions(
+ projectId,
+ appServiceId,
+ appServiceVersionId,
+ deployOnly,
+ doPage,
+ params,
+ pageable,
+ version));
}
@@ -315,10 +320,7 @@ public ResponseEntity> pageShareVersionByappServic
@SortDefault(value = "id", direction = Sort.Direction.DESC) PageRequest pageable,
@ApiParam(value = "查询参数")
@RequestParam(value = "version", required = false) String version) {
- return Optional.ofNullable(
- appServiceVersionService.pageShareVersionByAppId(appServiceId, pageable, version))
- .map(target -> new ResponseEntity<>(target, HttpStatus.OK))
- .orElseThrow(() -> new CommonException("error.remote.application.versions.get"));
+ return ResponseEntity.ok(appServiceVersionService.pageShareVersionByAppId(appServiceId, pageable, version));
}
@Permission(level = ResourceLevel.ORGANIZATION)
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/CiCdPipelineController.java b/src/main/java/io/choerodon/devops/api/controller/v1/CiCdPipelineController.java
index 7d0fdd036a..38f3cfe243 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/CiCdPipelineController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/CiCdPipelineController.java
@@ -247,9 +247,7 @@ public ResponseEntity pipelineExecuteTime(
@RequestParam(value = "start_time") Date startTime,
@ApiParam(value = "end_time")
@RequestParam(value = "end_time") Date endTime) {
- return Optional.ofNullable(devopsCiPipelineService.pipelineExecuteTime(pipelineIds, startTime, endTime))
- .map(target -> new ResponseEntity<>(target, HttpStatus.OK))
- .orElseThrow(() -> new CommonException("error.pipeline.execute.time.get"));
+ return ResponseEntity.ok(devopsCiPipelineService.pipelineExecuteTime(pipelineIds, startTime, endTime));
}
@Permission(level = ResourceLevel.ORGANIZATION,
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java b/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java
index a40a5ed6d9..92292ea139 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java
@@ -116,6 +116,25 @@ public ResponseEntity create(
return ResponseEntity.ok().build();
}
+ @Permission(permissionPublic = true)
+ @ApiOperation(value = "发布应用服务版本")
+ @PostMapping("/app_version")
+ public ResponseEntity publishAppVersion(
+ @ApiParam(value = "token", required = true)
+ @RequestParam String token,
+ @ApiParam(value = "版本", required = true)
+ @RequestParam String version,
+ @ApiParam(value = "commit", required = true)
+ @RequestParam String commit,
+ @ApiParam(value = "GitLab流水线id")
+ @RequestParam(value = "gitlabPipelineId", required = false) Long gitlabPipelineId,
+ @ApiParam(value = "job_name")
+ @RequestParam(value = "jobName", required = false) String jobName,
+ @RequestParam String ref) {
+ appServiceVersionService.publishAppVersion(token, version, commit, ref, gitlabPipelineId, jobName);
+ return ResponseEntity.ok().build();
+ }
+
@Permission(permissionPublic = true)
@ApiOperation(value = "查询CI流水线默认的镜像地址")
@GetMapping("/default_image")
@@ -154,9 +173,11 @@ public ResponseEntity saveJarMetaData(
@RequestParam(value = "job_name") String jobName,
@ApiParam(value = "token", required = true)
@RequestParam String token,
+ @ApiParam(value = "版本", required = true)
+ @RequestParam String version,
@ApiParam(value = "pom文件", required = true)
@RequestParam MultipartFile file) {
- ciPipelineMavenService.createOrUpdate(nexusRepoId, jobId, sequence, gitlabPipelineId, jobName, token, file, mavenRepoUrl, username, password);
+ ciPipelineMavenService.createOrUpdate(nexusRepoId, jobId, sequence, gitlabPipelineId, jobName, token, file, mavenRepoUrl, username, password, version);
return ResponseEntity.ok().build();
}
@@ -180,7 +201,7 @@ public ResponseEntity saveSonarInfo(
@ApiOperation(value = "判断平台是否有配置sonarqube")
@GetMapping("/has_default_sonar")
public ResponseEntity hasDefaultSonarqubeConfig() {
- return ResponseEntity.ok(!StringUtils.isEmpty(sonarqubeUrl));
+ return ResponseEntity.ok(StringUtils.hasText(sonarqubeUrl));
}
@Permission(level = ResourceLevel.ORGANIZATION, permissionWithin = true)
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsBranchController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsBranchController.java
new file mode 100644
index 0000000000..12e72e2e62
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsBranchController.java
@@ -0,0 +1,38 @@
+package io.choerodon.devops.api.controller.v1;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.hzero.core.util.Results;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import io.choerodon.devops.app.service.DevopsBranchService;
+
+@RestController
+@RequestMapping("/v1/projects/{project_id}/branch")
+public class DevopsBranchController {
+
+ @Autowired
+ private DevopsBranchService devopsBranchService;
+
+ @GetMapping("/issue/check_rel_exist")
+ public ResponseEntity checkIssueBranchRelExist(@ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("issueId")
+ @RequestParam("issue_id") Long issueId) {
+ return Results.success(devopsBranchService.checkIssueBranchRelExist(projectId, issueId));
+ }
+
+ @ApiOperation("复制工作项与分支关联关系")
+ @PostMapping("/issue/copy_rel")
+ public ResponseEntity copyIssueBranchRel(@ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("oldIssueId")
+ @RequestParam("old_issue_id") Long oldIssueId,
+ @ApiParam("newIssueId")
+ @RequestParam("new_issue_id") Long newIssueId) {
+ devopsBranchService.copyIssueBranchRel(projectId, oldIssueId, newIssueId);
+ return Results.success();
+ }
+}
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCdApiTestInfoController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCdApiTestInfoController.java
new file mode 100644
index 0000000000..888401ea01
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCdApiTestInfoController.java
@@ -0,0 +1,28 @@
+package io.choerodon.devops.api.controller.v1;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.hzero.core.util.Results;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.choerodon.devops.app.service.DevopsCdApiTestInfoService;
+
+@RestController
+@RequestMapping("/v1/projects/{project_id}/api_test_info")
+public class DevopsCdApiTestInfoController {
+ @Autowired
+ private DevopsCdApiTestInfoService devopsCdApiTestInfoService;
+
+ @ApiOperation("查询测试套件是否关联流水线")
+ @GetMapping("/suites/{suite_id}/related_with_pipeline")
+ public ResponseEntity doesApiTestSuiteRelatedWithPipeline(@ApiParam(value = "项目Id", required = true)
+ @PathVariable(value = "project_id") Long projectId,
+ @PathVariable(value = "suite_id") Long suiteId) {
+ return Results.success(devopsCdApiTestInfoService.doesApiTestSuiteRelatedWithPipeline(suiteId));
+ }
+}
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCiPipelineRecordController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCiPipelineRecordController.java
index 6e0b1f064b..454fd3ee9f 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCiPipelineRecordController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCiPipelineRecordController.java
@@ -37,20 +37,6 @@ public DevopsCiPipelineRecordController(DevopsCiPipelineRecordService devopsCiPi
this.devopsCiPipelineRecordService = devopsCiPipelineRecordService;
}
- @Permission(level = ResourceLevel.ORGANIZATION, roles = {InitRoleCode.PROJECT_OWNER, InitRoleCode.PROJECT_MEMBER})
- @ApiOperation(value = "查询ci流水线执行记录")
- @GetMapping("/{ci_pipeline_id}")
- public ResponseEntity> pagingPipelineRecord(
- @ApiParam(value = "项目Id", required = true)
- @PathVariable(value = "project_id") Long projectId,
- @Encrypt
- @ApiParam(value = "流水线Id", required = true)
- @PathVariable(value = "ci_pipeline_id") Long ciPipelineId,
- @ApiIgnore
- @SortDefault(value = DevopsCiPipelineRecordDTO.FIELD_GITLAB_PIPELINE_ID, direction = Sort.Direction.DESC) PageRequest pageable) {
- return ResponseEntity.ok(devopsCiPipelineRecordService.pagingPipelineRecord(projectId, ciPipelineId, pageable));
- }
-
@Permission(level = ResourceLevel.ORGANIZATION, roles = {InitRoleCode.PROJECT_OWNER, InitRoleCode.PROJECT_MEMBER})
@ApiOperation(value = "查询指定流水线记录详情")
@GetMapping("/{gitlab_pipeline_id}/details")
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsGitController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsGitController.java
index e527c3ef13..33a5ccd49d 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsGitController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsGitController.java
@@ -484,4 +484,29 @@ public ResponseEntity checkName(
@RequestParam(value = "branch_name") String branchName) {
return ResponseEntity.ok(devopsGitService.isBranchNameUnique(projectId, appServiceId, branchName));
}
+
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ @ApiOperation(value = "分支同步")
+ @PostMapping("/sync_branch")
+ public ResponseEntity syncBranch(
+ @ApiParam(value = "项目id", required = true)
+ @PathVariable(value = "project_id") Long projectId,
+ @Encrypt
+ @ApiParam(value = "服务ID")
+ @PathVariable(value = "app_service_id") Long appServiceId) {
+ devopsGitService.syncBranch(projectId, appServiceId, true);
+ return Results.success();
+ }
+
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ @ApiOperation(value = "校验分支同步")
+ @GetMapping("/check_sync_branch")
+ public ResponseEntity checkSyncBranch(
+ @ApiParam(value = "项目id", required = true)
+ @PathVariable(value = "project_id") Long projectId,
+ @Encrypt
+ @ApiParam(value = "服务ID")
+ @PathVariable(value = "app_service_id") Long appServiceId) {
+ return Results.success(devopsGitService.syncBranch(projectId, appServiceId, false));
+ }
}
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java
new file mode 100644
index 0000000000..0dd07dbb87
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java
@@ -0,0 +1,138 @@
+package io.choerodon.devops.api.controller.v1;
+
+import java.util.List;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.hzero.core.util.Results;
+import org.hzero.starter.keyencrypt.core.Encrypt;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import io.choerodon.core.iam.ResourceLevel;
+import io.choerodon.devops.api.vo.DevopsHelmConfigVO;
+import io.choerodon.devops.app.service.DevopsHelmConfigService;
+import io.choerodon.swagger.annotation.Permission;
+
+@RestController("DevopsHelmConfigController.v1")
+@RequestMapping("/v1/projects/{project_id}/helm_config")
+public class DevopsHelmConfigController {
+ @Autowired
+ private DevopsHelmConfigService helmConfigService;
+
+ @ApiOperation("查询helm仓库列表")
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ @GetMapping("/list")
+ public ResponseEntity> listHelmConfig(
+ @ApiParam("项目id")
+ @PathVariable("project_id") Long projectId) {
+ return Results.success(helmConfigService.listHelmConfig(projectId));
+ }
+
+ @ApiOperation("应用层查询helm仓库列表")
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ @GetMapping("/app/list")
+ public ResponseEntity> listHelmConfigOnApp(
+ @ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("项目id")
+ @Encrypt
+ @RequestParam("app_service_id") Long appServiceId) {
+ return Results.success(helmConfigService.listHelmConfigOnApp(projectId, appServiceId));
+ }
+
+ @ApiOperation("查询helm仓库")
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ @GetMapping("/{helm_config_id}")
+ public ResponseEntity queryHelmConfig(
+ @ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("仓库id")
+ @Encrypt @PathVariable("helm_config_id") Long helmConfigId) {
+ return Results.success(helmConfigService.queryDevopsHelmConfig(projectId, helmConfigId));
+ }
+
+ @ApiOperation("检查helm名称是否已存在")
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ @GetMapping("/check_name_exist")
+ public ResponseEntity checkNameExist(@ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("仓库名称")
+ @RequestParam("name") String name,
+ @ApiParam("仓库id")
+ @Encrypt @RequestParam(value = "helm_config_id", required = false) Long helmConfigId) {
+ return Results.success(helmConfigService.checkNameExists(projectId, helmConfigId, name));
+ }
+
+
+ @ApiOperation("添加helm仓库")
+ @PostMapping
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ public ResponseEntity createDevopsHelmConfig(
+ @ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @RequestBody DevopsHelmConfigVO devopsHelmConfigVO) {
+ return Results.success(helmConfigService.createDevopsHelmConfigOnProjectLevel(projectId, devopsHelmConfigVO));
+ }
+
+ @ApiOperation("更新helm仓库")
+ @PutMapping
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ public ResponseEntity updateDevopsHelmConfig(
+ @ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @RequestBody DevopsHelmConfigVO devopsHelmConfigVO) {
+ return Results.success(helmConfigService.updateDevopsHelmConfigOnProjectLevel(projectId, devopsHelmConfigVO));
+ }
+
+ @ApiOperation("删除helm仓库")
+ @DeleteMapping("/{helm_config_id}")
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ public ResponseEntity deleteHelmConfig(@ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("仓库id")
+ @Encrypt @PathVariable("helm_config_id") Long helmConfigId) {
+ helmConfigService.deleteDevopsHelmConfig(projectId, helmConfigId);
+ return Results.success();
+ }
+
+ @ApiOperation("将指定仓库设为默认仓库")
+ @PostMapping("/{helm_config_id}/set_default")
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ public ResponseEntity setDefaultHelmConfig(@ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("仓库id")
+ @Encrypt @PathVariable("helm_config_id") Long helmConfigId) {
+ helmConfigService.setDefaultDevopsHelmConfig(projectId, helmConfigId);
+ return Results.success();
+ }
+
+ @ApiOperation("获取chart的index内容并返回给前端")
+ @GetMapping("/{helm_config_id}/index")
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ public ResponseEntity getIndexContent(@ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("仓库id")
+ @Encrypt @PathVariable("helm_config_id") Long helmConfigId) {
+ return Results.success(helmConfigService.getIndexContent(projectId, helmConfigId));
+ }
+
+ @ApiOperation("下载chart包")
+ @GetMapping("/{helm_config_id}/charts/download")
+ @Permission(level = ResourceLevel.ORGANIZATION)
+ public ResponseEntity downloadCharts(
+ @ApiParam("项目id")
+ @PathVariable("project_id") Long projectId,
+ @ApiParam("仓库id")
+ @Encrypt @PathVariable("helm_config_id") Long helmConfigId,
+ @RequestParam("chart_url") String chartUrl) {
+ String[] chartInfos = chartUrl.split("/");
+ HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.add("Content-Disposition", String.format("attchement;filename=%s", chartInfos[1]));
+ httpHeaders.add("content-type", "application/x-tar");
+ return new ResponseEntity<>(helmConfigService.downloadChart(helmConfigId, chartUrl), httpHeaders, HttpStatus.OK);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHostController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHostController.java
index bdf085fbf6..48ef089581 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHostController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHostController.java
@@ -4,7 +4,6 @@
import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import io.swagger.annotations.ApiOperation;
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsOrganizationConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsOrganizationConfigController.java
index 6983da3be9..cc2aa55e13 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsOrganizationConfigController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsOrganizationConfigController.java
@@ -4,7 +4,6 @@
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
-import org.hzero.starter.keyencrypt.core.Encrypt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -91,7 +90,7 @@ public ResponseEntity checkChart(
@ApiParam(value = "chartMuseum信息", required = true)
@RequestBody ConfigVO configVO) {
return Optional.ofNullable(
- appServiceService.checkChart(configVO.getUrl(), configVO.getUserName(), configVO.getPassword()))
+ appServiceService.checkChartOnOrganization(configVO.getUrl(), configVO.getUserName(), configVO.getPassword()))
.map(target -> new ResponseEntity<>(target, HttpStatus.OK))
.orElseThrow(() -> new CommonException("error.connection.failed"));
}
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java
index c47ea87f28..14bd977184 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java
@@ -12,6 +12,7 @@
import io.choerodon.core.exception.CommonException;
import io.choerodon.core.iam.InitRoleCode;
import io.choerodon.core.iam.ResourceLevel;
+import io.choerodon.devops.api.vo.CheckInfoVO;
import io.choerodon.devops.api.vo.ConfigVO;
import io.choerodon.devops.api.vo.DefaultConfigVO;
import io.choerodon.devops.api.vo.DevopsConfigRepVO;
@@ -98,13 +99,13 @@ public ResponseEntity queryProjectDefaultConfig(
@Permission(level = ResourceLevel.ORGANIZATION, roles = {InitRoleCode.PROJECT_OWNER})
@ApiOperation(value = "校验chart配置信息是否正确")
@PostMapping(value = "/check_chart")
- public ResponseEntity checkChart(
+ public ResponseEntity checkChart(
@ApiParam(value = "项目id", required = true)
@PathVariable(value = "project_id") Long projectId,
@ApiParam(value = "chartMuseum信息", required = true)
@RequestBody ConfigVO configVO) {
return Optional.ofNullable(
- appServiceService.checkChart(configVO.getUrl(), configVO.getUserName(), configVO.getPassword()))
+ appServiceService.checkChart(projectId, configVO.getUrl(), configVO.getUsername(), configVO.getPassword()))
.map(target -> new ResponseEntity<>(target, HttpStatus.OK))
.orElseThrow(() -> new CommonException("error.connection.failed"));
}
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectController.java
index c3f80c0da9..ea9da99566 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectController.java
@@ -5,7 +5,6 @@
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
-import org.hzero.starter.keyencrypt.core.Encrypt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -19,7 +18,6 @@
import io.choerodon.devops.api.vo.ProjectReqVO;
import io.choerodon.devops.api.vo.iam.UserVO;
import io.choerodon.devops.app.service.DevopsProjectService;
-import io.choerodon.devops.infra.dto.DevopsProjectDTO;
import io.choerodon.devops.infra.dto.GitlabProjectSimple;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
import io.choerodon.swagger.annotation.CustomPageRequest;
diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/GitlabWebHookController.java b/src/main/java/io/choerodon/devops/api/controller/v1/GitlabWebHookController.java
index 08f08d3864..e8dc324099 100644
--- a/src/main/java/io/choerodon/devops/api/controller/v1/GitlabWebHookController.java
+++ b/src/main/java/io/choerodon/devops/api/controller/v1/GitlabWebHookController.java
@@ -43,12 +43,12 @@ public ResponseEntity gitOpsWebHook(HttpServletRequest httpServletRequest,
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
- @ApiOperation(value = "查询自动化测试应用实例状态")
- @Permission(permissionPublic = true)
- @PostMapping("/get_test_status")
- public void getTestStatus(
- @ApiParam(value = "releaseName", required = true)
- @RequestBody Map> testReleases) {
- appServiceInstanceService.getTestAppStatus(testReleases);
- }
+// @ApiOperation(value = "查询自动化测试应用实例状态")
+// @Permission(permissionPublic = true)
+// @PostMapping("/get_test_status")
+// public void getTestStatus(
+// @ApiParam(value = "releaseName", required = true)
+// @RequestBody Map> testReleases) {
+// appServiceInstanceService.getTestAppStatus(testReleases);
+// }
}
diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsCiPipelineAdditionalValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsCiPipelineAdditionalValidator.java
index bd506c881c..879ac64f3c 100644
--- a/src/main/java/io/choerodon/devops/api/validator/DevopsCiPipelineAdditionalValidator.java
+++ b/src/main/java/io/choerodon/devops/api/validator/DevopsCiPipelineAdditionalValidator.java
@@ -216,7 +216,7 @@ public static void validateMavenBuildStep(DevopsCiMavenBuildConfigVO config) {
// 校验用户直接粘贴的maven的settings文件的内容
if (!StringUtils.isEmpty(config.getMavenSettings())
- && !MavenSettingsUtil.isXmlFormat(Base64Util.getBase64DecodedString(config.getMavenSettings()))) {
+ && !MavenSettingsUtil.isXmlFormat(config.getMavenSettings())) {
// 如果不符合xml格式,抛异常
throw new CommonException(ERROR_MAVEN_SETTINGS_NOT_XML_FORMAT);
}
diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsHostAdditionalCheckValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsHostAdditionalCheckValidator.java
index 97de450925..f62d9a3d0a 100644
--- a/src/main/java/io/choerodon/devops/api/validator/DevopsHostAdditionalCheckValidator.java
+++ b/src/main/java/io/choerodon/devops/api/validator/DevopsHostAdditionalCheckValidator.java
@@ -50,10 +50,10 @@ public void validHostInformationMatch(DevopsHostCreateRequestVO devopsHostCreate
}
public void validHostIdAndInstanceIdMatch(Long hostId, Long instanceId) {
- CommonExAssertUtil.assertTrue(devopsHostService.HostIdInstanceIdMatch(hostId, instanceId), "error.host.id.instance.id.not.match");
+ CommonExAssertUtil.assertTrue(devopsHostService.hostIdInstanceIdMatch(hostId, instanceId), "error.host.id.instance.id.not.match");
}
public void validHostIdAndDockerInstanceIdMatch(Long hostId, Long instanceId) {
- CommonExAssertUtil.assertTrue(devopsHostService.HostIdDockerInstanceMatch(hostId, instanceId), "error.host.id.instance.id.not.match");
+ CommonExAssertUtil.assertTrue(devopsHostService.hostIdDockerInstanceMatch(hostId, instanceId), "error.host.id.instance.id.not.match");
}
}
diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsPvValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsPvValidator.java
index d6cd058b90..dcaf091f66 100644
--- a/src/main/java/io/choerodon/devops/api/validator/DevopsPvValidator.java
+++ b/src/main/java/io/choerodon/devops/api/validator/DevopsPvValidator.java
@@ -1,12 +1,13 @@
package io.choerodon.devops.api.validator;
+import io.kubernetes.client.openapi.models.V1HostPathVolumeSource;
+import io.kubernetes.client.openapi.models.V1NFSVolumeSource;
+
+import java.util.regex.Pattern;
+
import io.choerodon.core.exception.CommonException;
import io.choerodon.devops.api.vo.kubernetes.LocalPvResource;
import io.choerodon.devops.infra.enums.VolumeTypeEnum;
-import io.kubernetes.client.models.V1HostPathVolumeSource;
-import io.kubernetes.client.models.V1NFSVolumeSource;
-
-import java.util.regex.Pattern;
public class DevopsPvValidator {
diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsServiceValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsServiceValidator.java
index d738773517..7b99d53ea8 100644
--- a/src/main/java/io/choerodon/devops/api/validator/DevopsServiceValidator.java
+++ b/src/main/java/io/choerodon/devops/api/validator/DevopsServiceValidator.java
@@ -2,13 +2,13 @@
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import com.fasterxml.jackson.core.type.TypeReference;
-import org.apache.commons.lang.ObjectUtils;
-import org.apache.commons.lang.StringUtils;
import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
import io.choerodon.core.convertor.ApplicationContextHelper;
import io.choerodon.core.exception.CommonException;
@@ -47,7 +47,7 @@ private DevopsServiceValidator() {
public static void checkService(DevopsServiceReqVO devopsServiceReqVO, Long targetServiceId) {
devopsServiceReqVO.getPorts().forEach(DevopsServiceValidator::checkPorts);
checkName(devopsServiceReqVO.getName());
- if (!StringUtils.isEmpty(devopsServiceReqVO.getExternalIp())
+ if (!ObjectUtils.isEmpty(devopsServiceReqVO.getExternalIp())
&& !Pattern.matches(EXTERNAL_IP_PATTERN, devopsServiceReqVO.getExternalIp())) {
throw new CommonException("error.externalIp.notMatch");
}
@@ -95,8 +95,8 @@ private static void checkIPAndPortUnique(DevopsServiceReqVO devopsServiceReqVO,
Long port = portMapVO.getPort();
String externalIp = s.getExternalIp();
devopsServiceReqVO.getPorts().forEach(p -> {
- if (!StringUtils.isEmpty(devopsServiceReqVO.getExternalIp())) {
- if (ObjectUtils.equals(port, p.getPort()) && ObjectUtils.equals(externalIp, devopsServiceReqVO.getExternalIp())) {
+ if (!ObjectUtils.isEmpty(devopsServiceReqVO.getExternalIp())) {
+ if (Objects.equals(port, p.getPort()) && Objects.equals(externalIp, devopsServiceReqVO.getExternalIp())) {
throw new CommonException("error.same.externalIp.port.exist");
}
}
@@ -116,7 +116,7 @@ private static void checkIPAndPortUnique(DevopsServiceReqVO devopsServiceReqVO,
Long nodePort = portMapVO.getNodePort();
if (nodePort != null) {
devopsServiceReqVO.getPorts().forEach(p -> {
- if (ObjectUtils.equals(nodePort, p.getNodePort())) {
+ if (Objects.equals(nodePort, p.getNodePort())) {
throw new CommonException("error.same.nodePort.exist");
}
});
diff --git a/src/main/java/io/choerodon/devops/api/vo/AppServiceRepVO.java b/src/main/java/io/choerodon/devops/api/vo/AppServiceRepVO.java
index 43fbf75222..9f744d6fda 100644
--- a/src/main/java/io/choerodon/devops/api/vo/AppServiceRepVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/AppServiceRepVO.java
@@ -142,6 +142,18 @@ public class AppServiceRepVO {
@ApiModelProperty("用户权限等级")
private Integer accessLevel;
+ @ApiModelProperty("helm仓库配置id")
+ @Encrypt
+ private Long helmConfigId;
+
+ public Long getHelmConfigId() {
+ return helmConfigId;
+ }
+
+ public void setHelmConfigId(Long helmConfigId) {
+ this.helmConfigId = helmConfigId;
+ }
+
public Long getExternalConfigId() {
return externalConfigId;
}
diff --git a/src/main/java/io/choerodon/devops/api/vo/AppServiceUpdateDTO.java b/src/main/java/io/choerodon/devops/api/vo/AppServiceUpdateDTO.java
index 0b0a52ef5c..2ba37db177 100644
--- a/src/main/java/io/choerodon/devops/api/vo/AppServiceUpdateDTO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/AppServiceUpdateDTO.java
@@ -25,8 +25,13 @@ public class AppServiceUpdateDTO {
@ApiModelProperty("harbor配置")
private DevopsConfigVO harbor;
@ApiModelProperty("char配置")
+ @Deprecated
private DevopsConfigVO chart;
+ @Encrypt
+ @ApiModelProperty("helm配置id")
+ private Long helmConfigId;
+
@Length(max = 512, min = 1)
@Pattern(regexp = "[A-Za-z0-9_\\-.]+")
@ApiModelProperty("应用服务附加的pom信息:groupId(敏捷使用)")
@@ -115,4 +120,11 @@ public void setHarborRepoConfigDTO(HarborRepoConfigDTO harborRepoConfigDTO) {
this.harborRepoConfigDTO = harborRepoConfigDTO;
}
+ public Long getHelmConfigId() {
+ return helmConfigId;
+ }
+
+ public void setHelmConfigId(Long helmConfigId) {
+ this.helmConfigId = helmConfigId;
+ }
}
diff --git a/src/main/java/io/choerodon/devops/api/vo/AppServiceVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/AppServiceVersionVO.java
index 4037d5e5a3..6d9d583b49 100644
--- a/src/main/java/io/choerodon/devops/api/vo/AppServiceVersionVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/AppServiceVersionVO.java
@@ -5,6 +5,10 @@
import io.swagger.annotations.ApiModelProperty;
import org.hzero.starter.keyencrypt.core.Encrypt;
+import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO;
+import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO;
+import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO;
+
/**
* Created by younger on 2018/4/14.
*/
@@ -18,15 +22,45 @@ public class AppServiceVersionVO {
private Long appServiceId;
@ApiModelProperty("版本创建时间")
private Date creationDate;
- @ApiModelProperty("版本中镜像推送的镜像仓库类型")
- private String repoType;
@ApiModelProperty("版本是否可以删除标记")
private Boolean deleteFlag = true;
@ApiModelProperty("版本最近更新时间")
private Date lastUpdateDate;
+ @ApiModelProperty("版本中镜像推送的镜像仓库类型")
+ private String repoType;
@ApiModelProperty("docker镜像版本")
private String image;
+ @ApiModelProperty(value = "关联的helm版本信息")
+ private AppServiceHelmVersionVO appServiceHelmVersionVO;
+ @ApiModelProperty(value = "关联的maven版本信息")
+ private AppServiceMavenVersionVO appServiceMavenVersionVO;
+ @ApiModelProperty(value = "关联的镜像版本信息")
+ private AppServiceImageVersionVO appServiceImageVersionVO;
+
+ public AppServiceHelmVersionVO getAppServiceHelmVersionVO() {
+ return appServiceHelmVersionVO;
+ }
+
+ public void setAppServiceHelmVersionVO(AppServiceHelmVersionVO appServiceHelmVersionVO) {
+ this.appServiceHelmVersionVO = appServiceHelmVersionVO;
+ }
+
+ public AppServiceMavenVersionVO getAppServiceMavenVersionVO() {
+ return appServiceMavenVersionVO;
+ }
+
+ public void setAppServiceMavenVersionVO(AppServiceMavenVersionVO appServiceMavenVersionVO) {
+ this.appServiceMavenVersionVO = appServiceMavenVersionVO;
+ }
+
+ public AppServiceImageVersionVO getAppServiceImageVersionVO() {
+ return appServiceImageVersionVO;
+ }
+
+ public void setAppServiceImageVersionVO(AppServiceImageVersionVO appServiceImageVersionVO) {
+ this.appServiceImageVersionVO = appServiceImageVersionVO;
+ }
public Date getLastUpdateDate() {
return lastUpdateDate;
diff --git a/src/main/java/io/choerodon/devops/api/vo/CheckInfoVO.java b/src/main/java/io/choerodon/devops/api/vo/CheckInfoVO.java
new file mode 100644
index 0000000000..0c9bedde73
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/api/vo/CheckInfoVO.java
@@ -0,0 +1,37 @@
+package io.choerodon.devops.api.vo;
+
+/**
+ * 〈功能简述〉
+ * 〈〉
+ *
+ * @author lihao
+ * @since 2022/07/22
+ */
+public class CheckInfoVO {
+ private boolean success;
+ private String errMsg;
+
+ public CheckInfoVO() {
+ }
+
+ public CheckInfoVO(boolean success, String errMsg) {
+ this.success = success;
+ this.errMsg = errMsg;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public String getErrMsg() {
+ return errMsg;
+ }
+
+ public void setErrMsg(String errMsg) {
+ this.errMsg = errMsg;
+ }
+}
diff --git a/src/main/java/io/choerodon/devops/api/vo/CiPipelineImageVO.java b/src/main/java/io/choerodon/devops/api/vo/CiPipelineImageVO.java
index d4d1164816..0f91f3f975 100644
--- a/src/main/java/io/choerodon/devops/api/vo/CiPipelineImageVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/CiPipelineImageVO.java
@@ -2,6 +2,8 @@
import javax.validation.constraints.NotNull;
+import io.swagger.annotations.ApiParam;
+
/**
* @author scp
* @date 2020/7/21
@@ -20,6 +22,16 @@ public class CiPipelineImageVO {
private Long harborRepoId;
@NotNull
private String repoType;
+ @ApiParam(value = "版本", required = true)
+ private String version;
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
public String getToken() {
return token;
diff --git a/src/main/java/io/choerodon/devops/api/vo/ConfigVO.java b/src/main/java/io/choerodon/devops/api/vo/ConfigVO.java
index 7c62bf516b..99b26c9a01 100644
--- a/src/main/java/io/choerodon/devops/api/vo/ConfigVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/ConfigVO.java
@@ -15,6 +15,8 @@ public class ConfigVO implements Serializable {
private String userName;
+ private String username;
+
private String password;
private String project;
@@ -23,6 +25,16 @@ public class ConfigVO implements Serializable {
private Boolean isPrivate;
+ public ConfigVO() {
+ }
+
+ public ConfigVO(String url, String userName, String password, Boolean isPrivate) {
+ this.url = url;
+ this.userName = userName;
+ this.password = password;
+ this.isPrivate = isPrivate;
+ }
+
public String getUrl() {
return url;
}
@@ -71,6 +83,14 @@ public void setIsPrivate(Boolean aPrivate) {
isPrivate = aPrivate;
}
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
diff --git a/src/main/java/io/choerodon/devops/api/vo/DevopsCiPipelineRecordVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsCiPipelineRecordVO.java
index 46ca7823be..5204d18d44 100644
--- a/src/main/java/io/choerodon/devops/api/vo/DevopsCiPipelineRecordVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/DevopsCiPipelineRecordVO.java
@@ -45,6 +45,16 @@ public class DevopsCiPipelineRecordVO extends DevopsPipelineRecordVO {
private Date lastUpdateDate;
private Long gitlabProjectId;
+ @ApiModelProperty("gitlab commit sha")
+ private String commitSha;
+
+ public String getCommitSha() {
+ return commitSha;
+ }
+
+ public void setCommitSha(String commitSha) {
+ this.commitSha = commitSha;
+ }
public Long getGitlabProjectId() {
return gitlabProjectId;
diff --git a/src/main/java/io/choerodon/devops/api/vo/DevopsEnvironmentInfoVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsEnvironmentInfoVO.java
index 3256f4e829..6bdc478439 100644
--- a/src/main/java/io/choerodon/devops/api/vo/DevopsEnvironmentInfoVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/DevopsEnvironmentInfoVO.java
@@ -47,6 +47,8 @@ public class DevopsEnvironmentInfoVO {
@ApiModelProperty("gitops同步状态")
private String gitopsStatus;
+ private String clusterBelongedProjectName;
+
public Boolean getFail() {
return fail;
}
@@ -166,4 +168,12 @@ public String getGitlabUrl() {
public void setGitlabUrl(String gitlabUrl) {
this.gitlabUrl = gitlabUrl;
}
+
+ public String getClusterBelongedProjectName() {
+ return clusterBelongedProjectName;
+ }
+
+ public void setClusterBelongedProjectName(String clusterBelongedProjectName) {
+ this.clusterBelongedProjectName = clusterBelongedProjectName;
+ }
}
diff --git a/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java
new file mode 100644
index 0000000000..baf669230e
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java
@@ -0,0 +1,178 @@
+package io.choerodon.devops.api.vo;
+
+import java.util.Date;
+import javax.validation.constraints.NotNull;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Length;
+import org.hzero.starter.keyencrypt.core.Encrypt;
+
+public class DevopsHelmConfigVO {
+ @Encrypt
+ private Long id;
+
+ @ApiModelProperty("仓库名称")
+ @Length(max = 60, min = 1)
+ private String name;
+
+ @ApiModelProperty("helm仓库地址 平台层或组织层为仓库地址前缀部分 项目层是完整的仓库地址")
+ @NotNull
+ private String url;
+
+ @ApiModelProperty("仓库账号")
+ private String username;
+
+ @ApiModelProperty("仓库密码")
+ private String password;
+
+ @ApiModelProperty("关联该配置的层级 project/organization/side")
+ private String resourceType;
+
+ @ApiModelProperty("关联该仓库配置的资源id, 项目id 组织id 平台层为0")
+ private Long resourceId;
+
+ @ApiModelProperty("仓库是否私有")
+ private Boolean repoPrivate;
+
+ @ApiModelProperty("是否为默认仓库")
+ private Boolean repoDefault;
+
+ @ApiModelProperty("创建时间")
+ private Date creationDate;
+
+ @ApiModelProperty("创建者头像")
+ private String creatorImageUrl;
+
+ @ApiModelProperty("创建者登录名")
+ private String creatorLoginName;
+
+ @ApiModelProperty("创建者真实名称")
+ private String creatorRealName;
+
+ @ApiModelProperty("版本控制号")
+ private Long objectVersionNumber;
+
+ @ApiModelProperty("创建者")
+ @Encrypt
+ private Long createdBy;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getResourceType() {
+ return resourceType;
+ }
+
+ public void setResourceType(String resourceType) {
+ this.resourceType = resourceType;
+ }
+
+ public Long getResourceId() {
+ return resourceId;
+ }
+
+ public void setResourceId(Long resourceId) {
+ this.resourceId = resourceId;
+ }
+
+ public Boolean getRepoPrivate() {
+ return repoPrivate;
+ }
+
+ public void setRepoPrivate(Boolean repoPrivate) {
+ this.repoPrivate = repoPrivate;
+ }
+
+ public Boolean getRepoDefault() {
+ return repoDefault;
+ }
+
+ public void setRepoDefault(Boolean repoDefault) {
+ this.repoDefault = repoDefault;
+ }
+
+ public Date getCreationDate() {
+ return creationDate;
+ }
+
+ public void setCreationDate(Date creationDate) {
+ this.creationDate = creationDate;
+ }
+
+ public String getCreatorImageUrl() {
+ return creatorImageUrl;
+ }
+
+ public void setCreatorImageUrl(String creatorImageUrl) {
+ this.creatorImageUrl = creatorImageUrl;
+ }
+
+ public String getCreatorLoginName() {
+ return creatorLoginName;
+ }
+
+ public void setCreatorLoginName(String creatorLoginName) {
+ this.creatorLoginName = creatorLoginName;
+ }
+
+ public String getCreatorRealName() {
+ return creatorRealName;
+ }
+
+ public void setCreatorRealName(String creatorRealName) {
+ this.creatorRealName = creatorRealName;
+ }
+
+ public Long getObjectVersionNumber() {
+ return objectVersionNumber;
+ }
+
+ public void setObjectVersionNumber(Long objectVersionNumber) {
+ this.objectVersionNumber = objectVersionNumber;
+ }
+
+ public Long getCreatedBy() {
+ return createdBy;
+ }
+
+ public void setCreatedBy(Long createdBy) {
+ this.createdBy = createdBy;
+ }
+}
diff --git a/src/main/java/io/choerodon/devops/api/vo/DevopsServiceConfigVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsServiceConfigVO.java
index 678cd966db..e462dfc706 100644
--- a/src/main/java/io/choerodon/devops/api/vo/DevopsServiceConfigVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/DevopsServiceConfigVO.java
@@ -17,6 +17,16 @@ public class DevopsServiceConfigVO {
private List externalIps;
@ApiModelProperty("端口号")
private List ports;
+ @ApiModelProperty("clusterIp")
+ private String clusterIp;
+
+ public String getClusterIp() {
+ return clusterIp;
+ }
+
+ public void setClusterIp(String clusterIp) {
+ this.clusterIp = clusterIp;
+ }
public List getExternalIps() {
return externalIps;
diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java
new file mode 100644
index 0000000000..5fbba9bb08
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java
@@ -0,0 +1,127 @@
+package io.choerodon.devops.api.vo.appversion;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.hzero.starter.keyencrypt.core.Encrypt;
+
+/**
+ * @author hao.wang@zknow.com
+ * @since 2022-07-14 10:41:40
+ */
+public class AppServiceHelmVersionVO {
+
+ @Encrypt
+ private Long id;
+ @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true)
+ @Encrypt
+ private Long appServiceVersionId;
+ @ApiModelProperty(value = "配置Id", required = true)
+ @Encrypt
+ private Long helmConfigId;
+ @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true)
+ private String harborRepoType;
+ @ApiModelProperty(value = "配置Id", required = true)
+ @Encrypt
+ private Long harborConfigId;
+ @ApiModelProperty(value = "参数 ID", required = true)
+ @Encrypt
+ private Long valueId;
+ @ApiModelProperty(value = "readme value id", required = true)
+ @Encrypt
+ private Long readmeValueId;
+ @ApiModelProperty(value = "镜像名", required = true)
+ private String image;
+ @ApiModelProperty(value = "仓库地址", required = true)
+ private String repository;
+ @ApiModelProperty(value = "chart包名", required = true)
+ private String chartName;
+ @ApiModelProperty("版本号")
+ private String version;
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public String getChartName() {
+ return chartName;
+ }
+
+ public void setChartName(String chartName) {
+ this.chartName = chartName;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getAppServiceVersionId() {
+ return appServiceVersionId;
+ }
+
+ public void setAppServiceVersionId(Long appServiceVersionId) {
+ this.appServiceVersionId = appServiceVersionId;
+ }
+
+ public Long getHelmConfigId() {
+ return helmConfigId;
+ }
+
+ public void setHelmConfigId(Long helmConfigId) {
+ this.helmConfigId = helmConfigId;
+ }
+
+ public String getHarborRepoType() {
+ return harborRepoType;
+ }
+
+ public void setHarborRepoType(String harborRepoType) {
+ this.harborRepoType = harborRepoType;
+ }
+
+ public Long getHarborConfigId() {
+ return harborConfigId;
+ }
+
+ public void setHarborConfigId(Long harborConfigId) {
+ this.harborConfigId = harborConfigId;
+ }
+
+ public Long getValueId() {
+ return valueId;
+ }
+
+ public void setValueId(Long valueId) {
+ this.valueId = valueId;
+ }
+
+ public Long getReadmeValueId() {
+ return readmeValueId;
+ }
+
+ public void setReadmeValueId(Long readmeValueId) {
+ this.readmeValueId = readmeValueId;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+
+ public String getRepository() {
+ return repository;
+ }
+
+ public void setRepository(String repository) {
+ this.repository = repository;
+ }
+}
diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java
new file mode 100644
index 0000000000..06e03c03a4
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java
@@ -0,0 +1,65 @@
+package io.choerodon.devops.api.vo.appversion;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.hzero.starter.keyencrypt.core.Encrypt;
+
+/**
+ * @author hao.wang@zknow.com
+ * @since 2022-07-14 10:42:13
+ */
+public class AppServiceImageVersionVO {
+
+ @Encrypt
+ private Long id;
+ @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true)
+ @Encrypt
+ private Long appServiceVersionId;
+ @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true)
+ private String harborRepoType;
+ @ApiModelProperty(value = "配置Id", required = true)
+ @Encrypt
+ private Long harborConfigId;
+ @ApiModelProperty(value = "镜像名", required = true)
+ private String image;
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getAppServiceVersionId() {
+ return appServiceVersionId;
+ }
+
+ public void setAppServiceVersionId(Long appServiceVersionId) {
+ this.appServiceVersionId = appServiceVersionId;
+ }
+
+ public String getHarborRepoType() {
+ return harborRepoType;
+ }
+
+ public void setHarborRepoType(String harborRepoType) {
+ this.harborRepoType = harborRepoType;
+ }
+
+ public Long getHarborConfigId() {
+ return harborConfigId;
+ }
+
+ public void setHarborConfigId(Long harborConfigId) {
+ this.harborConfigId = harborConfigId;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public void setImage(String image) {
+ this.image = image;
+ }
+}
diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java
new file mode 100644
index 0000000000..6db97b402c
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java
@@ -0,0 +1,105 @@
+package io.choerodon.devops.api.vo.appversion;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.hzero.starter.keyencrypt.core.Encrypt;
+
+/**
+ * @author hao.wang@zknow.com
+ * @since 2022-07-14 10:42:26
+ */
+public class AppServiceMavenVersionVO {
+
+ @Encrypt
+ private Long id;
+ @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true)
+ @Encrypt
+ private Long appServiceVersionId;
+ @ApiModelProperty(value = "groupId", required = true)
+ private String groupId;
+ @ApiModelProperty(value = "artifactId", required = true)
+ private String artifactId;
+ @ApiModelProperty(value = "版本", required = true)
+ private String version;
+ @ApiModelProperty(value = "nexus仓库id,hrds_prod_repo.rdupm_nexus_repository.repository_id")
+ @Encrypt
+ private Long nexusRepoId;
+
+ private String mavenRepoUrl;
+
+ private String username;
+
+ private String password;
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getAppServiceVersionId() {
+ return appServiceVersionId;
+ }
+
+ public void setAppServiceVersionId(Long appServiceVersionId) {
+ this.appServiceVersionId = appServiceVersionId;
+ }
+
+ public String getGroupId() {
+ return groupId;
+ }
+
+ public void setGroupId(String groupId) {
+ this.groupId = groupId;
+ }
+
+ public String getArtifactId() {
+ return artifactId;
+ }
+
+ public void setArtifactId(String artifactId) {
+ this.artifactId = artifactId;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public Long getNexusRepoId() {
+ return nexusRepoId;
+ }
+
+ public void setNexusRepoId(Long nexusRepoId) {
+ this.nexusRepoId = nexusRepoId;
+ }
+
+ public String getMavenRepoUrl() {
+ return mavenRepoUrl;
+ }
+
+ public void setMavenRepoUrl(String mavenRepoUrl) {
+ this.mavenRepoUrl = mavenRepoUrl;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
diff --git a/src/main/java/io/choerodon/devops/api/vo/chart/ChartTagVO.java b/src/main/java/io/choerodon/devops/api/vo/chart/ChartTagVO.java
index 5909ff47e6..03ea50de31 100644
--- a/src/main/java/io/choerodon/devops/api/vo/chart/ChartTagVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/chart/ChartTagVO.java
@@ -14,6 +14,24 @@ public class ChartTagVO {
private String chartName;
private String chartVersion;
private Long appServiceId;
+ private Long tenantId;
+ private Long projectId;
+
+ public Long getTenantId() {
+ return tenantId;
+ }
+
+ public void setTenantId(Long tenantId) {
+ this.tenantId = tenantId;
+ }
+
+ public Long getProjectId() {
+ return projectId;
+ }
+
+ public void setProjectId(Long projectId) {
+ this.projectId = projectId;
+ }
public String getOrgCode() {
return orgCode;
diff --git a/src/main/java/io/choerodon/devops/api/vo/iam/ImmutableProjectInfoVO.java b/src/main/java/io/choerodon/devops/api/vo/iam/ImmutableProjectInfoVO.java
index 2c6e46a734..49447ffad3 100644
--- a/src/main/java/io/choerodon/devops/api/vo/iam/ImmutableProjectInfoVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/iam/ImmutableProjectInfoVO.java
@@ -11,6 +11,8 @@
public class ImmutableProjectInfoVO {
@ApiModelProperty("项目code")
private String projCode;
+ @ApiModelProperty("devops基础组件中使用的编码,harbor、gitlab、sonar、chartmuserm")
+ private String devopsComponentCode;
@ApiModelProperty("组织id")
private Long tenantId;
@ApiModelProperty("组织code")
@@ -25,6 +27,14 @@ public ImmutableProjectInfoVO(String projCode, Long tenantId, String tenantNum)
this.tenantNum = tenantNum;
}
+ public String getDevopsComponentCode() {
+ return devopsComponentCode;
+ }
+
+ public void setDevopsComponentCode(String devopsComponentCode) {
+ this.devopsComponentCode = devopsComponentCode;
+ }
+
public String getProjCode() {
return projCode;
}
diff --git a/src/main/java/io/choerodon/devops/api/vo/pipeline/PipelineCompositeRecordVO.java b/src/main/java/io/choerodon/devops/api/vo/pipeline/PipelineCompositeRecordVO.java
index 20cb9fe233..e5e8156116 100644
--- a/src/main/java/io/choerodon/devops/api/vo/pipeline/PipelineCompositeRecordVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/pipeline/PipelineCompositeRecordVO.java
@@ -2,6 +2,8 @@
import java.util.Date;
+import org.hzero.starter.keyencrypt.core.Encrypt;
+
/**
* 〈功能简述〉
* 〈〉
@@ -10,10 +12,20 @@
* @since 2020/11/16 14:54
*/
public class PipelineCompositeRecordVO {
+ @Encrypt
+ private Long id;
private String ciStatus;
private String cdStatus;
private Date creationDate;
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
public String getCiStatus() {
return ciStatus;
}
diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobGroupVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobGroupVO.java
index 5f609b661f..0a9a73eebb 100644
--- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobGroupVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobGroupVO.java
@@ -1,12 +1,11 @@
package io.choerodon.devops.api.vo.template;
-import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+
+import io.swagger.annotations.ApiModelProperty;
import org.hzero.starter.keyencrypt.core.Encrypt;
import io.choerodon.devops.infra.dto.iam.IamUserDTO;
diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobStepRelVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobStepRelVO.java
index 0f8243c097..0d373b2db6 100644
--- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobStepRelVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobStepRelVO.java
@@ -1,7 +1,5 @@
package io.choerodon.devops.api.vo.template;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import io.swagger.annotations.ApiModelProperty;
diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobVO.java
index 6e263058fd..7c3b03f9c3 100644
--- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobVO.java
@@ -2,13 +2,12 @@
import java.util.Date;
import java.util.List;
+import javax.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
-import javax.validation.constraints.NotNull;
import org.hzero.starter.keyencrypt.core.Encrypt;
-import io.choerodon.devops.api.vo.DevopsCiStepVO;
import io.choerodon.devops.infra.dto.CiTemplateJobGroupDTO;
import io.choerodon.devops.infra.dto.iam.IamUserDTO;
diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateSonarVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateSonarVO.java
index 9d66c65add..aa88cf572f 100644
--- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateSonarVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateSonarVO.java
@@ -1,10 +1,9 @@
package io.choerodon.devops.api.vo.template;
-import io.swagger.annotations.ApiModelProperty;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
+
+import io.swagger.annotations.ApiModelProperty;
import org.hzero.starter.keyencrypt.core.Encrypt;
diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateStageJobRelVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateStageJobRelVO.java
index f74d575627..556051eac3 100644
--- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateStageJobRelVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateStageJobRelVO.java
@@ -1,19 +1,10 @@
package io.choerodon.devops.api.vo.template;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
import javax.validation.constraints.NotNull;
-import com.fasterxml.jackson.annotation.JsonInclude;
-import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.hzero.starter.keyencrypt.core.Encrypt;
-import io.choerodon.mybatis.annotation.ModifyAudit;
-import io.choerodon.mybatis.annotation.VersionAudit;
-import io.choerodon.mybatis.domain.AuditDomain;
-
/**
* 流水线阶段与任务模板的关系表(CiTemplateStageJobRel)实体类
*
diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateVariableVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateVariableVO.java
index 72cef2ea6d..2a6c87f41d 100644
--- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateVariableVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateVariableVO.java
@@ -1,10 +1,9 @@
package io.choerodon.devops.api.vo.template;
-import io.swagger.annotations.ApiModelProperty;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
+
+import io.swagger.annotations.ApiModelProperty;
import org.hzero.starter.keyencrypt.core.Encrypt;
/**
diff --git a/src/main/java/io/choerodon/devops/api/vo/test/ApiTestTaskRecordVO.java b/src/main/java/io/choerodon/devops/api/vo/test/ApiTestTaskRecordVO.java
index 363b6d3887..3ea8594a41 100644
--- a/src/main/java/io/choerodon/devops/api/vo/test/ApiTestTaskRecordVO.java
+++ b/src/main/java/io/choerodon/devops/api/vo/test/ApiTestTaskRecordVO.java
@@ -51,6 +51,9 @@ public class ApiTestTaskRecordVO {
private Double performThreshold;
+ @Encrypt
+ private Long folderId;
+
public Long getSuiteId() {
return suiteId;
}
@@ -155,11 +158,20 @@ public void setPerformThreshold(Double performThreshold) {
this.performThreshold = performThreshold;
}
+ public Long getFolderId() {
+ return folderId;
+ }
+
+ public void setFolderId(Long folderId) {
+ this.folderId = folderId;
+ }
+
@Override
public String toString() {
return "ApiTestTaskRecordVO{" +
"id=" + id +
", taskId=" + taskId +
+ ", suiteId=" + suiteId +
", status='" + status + '\'' +
", startTime=" + startTime +
", endTime=" + endTime +
@@ -169,6 +181,8 @@ public String toString() {
", errorMessage='" + errorMessage + '\'' +
", viewId='" + viewId + '\'' +
", deployJobName='" + deployJobName + '\'' +
+ ", performThreshold=" + performThreshold +
+ ", folderId=" + folderId +
'}';
}
}
diff --git a/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketHandler.java b/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketHandler.java
deleted file mode 100644
index 13bedab92e..0000000000
--- a/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketHandler.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package io.choerodon.devops.api.ws.polaris.agent;
-
-import static io.choerodon.devops.infra.constant.DevOpsWebSocketConstants.AGENT_POLARIS;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.web.socket.TextMessage;
-import org.springframework.web.socket.WebSocketSession;
-
-import io.choerodon.devops.api.vo.polaris.PolarisResponsePayloadVO;
-import io.choerodon.devops.api.ws.AbstractSocketHandler;
-import io.choerodon.devops.api.ws.WebSocketTool;
-import io.choerodon.devops.app.service.PolarisScanningService;
-import io.choerodon.devops.infra.util.JsonHelper;
-
-/**
- * // TODO to be delete at 0.25
- * polaris结果的返回不再通过websocket,而是http,这个逻辑不再使用了
- *
- * @author zmf
- * @since 20-5-9
- */
-@Deprecated
-@Component
-public class AgentPolarisSocketHandler extends AbstractSocketHandler {
- private static final Logger LOGGER = LoggerFactory.getLogger(AgentPolarisSocketHandler.class);
-
- @Autowired
- private PolarisScanningService polarisScanningService;
-
- @Override
- public String processor() {
- return AGENT_POLARIS;
- }
-
- @Override
- public void handleTextMessage(WebSocketSession session, TextMessage message) {
- LOGGER.info("Polaris: received message from agent...");
-
- // 获取集群id
- Long clusterId = WebSocketTool.getClusterId(session);
- LOGGER.info("Polaris: the cluster id is {}", clusterId);
-
-
- polarisScanningService.handleAgentPolarisMessage(JsonHelper.unmarshalByJackson(message.getPayload(), PolarisResponsePayloadVO.class));
-
- WebSocketTool.closeSessionQuietly(session);
- }
-}
diff --git a/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketInterceptor.java b/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketInterceptor.java
deleted file mode 100644
index 6a2247e06e..0000000000
--- a/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketInterceptor.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package io.choerodon.devops.api.ws.polaris.agent;
-
-import static io.choerodon.devops.infra.constant.DevOpsWebSocketConstants.AGENT_POLARIS;
-
-import java.util.Map;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.server.ServerHttpRequest;
-import org.springframework.http.server.ServerHttpResponse;
-import org.springframework.http.server.ServletServerHttpRequest;
-import org.springframework.stereotype.Component;
-import org.springframework.web.socket.WebSocketHandler;
-
-import io.choerodon.devops.api.ws.AbstractSocketInterceptor;
-import io.choerodon.devops.infra.handler.ClusterConnectionHandler;
-
-/**
- * // TODO to be delete at 0.25
- * polaris结果的返回不再通过websocket,而是http,这个逻辑不再使用了
- *
- * @author zmf
- * @since 20-5-9
- */
-@Deprecated
-@Component
-public class AgentPolarisSocketInterceptor extends AbstractSocketInterceptor {
- @Autowired
- private ClusterConnectionHandler clusterConnectionHandler;
-
- @Override
- public String processor() {
- return AGENT_POLARIS;
- }
-
- @Override
- public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) {
- return clusterConnectionHandler.validConnectionParameter(((ServletServerHttpRequest) request).getServletRequest());
- }
-}
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/DemoEnvSetupSagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/DemoEnvSetupSagaHandler.java
index c0f9392e70..bcbccb0187 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/DemoEnvSetupSagaHandler.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/DemoEnvSetupSagaHandler.java
@@ -61,6 +61,7 @@ private String handleCreateGroupsForDemoProject(String payload) {
gitlabGroupPayload.setOrganizationCode(registerInfo.getOrganization().getCode());
gitlabGroupPayload.setOrganizationName(registerInfo.getOrganization().getName());
gitlabGroupPayload.setProjectCode(registerInfo.getProject().getCode());
+ gitlabGroupPayload.setDevopsComponentCode(registerInfo.getProject().getCode());
gitlabGroupPayload.setProjectId(registerInfo.getProject().getId());
gitlabGroupPayload.setProjectName(registerInfo.getProject().getName());
gitlabGroupPayload.setUserId(registerInfo.getUser().getId());
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/DevopsSagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/DevopsSagaHandler.java
index e088d7f1cd..abf610cd5b 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/DevopsSagaHandler.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/DevopsSagaHandler.java
@@ -1,17 +1,9 @@
package io.choerodon.devops.app.eventhandler;
-import static io.choerodon.asgard.saga.SagaDefinition.TimeoutPolicy.ALERT_ONLY;
-import static io.choerodon.devops.app.eventhandler.constants.SagaTopicCodeConstants.*;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.Objects;
-
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
-import io.kubernetes.client.JSON;
+import io.kubernetes.client.openapi.JSON;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +11,14 @@
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.Objects;
+
+import static io.choerodon.asgard.saga.SagaDefinition.TimeoutPolicy.ALERT_ONLY;
+import static io.choerodon.devops.app.eventhandler.constants.SagaTopicCodeConstants.*;
+
import io.choerodon.asgard.saga.SagaDefinition;
import io.choerodon.asgard.saga.annotation.SagaTask;
import io.choerodon.devops.api.vo.*;
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java
index eb1fd7f26b..bc22fec9a9 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java
@@ -1,12 +1,15 @@
package io.choerodon.devops.app.eventhandler;
import static io.choerodon.devops.infra.constant.GitOpsConstants.NEW_LINE;
+import static io.choerodon.devops.infra.constant.MiscConstants.DEVOPS;
+import static io.choerodon.devops.infra.constant.MiscConstants.OPERATIONS;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.type.TypeReference;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import org.slf4j.Logger;
@@ -32,9 +35,9 @@
import io.choerodon.devops.infra.dto.iam.ProjectDTO;
import io.choerodon.devops.infra.exception.NoTraceException;
import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator;
-import io.choerodon.devops.infra.mapper.DevopsCdJobRecordMapper;
import io.choerodon.devops.infra.mapper.UserAttrMapper;
import io.choerodon.devops.infra.util.ArrayUtil;
+import io.choerodon.devops.infra.util.JsonHelper;
import io.choerodon.devops.infra.util.LogUtil;
import io.choerodon.devops.infra.util.TypeUtil;
@@ -51,15 +54,6 @@ public class SagaHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(SagaHandler.class);
private final Gson gson = new Gson();
- /**
- * devops项目类型
- */
- private static final String DEVOPS = "N_DEVOPS";
-
- /**
- * 运维项目类型
- */
- private static final String OPERATIONS = "N_OPERATIONS";
@Autowired
private GitlabGroupService gitlabGroupService;
@@ -72,21 +66,17 @@ public class SagaHandler {
@Autowired
private BaseServiceClientOperator baseServiceClientOperator;
@Autowired
- private DevopsCdJobRecordMapper devopsCdJobRecordMapper;
- @Autowired
- private DevopsCdPipelineRecordService devopsCdPipelineRecordService;
- @Autowired
private ChartService chartService;
@Autowired
private GitlabHandleService gitlabHandleService;
@Autowired
private DevopsAppTemplateService devopsAppTemplateService;
@Autowired
- private DevopsMiddlewareService devopsMiddlewareService;
- @Autowired
private UserAttrService userAttrService;
@Autowired
private UserAttrMapper userAttrMapper;
+ @Autowired
+ private DevopsGitService devopsGitService;
private void loggerInfo(Object o) {
if (LOGGER.isInfoEnabled()) {
@@ -104,7 +94,7 @@ private void loggerInfo(Object o) {
seq = 1)
public String handleGitOpsGroupEvent(String msg) {
ProjectPayload projectPayload = gson.fromJson(msg, ProjectPayload.class);
- if (!projectPayload.getProjectCategoryVOS().stream().map(ProjectCategoryVO::getCode).anyMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) {
+ if (projectPayload.getProjectCategoryVOS().stream().map(ProjectCategoryVO::getCode).noneMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) {
return msg;
}
GitlabGroupPayload gitlabGroupPayload = new GitlabGroupPayload();
@@ -135,19 +125,12 @@ public String handleUpdateGitOpsGroupEvent(String msg) {
if (CollectionUtils.isEmpty(projectPayload.getProjectCategoryVOS())) {
return msg;
}
- if (!projectPayload.getProjectCategoryVOS().stream().map(ProjectCategoryVO::getCode).anyMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) {
+ if (projectPayload.getProjectCategoryVOS().stream().map(ProjectCategoryVO::getCode).noneMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) {
return msg;
}
gitlabHandleService.handleProjectCategoryEvent(projectPayload);
LOGGER.info(">>>>>>>>>end sync project devops category<<<<<<<<<<");
return msg;
-
-// ProjectPayload projectPayload = gson.fromJson(msg, ProjectPayload.class);
-// GitlabGroupPayload gitlabGroupPayload = new GitlabGroupPayload();
-// BeanUtils.copyProperties(projectPayload, gitlabGroupPayload);
-// loggerInfo(msg);
-// gitlabGroupService.updateGroups(gitlabGroupPayload);
-// return msg;
}
/**
@@ -184,7 +167,7 @@ public List handleDeleteMemberRoleEvent(String payload) {
List tempList = new ArrayList<>(gitlabGroupMemberVOList);
tempList.forEach(t -> {
if (t.getResourceType().equals(ResourceLevel.PROJECT.value())) {
- if (!baseServiceClientOperator.listProjectCategoryById(t.getResourceId()).stream().anyMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) {
+ if (baseServiceClientOperator.listProjectCategoryById(t.getResourceId()).stream().noneMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) {
gitlabGroupMemberVOList.remove(t);
}
}
@@ -207,9 +190,8 @@ public List handleDeleteMemberRoleEvent(String payload) {
sagaCode = SagaTopicCodeConstants.IAM_CREATE_USER,
maxRetryCount = 5, seq = 1)
public List handleCreateUserEvent(String payload) {
- List gitlabUserDTO = gson.fromJson(payload, new TypeToken>() {
- }.getType());
-
+ List gitlabUserDTO = JsonHelper.unmarshalByJackson(payload, new TypeReference>() {
+ });
loggerInfo(gitlabUserDTO);
StringBuilder failedUsers = new StringBuilder();
List exs = new ArrayList<>();
@@ -231,12 +213,6 @@ public List handleCreateUserEvent(String payload) {
try {
gitlabUserService.createGitlabUserInNewTx(gitlabUserReqDTO);
LOGGER.info("Finished to create user {}", t);
- // 更改devops_user 登录名
- UserAttrDTO result = userAttrService.baseQueryByIamUserId(TypeUtil.objToLong(t.getId()));
- if (!result.getGitlabUserName().equals(t.getUsername())) {
- result.setGitlabUserName(t.getUsername());
- userAttrMapper.updateByPrimaryKey(result);
- }
} catch (Exception ex) {
// 补偿机制
// 根据邮箱查询到devops_user 但是对应的iam_user_id 不存在
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/host/SyncOperatingCommandStatusHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/host/SyncOperatingCommandStatusHandler.java
index 27c3970777..513844084e 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/host/SyncOperatingCommandStatusHandler.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/host/SyncOperatingCommandStatusHandler.java
@@ -53,10 +53,10 @@ public void handler(String hostId, Long commandId, String payload) {
devopsCdPipelineService.hostDeployStatusUpdate(devopsHostCommandDTO.getCdJobRecordId(), false, "timeout");
}
});
- // 2. 同步devops丢失的命令
- List unSyncCommands = commandResultVOS.stream().filter(v -> Boolean.FALSE.equals(v.getNotExist())).collect(Collectors.toList());
- unSyncCommands.forEach(unSyncCommand -> commandResultHandler.handler(hostId, unSyncCommand.getCommandId(), unSyncCommand));
}
+ // 2. 同步devops丢失的命令
+ List unSyncCommands = commandResultVOS.stream().filter(v -> Boolean.FALSE.equals(v.getNotExist())).collect(Collectors.toList());
+ unSyncCommands.forEach(unSyncCommand -> commandResultHandler.handler(hostId, unSyncCommand.getCommandId(), unSyncCommand));
}
@Override
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/GitlabGroupPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/GitlabGroupPayload.java
index 14dc2947cc..9cbafebd94 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/GitlabGroupPayload.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/GitlabGroupPayload.java
@@ -2,6 +2,8 @@
import java.util.Set;
+import io.swagger.annotations.ApiModelProperty;
+
/**
* GitLab group create event
*/
@@ -9,6 +11,8 @@ public class GitlabGroupPayload {
private Long projectId;
private String projectCode;
+ @ApiModelProperty("devops组件编码")
+ private String devopsComponentCode;
private String projectName;
private String organizationCode;
private String organizationName;
@@ -28,6 +32,14 @@ public GitlabGroupPayload(String projectCode, String projectName, String organiz
this.userId = userId;
}
+ public String getDevopsComponentCode() {
+ return devopsComponentCode;
+ }
+
+ public void setDevopsComponentCode(String devopsComponentCode) {
+ this.devopsComponentCode = devopsComponentCode;
+ }
+
public Long getProjectId() {
return projectId;
}
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java
index ebd036aa38..fb10e2a379 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java
@@ -1,6 +1,6 @@
package io.choerodon.devops.app.eventhandler.payload;
-import io.kubernetes.client.models.V1beta1Ingress;
+import io.kubernetes.client.openapi.models.V1Ingress;
import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO;
import io.choerodon.devops.infra.dto.DevopsIngressDTO;
@@ -15,7 +15,7 @@ public class IngressSagaPayload {
private Boolean created;
private DevopsEnvironmentDTO devopsEnvironmentDTO;
private DevopsIngressDTO devopsIngressDTO;
- private V1beta1Ingress v1beta1Ingress;
+ private V1Ingress v1beta1Ingress;
public IngressSagaPayload() {
@@ -59,11 +59,11 @@ public void setDevopsIngressDTO(DevopsIngressDTO devopsIngressDTO) {
this.devopsIngressDTO = devopsIngressDTO;
}
- public V1beta1Ingress getV1beta1Ingress() {
+ public V1Ingress getV1Ingress() {
return v1beta1Ingress;
}
- public void setV1beta1Ingress(V1beta1Ingress v1beta1Ingress) {
+ public void setV1Ingress(V1Ingress v1beta1Ingress) {
this.v1beta1Ingress = v1beta1Ingress;
}
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumeClaimPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumeClaimPayload.java
index fa59784fd8..4092e8c508 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumeClaimPayload.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumeClaimPayload.java
@@ -2,7 +2,7 @@
import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO;
import io.choerodon.devops.infra.dto.DevopsPvcDTO;
-import io.kubernetes.client.models.V1PersistentVolumeClaim;
+import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim;
public class PersistentVolumeClaimPayload {
private Long projectId;
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumePayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumePayload.java
index 47b906a97b..b433efe868 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumePayload.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumePayload.java
@@ -1,8 +1,9 @@
package io.choerodon.devops.app.eventhandler.payload;
+import io.kubernetes.client.openapi.models.V1PersistentVolume;
+
import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO;
import io.choerodon.devops.infra.dto.DevopsPvDTO;
-import io.kubernetes.client.models.V1PersistentVolume;
public class PersistentVolumePayload {
private Long projectId;
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/ProjectPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/ProjectPayload.java
index 194651d4e4..4a1e3c3093 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/ProjectPayload.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/ProjectPayload.java
@@ -3,6 +3,8 @@
import java.util.List;
import java.util.Set;
+import io.swagger.annotations.ApiModelProperty;
+
import io.choerodon.devops.api.vo.ProjectCategoryVO;
/**
@@ -16,6 +18,8 @@ public class ProjectPayload {
private String projectName;
private String organizationCode;
private String organizationName;
+ @ApiModelProperty("devops组件编码")
+ private String devopsComponentCode;
private String userName;
private Long userId;
private String imageUrl;
@@ -29,6 +33,14 @@ public class ProjectPayload {
private List projectCategoryVOS;
+ public String getDevopsComponentCode() {
+ return devopsComponentCode;
+ }
+
+ public void setDevopsComponentCode(String devopsComponentCode) {
+ this.devopsComponentCode = devopsComponentCode;
+ }
+
public Long getProjectId() {
return projectId;
}
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/ServiceSagaPayLoad.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/ServiceSagaPayLoad.java
index 13244c4980..d2d3f3d3a8 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/ServiceSagaPayLoad.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/ServiceSagaPayLoad.java
@@ -3,8 +3,8 @@
import io.choerodon.devops.api.vo.DevopsIngressVO;
import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO;
import io.choerodon.devops.infra.dto.DevopsServiceDTO;
-import io.kubernetes.client.models.V1Endpoints;
-import io.kubernetes.client.models.V1Service;
+import io.kubernetes.client.openapi.models.V1Endpoints;
+import io.kubernetes.client.openapi.models.V1Service;
import io.swagger.annotations.ApiModelProperty;
/**
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiImageBuildStepHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiImageBuildStepHandler.java
index fd3d306691..262d804a85 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiImageBuildStepHandler.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiImageBuildStepHandler.java
@@ -54,8 +54,6 @@ public void fillStepConfigInfo(DevopsCiStepVO devopsCiStepVO) {
@Override
public List buildGitlabCiScript(DevopsCiStepDTO devopsCiStepDTO) {
- // 不填skipDockerTlsVerify参数或者填TRUE都是跳过证书校验
- // TODO 修复 目前后端这个参数的含义是是否跳过证书校验, 前端的含义是是否进行证书校验
DevopsCiDockerBuildConfigDTO devopsCiDockerBuildConfigDTO = devopsCiDockerBuildConfigService.queryByStepId(devopsCiStepDTO.getId());
Boolean doTlsVerify = devopsCiDockerBuildConfigDTO.getEnableDockerTlsVerify();
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiMavenBuildStepHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiMavenBuildStepHandler.java
index 0c47e4200f..89580066d2 100644
--- a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiMavenBuildStepHandler.java
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiMavenBuildStepHandler.java
@@ -142,7 +142,7 @@ private boolean buildAndSaveMavenSettings(Long projectId, Long jobId, Long seque
if (!StringUtils.isEmpty(devopsCiMavenBuildConfigVO.getMavenSettings())) {
// 使用用户提供的xml内容,不进行内容的校验
- settings = Base64Util.getBase64DecodedString(devopsCiMavenBuildConfigVO.getMavenSettings());
+ settings = devopsCiMavenBuildConfigVO.getMavenSettings();
} else if (hasManualRepos || hasNexusRepos) {
if (hasNexusRepos) {
// 用户选择的已有的maven仓库
diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiPublishAppVersionStepHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiPublishAppVersionStepHandler.java
new file mode 100644
index 0000000000..bbd28a5e88
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiPublishAppVersionStepHandler.java
@@ -0,0 +1,20 @@
+package io.choerodon.devops.app.eventhandler.pipeline.step;
+
+import org.springframework.stereotype.Component;
+
+import io.choerodon.devops.infra.enums.DevopsCiStepTypeEnum;
+
+/**
+ * 〈功能简述〉
+ * 〈〉
+ *
+ * @author wanghao
+ * @since 2022/7/13 17:21
+ */
+@Component
+public class DevopsCiPublishAppVersionStepHandler extends AbstractDevopsCiStepHandler {
+ @Override
+ public DevopsCiStepTypeEnum getType() {
+ return DevopsCiStepTypeEnum.PUBLISH_APP_VERSION;
+ }
+}
diff --git a/src/main/java/io/choerodon/devops/app/service/AppExternalConfigService.java b/src/main/java/io/choerodon/devops/app/service/AppExternalConfigService.java
index 6e59e2351f..e071644348 100644
--- a/src/main/java/io/choerodon/devops/app/service/AppExternalConfigService.java
+++ b/src/main/java/io/choerodon/devops/app/service/AppExternalConfigService.java
@@ -1,7 +1,5 @@
package io.choerodon.devops.app.service;
-import java.util.List;
-
import io.choerodon.devops.infra.dto.AppExternalConfigDTO;
/**
diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmRelService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmRelService.java
new file mode 100644
index 0000000000..190cbbfec5
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmRelService.java
@@ -0,0 +1,23 @@
+package io.choerodon.devops.app.service;
+
+import java.util.List;
+
+import io.choerodon.devops.infra.dto.AppServiceHelmRelDTO;
+
+/**
+ * 应用服务和helm配置的关联关系表(AppServiceHelmRel)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-15 10:55:52
+ */
+public interface AppServiceHelmRelService {
+
+ AppServiceHelmRelDTO queryByAppServiceId(Long appServiceId);
+
+ /**
+ * 批量插入
+ * @param appServiceHelmRelDTOToInsert
+ */
+ void batchInsertInNewTrans(List appServiceHelmRelDTOToInsert);
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java
new file mode 100644
index 0000000000..8793dce454
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java
@@ -0,0 +1,27 @@
+package io.choerodon.devops.app.service;
+
+import java.util.List;
+import java.util.Set;
+
+import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO;
+import io.choerodon.devops.infra.dto.AppServiceHelmVersionDTO;
+
+/**
+ * 应用版本表(AppServiceHelmVersion)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-13 16:47:41
+ */
+public interface AppServiceHelmVersionService {
+
+ List listByAppVersionIds(Set versionIds);
+
+ AppServiceHelmVersionDTO queryByAppServiceVersionId(Long appServiceVersionId);
+
+ void create(AppServiceHelmVersionDTO appServiceHelmVersionDTO);
+
+ void deleteByAppServiceVersionId(Long appServiceVersionId);
+
+ void batchInsertInNewTrans(List appServiceHelmVersionDTOToInsert);
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java
new file mode 100644
index 0000000000..e16d3d24aa
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java
@@ -0,0 +1,34 @@
+package io.choerodon.devops.app.service;
+
+import java.util.List;
+import java.util.Set;
+
+import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO;
+import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO;
+
+/**
+ * 应用版本表(AppServiceImageVersion)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-13 16:47:42
+ */
+public interface AppServiceImageVersionService {
+
+ void create(AppServiceImageVersionDTO appServiceImageVersionDTO);
+
+ AppServiceImageVersionDTO queryByAppServiceVersionId(Long appServiceVersionId);
+
+ List listByAppVersionIds(Set versionIds);
+
+ void baseUpdate(AppServiceImageVersionDTO appServiceImageVersionDTO);
+
+ void deleteByAppServiceVersionId(Long appServiceVersionId);
+
+ /**
+ * 2.2版本迁移原应服务版本数据使用,后续可删除
+ *
+ * @param appServiceImageVersionDTOS
+ */
+ void batchInsertInNewTrans(List appServiceImageVersionDTOS);
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceInstanceService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceInstanceService.java
index 4add6ca526..819b8b446b 100644
--- a/src/main/java/io/choerodon/devops/app/service/AppServiceInstanceService.java
+++ b/src/main/java/io/choerodon/devops/app/service/AppServiceInstanceService.java
@@ -285,13 +285,13 @@ Page pageByOptions(Long projectId, PageRequest pagea
*/
Page pageDeployTimeTable(Long projectId, PageRequest pageable, Long[] appServiceIds, Long envId, Date startTime, Date endTime);
- /**
- * 部署自动化测试应用
- *
- * @param projectId 项目id
- * @param appServiceDeployVO 部署信息
- */
- void deployTestApp(Long projectId, AppServiceDeployVO appServiceDeployVO);
+// /**
+// * 部署自动化测试应用
+// *
+// * @param projectId 项目id
+// * @param appServiceDeployVO 部署信息
+// */
+// void deployTestApp(Long projectId, AppServiceDeployVO appServiceDeployVO);
/**
* 根据实例id获取更多资源详情(json格式)
@@ -313,12 +313,12 @@ Page pageByOptions(Long projectId, PageRequest pagea
*/
InstanceControllerDetailVO getInstanceResourceDetailYaml(Long instanceId, String resourceName, ResourceType resourceType);
- /**
- * 查询自动化测试应用实例状态
- *
- * @param testReleases
- */
- void getTestAppStatus(Map> testReleases);
+// /**
+// * 查询自动化测试应用实例状态
+// *
+// * @param testReleases
+// */
+// void getTestAppStatus(Map> testReleases);
/**
diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java
new file mode 100644
index 0000000000..0e51c7e16f
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java
@@ -0,0 +1,27 @@
+package io.choerodon.devops.app.service;
+
+import java.util.List;
+import java.util.Set;
+
+import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO;
+import io.choerodon.devops.infra.dto.AppServiceMavenVersionDTO;
+
+/**
+ * 应用版本表(AppServiceMavenVersion)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-13 16:47:43
+ */
+public interface AppServiceMavenVersionService {
+
+ AppServiceMavenVersionDTO queryByAppServiceVersionId(Long appServiceVersionId);
+
+ void create(AppServiceMavenVersionDTO appServiceMavenVersionDTO);
+
+ List listByAppVersionIds(Set versionIds);
+
+ void baseUpdate(AppServiceMavenVersionDTO appServiceMavenVersionDTO);
+
+ void deleteByAppServiceVersionId(Long appServiceVersionId);
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceService.java
index 5c117d1812..ed967bf6d4 100644
--- a/src/main/java/io/choerodon/devops/app/service/AppServiceService.java
+++ b/src/main/java/io/choerodon/devops/app/service/AppServiceService.java
@@ -94,15 +94,15 @@ public interface AppServiceService {
* @return Page
*/
Page pageByOptions(Long projectId,
- Boolean isActive,
- Boolean hasVersion,
- String type,
- Boolean doPage,
- PageRequest pageable,
- String params,
- Boolean checkMember,
- Boolean includeExternal,
- Boolean excludeFailed);
+ Boolean isActive,
+ Boolean hasVersion,
+ String type,
+ Boolean doPage,
+ PageRequest pageable,
+ String params,
+ Boolean checkMember,
+ Boolean includeExternal,
+ Boolean excludeFailed);
/**
* 处理服务创建逻辑
@@ -275,7 +275,18 @@ Page pageInternalByOptionsWithAccessLevel(Long projectId,
* @param password 密码
* @return true如果通过 (未通过则抛出错误信息)
*/
- Boolean checkChart(String url, @Nullable String username, @Nullable String password);
+ Boolean checkChartOnOrganization(String url, @Nullable String username, @Nullable String password);
+
+ /**
+ * 项目层或应用层校验chart配置信息是否正确
+ *
+ * @param projectId
+ * @param url ChartMuseum地址
+ * @param username 用户名
+ * @param password 密码
+ * @return CheckInfoVO
+ */
+ CheckInfoVO checkChart(Long projectId, String url, @Nullable String username, @Nullable String password);
/**
* 查看sonarqube相关信息
@@ -581,16 +592,6 @@ void replaceParams(String newServiceCode,
Boolean checkDeleteEnvApp(Long appServiceId, Long envId);
- /**
- * 根据坐标查询出项目下的应用列表
- *
- * @param projectId
- * @param groupId
- * @param artifactId
- * @return
- */
- List listByProjectIdAndGAV(Long projectId, String groupId, String artifactId);
-
Set getMemberAppServiceIdsByAccessLevel(Long organizationId, Long projectId, Long userId, Integer value, Long appId);
void batchTransfer(Long projectId, List appServiceTransferVOList);
@@ -620,4 +621,12 @@ void replaceParams(String newServiceCode,
Set listAllIdsByProjectId(Long projectId);
HarborRepoConfigDTO queryRepoConfigById(Long projectId, Long appServiceId);
+
+ /**
+ * 根据应用id列出所有应用所在的项目id
+ *
+ * @param appIds
+ * @return
+ */
+ List listProjectIdsByAppIds(List appIds);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceShareResourceService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceShareResourceService.java
index 1a96c596f8..682295229a 100644
--- a/src/main/java/io/choerodon/devops/app/service/AppServiceShareResourceService.java
+++ b/src/main/java/io/choerodon/devops/app/service/AppServiceShareResourceService.java
@@ -1,7 +1,5 @@
package io.choerodon.devops.app.service;
-import java.util.List;
-
import io.choerodon.devops.infra.dto.AppServiceShareResourceDTO;
/**
@@ -11,6 +9,4 @@ public interface AppServiceShareResourceService {
void baseCreate(AppServiceShareResourceDTO appServiceShareResourceDTO);
- List baseListByShareId(Long shareId);
-
}
diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java
index d04c4ddc2c..3701e3e9ec 100644
--- a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java
+++ b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java
@@ -6,8 +6,10 @@
import org.springframework.web.multipart.MultipartFile;
import io.choerodon.core.domain.Page;
-import io.choerodon.devops.api.vo.*;
-import io.choerodon.devops.infra.dto.AppServiceLatestVersionDTO;
+import io.choerodon.devops.api.vo.AppServiceVersionAndCommitVO;
+import io.choerodon.devops.api.vo.AppServiceVersionRespVO;
+import io.choerodon.devops.api.vo.AppServiceVersionVO;
+import io.choerodon.devops.api.vo.AppServiceVersionWithHelmConfigVO;
import io.choerodon.devops.infra.dto.AppServiceVersionDTO;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
@@ -76,15 +78,6 @@ void create(String image,
*/
List listUpgradeableAppVersion(Long projectId, Long appServiceServiceId);
- /**
- * 项目下查询应用最新的版本和各环境下部署的版本
- *
- * @param appServiceId 应用ID
- * @return DeployVersionVO
- */
- DeployVersionVO queryDeployedVersions(Long appServiceId);
-
-
String queryVersionValue(Long appServiceServiceId);
AppServiceVersionRespVO queryById(Long appServiceServiceId);
@@ -141,8 +134,6 @@ void create(String image,
*/
Page pageShareVersionByAppServiceIdAndVersion(Long appServiceId, PageRequest pageable, String version);
- List baseListAppNewestVersion(Long projectId);
-
List baseListByAppServiceId(Long appServiceId);
@@ -164,8 +155,6 @@ void create(String image,
List baseQueryByCommitSha(Long appServiceId, String ref, String sha);
- AppServiceVersionDTO baseQueryNewestVersion(Long appServiceId);
-
List baseListByAppServiceVersionIds(List appServiceServiceIds);
List baseListByAppServiceIdAndBranch(Long appServiceId, String branch);
@@ -212,8 +201,6 @@ void create(String image,
void deleteByAppServiceId(Long appServiceId);
- void fixHarbor();
-
/**
* 批量删除应用服务版本
*
@@ -226,4 +213,35 @@ void create(String image,
AppServiceVersionDTO queryByCommitShaAndRef(Long appServiceId, String commitSha, String ref);
AppServiceVersionWithHelmConfigVO queryVersionWithHelmConfig(Long projectId, Long appServiceVersionId);
+
+ /**
+ * 发布应用服务版本
+ * @param token
+ * @param version
+ * @param commit
+ * @param ref
+ * @param gitlabPipelineId
+ * @param jobName
+ */
+ AppServiceVersionDTO publishAppVersion(String token, String version, String commit, String ref, Long gitlabPipelineId, String jobName);
+
+ AppServiceVersionDTO saveAppVersion(String version, String commit, String ref, Long gitlabPipelineId, Long appServiceId);
+
+ /**
+ * 保存应用服务版本
+ * @param appServiceId 应用服务id
+ * @param version 版本名
+ * @param commit commit sha
+ * @param ref 分支
+ * @return
+ */
+ AppServiceVersionDTO create(Long appServiceId, String version, String commit, String ref);
+
+ List listAllVersionsWithHelmConfig();
+
+ List listAllVersionsWithHarborConfig();
+
+ Integer queryCountVersionsWithHelmConfig();
+
+ Integer queryCountVersionsWithHarborConfig();
}
diff --git a/src/main/java/io/choerodon/devops/app/service/CiCdStageService.java b/src/main/java/io/choerodon/devops/app/service/CiCdStageService.java
deleted file mode 100644
index 670d9aa392..0000000000
--- a/src/main/java/io/choerodon/devops/app/service/CiCdStageService.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package io.choerodon.devops.app.service;
-
-import java.util.List;
-
-import io.choerodon.devops.api.vo.DevopsCdStageVO;
-import io.choerodon.devops.infra.dto.DevopsCdStageDTO;
-
-public interface CiCdStageService {
- /**
- * 创建流水线stage
- * @param devopsCdStageDTO
- * @return
- */
- DevopsCdStageDTO create(DevopsCdStageDTO devopsCdStageDTO);
-
- List listByPipelineId(Long ciCdPipelineId);
-
- void deleteById(Long stageId);
-
- void update(DevopsCdStageVO devopsCdStageVO);
-
- void deleteByPipelineId(Long ciCdPipelineId);
-}
diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java
new file mode 100644
index 0000000000..5f1dd53ede
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java
@@ -0,0 +1,21 @@
+package io.choerodon.devops.app.service;
+
+import io.choerodon.devops.infra.dto.CiPipelineAppVersionDTO;
+
+/**
+ * 发布应用服务版本步骤生成的流水线记录信息(CiPipelineAppVersion)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-14 16:01:30
+ */
+public interface CiPipelineAppVersionService {
+
+ CiPipelineAppVersionDTO queryByPipelineIdAndJobName(Long appServiceId,
+ Long gitlabPipelineId,
+ String jobName);
+
+ void baseCreate(CiPipelineAppVersionDTO ciPipelineAppVersionDTO);
+
+ void deleteByAppServiceId(Long appServiceId);
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java
index dd86ff4073..e1a60b8d24 100644
--- a/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java
+++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java
@@ -18,4 +18,8 @@ public interface CiPipelineImageService {
ImageRepoInfoVO queryRewriteRepoInfoScript(Long projectId, String token, String repoType, Long repoId);
ImageRepoInfoVO queryImageRepoInfo(String token, Long gitlabPipelineId);
+
+ CiPipelineImageDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId);
+
+ void deleteByAppServiceId(Long appServiceId);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java
index 5b53000540..999b3706b5 100644
--- a/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java
+++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java
@@ -14,8 +14,7 @@ public interface CiPipelineMavenService {
/**
* 存储jar包元数据
- *
- * @param nexusRepoId 制品库id
+ * @param nexusRepoId 制品库id
* @param jobId ci job 的id
* @param sequence job的顺序
* @param gitlabPipelineId gitlab流水线id
@@ -25,6 +24,7 @@ public interface CiPipelineMavenService {
* @param mavenRepoUrl
* @param username
* @param password
+ * @param version
*/
void createOrUpdate(Long nexusRepoId,
Long jobId,
@@ -35,7 +35,12 @@ void createOrUpdate(Long nexusRepoId,
MultipartFile file,
String mavenRepoUrl,
String username,
- String password);
+ String password,
+ String version);
CiPipelineMavenDTO queryByGitlabPipelineId(Long appServiceId, Long gitlabPipelineId, String jobName);
+
+ CiPipelineMavenDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId);
+
+ void deleteByAppServiceId(Long appServiceId);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/CiTemplateNodeJsBuildService.java b/src/main/java/io/choerodon/devops/app/service/CiTemplateNodeJsBuildService.java
deleted file mode 100644
index 32959454aa..0000000000
--- a/src/main/java/io/choerodon/devops/app/service/CiTemplateNodeJsBuildService.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package io.choerodon.devops.app.service;
-
-/**
- * Created by wangxiang on 2021/12/20
- */
-public interface CiTemplateNodeJsBuildService {
- void queryByStepId(Long id);
-}
diff --git a/src/main/java/io/choerodon/devops/app/service/DeployDetailService.java b/src/main/java/io/choerodon/devops/app/service/DeployDetailService.java
deleted file mode 100644
index ed783d2055..0000000000
--- a/src/main/java/io/choerodon/devops/app/service/DeployDetailService.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package io.choerodon.devops.app.service;
-
-import java.util.List;
-
-import io.choerodon.devops.api.vo.DevopsEnvPodVO;
-
-/**
- * Creator: Runge
- * Date: 2018/4/17
- * Time: 14:40
- * Description:
- */
-public interface DeployDetailService {
- List baseQueryPods(Long instanceId);
-}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsAppServiceHelmRelService.java b/src/main/java/io/choerodon/devops/app/service/DevopsAppServiceHelmRelService.java
new file mode 100644
index 0000000000..8758f0406e
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsAppServiceHelmRelService.java
@@ -0,0 +1,29 @@
+package io.choerodon.devops.app.service;
+
+import io.choerodon.devops.infra.dto.DevopsAppServiceHelmRelDTO;
+import org.apache.ibatis.annotations.Param;
+
+public interface DevopsAppServiceHelmRelService {
+
+ /**
+ * 处理应用服务和helm仓库的关联关系
+ */
+ void handleRel(Long appServiceId, Long helmConfigId);
+
+ /**
+ * 删除应用服务和helm仓库的关联关系
+ *
+ * @param appServiceId
+ */
+ void deleteRelationByServiceId(Long appServiceId);
+
+ /**
+ * 创建应用符合和helm仓库的关联关系
+ *
+ * @param appServiceId
+ * @param helmConfigId
+ */
+ void createRel(Long appServiceId, Long helmConfigId);
+
+ DevopsAppServiceHelmRelDTO queryByAppServiceId(Long appServiceId);
+}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsBranchService.java b/src/main/java/io/choerodon/devops/app/service/DevopsBranchService.java
index 4ef1a822f2..399288fa10 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsBranchService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsBranchService.java
@@ -41,4 +41,21 @@ public interface DevopsBranchService {
List listDeletedBranchIds(Set collect);
List listByIds(List branchIds);
+
+ /**
+ * 查询工作项是否与分支有关联关系
+ *
+ * @param projectId
+ * @param issueId
+ * @return
+ */
+ Boolean checkIssueBranchRelExist(Long projectId, Long issueId);
+
+ /**
+ * 复制工作项与分支关联关系
+ * @param projectId
+ * @param oldIssueId
+ * @param newIssueId
+ */
+ void copyIssueBranchRel(Long projectId, Long oldIssueId, Long newIssueId);
}
\ No newline at end of file
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCdApiTestInfoService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCdApiTestInfoService.java
index b954f29d01..56d45c36d2 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsCdApiTestInfoService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsCdApiTestInfoService.java
@@ -14,5 +14,6 @@ public interface DevopsCdApiTestInfoService {
DevopsCdApiTestInfoDTO queryById(Long deployInfoId);
+ Boolean doesApiTestSuiteRelatedWithPipeline(Long suiteId);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCdAuditRecordService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCdAuditRecordService.java
index 495ac3e21b..eb5bccd23c 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsCdAuditRecordService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsCdAuditRecordService.java
@@ -21,6 +21,4 @@ public interface DevopsCdAuditRecordService {
void save(DevopsCdAuditRecordDTO devopsCdAuditRecordDTO);
DevopsCdAuditRecordDTO queryByJobRecordIdAndUserId(Long jobRecordId, Long userId);
-
- void fixProjectId();
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCdAuditService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCdAuditService.java
index 58c23e670e..3932ed920c 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsCdAuditService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsCdAuditService.java
@@ -9,6 +9,4 @@ public interface DevopsCdAuditService {
void baseCreate(DevopsCdAuditDTO devopsCdAuditDTO);
List baseListByOptions(Long pipelineId, Long stageId, Long jobId);
-
- void fixProjectId();
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCdJobService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCdJobService.java
index 82a17abac0..9982d71a08 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsCdJobService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsCdJobService.java
@@ -45,10 +45,4 @@ public interface DevopsCdJobService {
* @return
*/
List listCdApiTestConfig();
-
- /**
- * 修复数据saga
- * @param payload
- */
- void taskRepairCdJobRecordData(String payload);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCdPipelineRecordService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCdPipelineRecordService.java
index 01891fcba4..783a67a123 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsCdPipelineRecordService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsCdPipelineRecordService.java
@@ -1,11 +1,9 @@
package io.choerodon.devops.app.service;
-import io.choerodon.core.domain.Page;
import io.choerodon.devops.api.vo.DevopsCdPipelineRecordVO;
import io.choerodon.devops.api.vo.HostConnectionVO;
import io.choerodon.devops.infra.dto.DevopsCdPipelineRecordDTO;
import io.choerodon.devops.infra.dto.workflow.DevopsPipelineDTO;
-import io.choerodon.mybatis.pagehelper.domain.PageRequest;
/**
* 〈功能简述〉
@@ -44,9 +42,6 @@ public interface DevopsCdPipelineRecordService {
DevopsCdPipelineRecordDTO queryById(Long id);
- Page pagingCdPipelineRecord(Long projectId, Long ciPipelineId, PageRequest pageable);
-
-
void updatePipelineStatusFailed(Long pipelineRecordId);
DevopsCdPipelineRecordVO queryPipelineRecordDetails(Long projectId, Long cdPipelineId);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCdValuesService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCdValuesService.java
deleted file mode 100644
index e340666235..0000000000
--- a/src/main/java/io/choerodon/devops/app/service/DevopsCdValuesService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package io.choerodon.devops.app.service;
-
-public interface DevopsCdValuesService {
-}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineChartService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineChartService.java
index eaa46c62eb..b6db3d83ee 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineChartService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineChartService.java
@@ -14,5 +14,6 @@ public interface DevopsCiPipelineChartService {
void baseCreate(DevopsCiPipelineChartDTO devopsCiPipelineChartDTO);
+ void deleteByAppServiceId(Long appServiceId);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineRecordService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineRecordService.java
index 1574cd2529..d0c53a7b72 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineRecordService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineRecordService.java
@@ -2,13 +2,10 @@
import java.util.List;
-import io.choerodon.core.domain.Page;
import io.choerodon.devops.api.vo.DevopsCiPipelineRecordVO;
import io.choerodon.devops.api.vo.PipelineWebHookVO;
-import io.choerodon.devops.infra.dto.AppServiceDTO;
import io.choerodon.devops.infra.dto.DevopsCiPipelineRecordDTO;
import io.choerodon.devops.infra.dto.gitlab.ci.Pipeline;
-import io.choerodon.mybatis.pagehelper.domain.PageRequest;
/**
* 〈功能简述〉
@@ -22,11 +19,6 @@ public interface DevopsCiPipelineRecordService {
void handleCreate(PipelineWebHookVO pipelineWebHookVO);
- /**
- * 分页查询流水线记录
- */
- Page pagingPipelineRecord(Long projectId, Long ciPipelineId, PageRequest pageable);
-
/**
* 异步地拉取gitlab中流水线的状态到数据库进行更新
*
@@ -47,11 +39,6 @@ public interface DevopsCiPipelineRecordService {
*/
List queryByPipelineId(Long ciPipelineId);
- /**
- * @deprecated 根据gitlabProjectId删除pipeline record
- */
- void deleteByGitlabProjectId(Long gitlabProjectId);
-
DevopsCiPipelineRecordDTO create(Long ciPipelineId, Long gitlabProjectId, Pipeline pipeline);
/**
@@ -74,12 +61,4 @@ public interface DevopsCiPipelineRecordService {
List queryNotSynchronizedRecord(Long statusUpdatePeriodMilliSeconds);
DevopsCiPipelineRecordVO queryByCiPipelineRecordId(Long ciPipelineRecordId);
-
-
- /**
- * 查询任务记录所属的应用服务
- * @param pipelineRecordId
- * @return
- */
- AppServiceDTO queryAppServiceByPipelineRecordId(Long pipelineRecordId);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsConfigService.java
index 45adf7e696..11c3ec9228 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsConfigService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsConfigService.java
@@ -39,8 +39,6 @@ public interface DevopsConfigService {
DevopsConfigDTO queryRealConfig(Long resourceId, String resourceType, String configType,String operateType);
- DevopsConfigVO queryRealConfigVO(Long resourceId, String resourceType, String configType);
-
DevopsConfigDTO baseCreate(DevopsConfigDTO devopsConfigDTO);
DevopsConfigDTO baseUpdate(DevopsConfigDTO devopsConfigDTO);
@@ -51,8 +49,6 @@ public interface DevopsConfigService {
DevopsConfigDTO baseQueryByName(Long projectId, String name);
- DevopsConfigDTO baseCheckByName(String name);
-
Page basePageByOptions(Long projectId, PageRequest pageable, String params);
void baseDelete(Long id);
@@ -74,5 +70,7 @@ public interface DevopsConfigService {
void operateConfig(Long organizationId, String resourceType, DevopsConfigRepVO devopsConfigRepVO);
void deleteByConfigIds(Set configIds);
+
+ List listAllChart();
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsDeployRecordService.java b/src/main/java/io/choerodon/devops/app/service/DevopsDeployRecordService.java
index 27cd21bd3f..3a9686f5bb 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsDeployRecordService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsDeployRecordService.java
@@ -73,10 +73,6 @@ Long saveDeployRecord(Long projectId,
void baseCreate(DevopsDeployRecordDTO devopsDeployRecordDTO);
- void updateRecord(Long recordId, String status, String errorMsg);
-
- void updateRecord(DevopsDeployRecordDTO devopsDeployRecordDTO);
-
List baseList(DevopsDeployRecordDTO devopsDeployRecordDTO);
void baseDelete(DevopsDeployRecordDTO devopsDeployRecordDTO);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsDeployService.java b/src/main/java/io/choerodon/devops/app/service/DevopsDeployService.java
index 889404e807..de3fbc7b73 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsDeployService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsDeployService.java
@@ -1,6 +1,5 @@
package io.choerodon.devops.app.service;
-import io.choerodon.devops.api.vo.deploy.DeployConfigVO;
import io.choerodon.devops.api.vo.deploy.hzero.HzeroDeployVO;
/**
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsEnvFileService.java b/src/main/java/io/choerodon/devops/app/service/DevopsEnvFileService.java
index 370d95d144..cfaefd53ae 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsEnvFileService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsEnvFileService.java
@@ -44,8 +44,6 @@ public interface DevopsEnvFileService {
void baseDelete(DevopsEnvFileDTO devopsEnvFileDTO);
- List baseListByEnvIdAndPath(Long envId, String path);
-
/**
* 根据环境id删除相应的纪录
* 删除环境时使用
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsEnvGroupService.java b/src/main/java/io/choerodon/devops/app/service/DevopsEnvGroupService.java
index 636b5e4a6c..55d36a961f 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsEnvGroupService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsEnvGroupService.java
@@ -1,11 +1,11 @@
package io.choerodon.devops.app.service;
-import io.choerodon.devops.api.vo.DevopsEnvGroupVO;
-import io.choerodon.devops.infra.dto.DevopsEnvGroupDTO;
-
+import java.util.List;
import javax.annotation.Nullable;
import javax.validation.constraints.NotNull;
-import java.util.List;
+
+import io.choerodon.devops.api.vo.DevopsEnvGroupVO;
+import io.choerodon.devops.infra.dto.DevopsEnvGroupDTO;
public interface DevopsEnvGroupService {
/**
@@ -79,8 +79,6 @@ public interface DevopsEnvGroupService {
Boolean baseCheckUniqueInProject(Long id, String name, Long projectId);
- Boolean baseCheckUniqueInProject(String name, Long projectId);
-
void baseDelete(Long id);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsEnvPodService.java b/src/main/java/io/choerodon/devops/app/service/DevopsEnvPodService.java
index 4e79182ecb..abcb7949ff 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsEnvPodService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsEnvPodService.java
@@ -1,11 +1,9 @@
package io.choerodon.devops.app.service;
import java.util.List;
-
import javax.annotation.Nullable;
import io.choerodon.core.domain.Page;
-import io.choerodon.devops.api.vo.DevopsEnvPodInfoVO;
import io.choerodon.devops.api.vo.DevopsEnvPodVO;
import io.choerodon.devops.infra.dto.DevopsEnvPodDTO;
import io.choerodon.devops.infra.dto.PodResourceDetailsDTO;
@@ -33,8 +31,6 @@ public interface DevopsEnvPodService {
DevopsEnvPodDTO baseQueryByEnvIdAndName(Long envId, String name);
- DevopsEnvPodDTO baseQueryByPod(DevopsEnvPodDTO devopsEnvPodDTO);
-
void baseCreate(DevopsEnvPodDTO devopsEnvPodDTO);
List baseListByInstanceId(Long instanceId);
@@ -49,17 +45,6 @@ public interface DevopsEnvPodService {
void baseDeleteById(Long id);
- DevopsEnvPodDTO queryByNameAndEnvName(String name, String namespace);
-
- /**
- * 按资源用量列出环境下Pod信息
- *
- * @param envId 环境id
- * @param sort 排序条件
- * @return 环境下相关资源的数量
- */
- List queryEnvPodInfo(Long envId, String sort);
-
void deleteEnvPodById(Long projectId, Long envId, Long podId);
List queryResourceDetailsByInstanceId(Long instanceId);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsEnvResourceService.java b/src/main/java/io/choerodon/devops/app/service/DevopsEnvResourceService.java
index 78ec0a2888..b278cfe394 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsEnvResourceService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsEnvResourceService.java
@@ -5,7 +5,6 @@
import io.choerodon.devops.api.vo.DevopsEnvPodVO;
import io.choerodon.devops.api.vo.DevopsEnvResourceVO;
import io.choerodon.devops.api.vo.InstanceEventVO;
-import io.choerodon.devops.api.vo.PodEventVO;
import io.choerodon.devops.infra.dto.DevopsEnvResourceDTO;
import io.choerodon.devops.infra.enums.ResourceType;
@@ -75,18 +74,6 @@ public interface DevopsEnvResourceService {
*/
String getResourceDetailByNameAndTypeAndInstanceId(Long instanceId, String name, ResourceType resourceType);
- /**
- * 批量查询DevopsEnvResourceDTO 根据names
- *
- * @param envId
- * @param type
- * @param names
- * @return
- */
- List listEnvResourceByOptions(Long envId, String type, List names);
-
- List listPodEventBycommandId(Long commandId);
-
String getResourceDetailByEnvIdAndKindAndName(Long envId, String name, ResourceType resourceType);
Object queryDetailsByKindAndName(Long envId, String kind, String name);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsEnvUserPermissionService.java b/src/main/java/io/choerodon/devops/app/service/DevopsEnvUserPermissionService.java
index f732ab4e17..fece0f0a90 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsEnvUserPermissionService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsEnvUserPermissionService.java
@@ -37,8 +37,6 @@ public interface DevopsEnvUserPermissionService {
List baseListByEnvId(Long envId);
- List baseListAll(Long envId);
-
void baseUpdate(Long envId, List addUsersList, List deleteUsersList);
void baseDelete(Long envId, Long userId);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsEnvironmentService.java b/src/main/java/io/choerodon/devops/app/service/DevopsEnvironmentService.java
index 52888d54c8..27a5dd3f2b 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsEnvironmentService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsEnvironmentService.java
@@ -26,15 +26,6 @@ public interface DevopsEnvironmentService {
*/
void create(Long projectId, DevopsEnvironmentReqVO devopsEnvironmentReqVO);
- /**
- * 项目下环境流水线查询环境
- *
- * @param projectId 项目id
- * @param active 是否可用
- * @return List
- */
- List listDevopsEnvGroupEnvs(Long projectId, Boolean active);
-
/**
* 项目下根据分组查看环境详情
*
@@ -153,6 +144,8 @@ public interface DevopsEnvironmentService {
*/
void handleCreateEnvSaga(EnvGitlabProjectPayload gitlabProjectPayload);
+ void initUserPermissionWhenCreatingEnv(EnvGitlabProjectPayload gitlabProjectPayload, Long envId, Long projectId);
+
EnvSyncStatusVO queryEnvSyncStatus(Long projectId, Long envId);
/**
@@ -346,14 +339,6 @@ Page pageUserPermissionByEnvId(Long projectId, PageReque
DevopsEnvironmentDTO queryByTokenWithClusterCode(@Param("token") String token);
- /**
- * 查询项目下的环境
- *
- * @param projectId
- * @param envName 环境名
- * @return
- */
- List listByProjectIdAndName(Long projectId, String envName);
/**
* 更新符合project_id和devops_env_group_id的环境的devops_env_group_id为null
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java
index bfa9a6981a..7fb71735d0 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java
@@ -5,7 +5,6 @@
import io.choerodon.core.domain.Page;
import io.choerodon.devops.api.vo.*;
import io.choerodon.devops.app.eventhandler.payload.BranchSagaPayLoad;
-import io.choerodon.devops.infra.dto.gitlab.BranchDTO;
import io.choerodon.devops.infra.dto.gitlab.GitlabProjectDTO;
import io.choerodon.devops.infra.dto.gitlab.GroupDTO;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
@@ -110,15 +109,6 @@ public interface DevopsGitService {
*/
void deleteBranch(Long projectId, Long appServiceId, String branchName);
- /**
- * 校验分支名唯一性
- *
- * @param projectId 项目id
- * @param applicationId 应用id
- * @param branchName 分支名
- */
- void checkBranchName(Long projectId, Long applicationId, String branchName);
-
/**
* 判断分支名唯一性
*
@@ -194,8 +184,6 @@ public interface DevopsGitService {
*/
void createBranchBySaga(BranchSagaPayLoad branchSagaDTO);
- BranchDTO baseQueryBranch(Integer gitLabProjectId, String branchName);
-
/**
* 查询
*
@@ -235,4 +223,6 @@ public interface DevopsGitService {
Page listOwnedProjectByGroupId(Long projectId, Integer gitlabGroupId, String search, PageRequest pageRequest);
Page pageBranchBasicInfoByOptions(Long projectId, PageRequest pageable, Long appServiceId, String params);
+
+ Integer syncBranch(Long projectId, Long appServiceId, Boolean sync);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsGitlabPipelineService.java b/src/main/java/io/choerodon/devops/app/service/DevopsGitlabPipelineService.java
index bddd68624c..a5dc2c57c8 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsGitlabPipelineService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsGitlabPipelineService.java
@@ -34,7 +34,5 @@ public interface DevopsGitlabPipelineService {
Page basePageByApplicationId(Long appServiceId, PageRequest pageable, Date startTime, Date endTime);
- void baseDeleteWithoutCommit();
-
List baseListByAppIdAndBranch(Long appServiceId, String branch);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java
new file mode 100644
index 0000000000..4250983939
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java
@@ -0,0 +1,140 @@
+package io.choerodon.devops.app.service;
+
+import java.util.List;
+
+import org.springframework.transaction.annotation.Transactional;
+
+import io.choerodon.devops.api.vo.DevopsHelmConfigVO;
+import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO;
+
+public interface DevopsHelmConfigService {
+ /**
+ * 查询helm仓库列表
+ *
+ * @param projectId
+ * @return
+ */
+ List listHelmConfig(Long projectId);
+
+ /**
+ * 创建helm仓库
+ *
+ * @param projectId
+ * @param devopsHelmConfigVO
+ * @return
+ */
+ DevopsHelmConfigVO createDevopsHelmConfigOnProjectLevel(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO);
+
+ /**
+ * 更新helm仓库
+ *
+ * @param projectId
+ * @param devopsHelmConfigVO
+ * @return
+ */
+ DevopsHelmConfigVO updateDevopsHelmConfigOnProjectLevel(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO);
+
+ /**
+ * 删除helm仓库
+ *
+ * @param projectId
+ * @param helmConfigId
+ */
+ void deleteDevopsHelmConfig(Long projectId, Long helmConfigId);
+
+ /**
+ * 查询helm仓库信息
+ *
+ * @param projectId
+ * @param helmConfigId
+ * @return
+ */
+ DevopsHelmConfigVO queryDevopsHelmConfig(Long projectId, Long helmConfigId);
+
+ /**
+ * 查询helm仓库信息
+ *
+ * @param id
+ * @return
+ */
+ DevopsHelmConfigDTO queryById(Long id);
+
+ /**
+ * 设置默认仓库
+ *
+ * @param projectId
+ * @param helmConfigId
+ */
+ void setDefaultDevopsHelmConfig(Long projectId, Long helmConfigId);
+
+ /**
+ * 查询指定层级的默认仓库
+ *
+ * @return
+ */
+ DevopsHelmConfigDTO queryDefaultDevopsHelmConfigByLevel(String resourceType, Long resourceId);
+
+ /**
+ * 创建创建指定层级的仓库
+ *
+ * @param devopsHelmConfigDTO
+ */
+ void createDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO);
+
+ @Transactional(rollbackFor = Exception.class)
+ void updateDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO);
+
+ void updateDevopsHelmConfigToNonDefaultRepoOnOrganization(Long resourceId);
+
+ /**
+ * 查询应用服务生效的配置
+ * 生效优先级 app -> project -> tenant -> site, 查到就返回
+ *
+ * @return
+ */
+ DevopsHelmConfigDTO queryAppConfig(Long appServiceId, Long projectId, Long tenantId);
+
+ /**
+ * 检查项目下仓库名称是否已存在
+ *
+ * @param projectId
+ * @param helmConfigId
+ * @param name
+ * @return
+ */
+ boolean checkNameExists(Long projectId, Long helmConfigId, String name);
+
+ void checkNameExistsThrowEx(Long projectId, Long helmConfigId, String name);
+
+ /**
+ * 获取chart仓库的index内容
+ *
+ * @param projectId
+ * @param helmConfigId
+ * @return
+ */
+ String getIndexContent(Long projectId, Long helmConfigId);
+
+ /**
+ * 应用层查询helm仓库配置列表
+ *
+ * @param projectId
+ * @param appServiceId
+ * @return
+ */
+ List listHelmConfigOnApp(Long projectId, Long appServiceId);
+
+ /**
+ * 批量插入
+ */
+ void batchInsertInNewTrans(List devopsHelmConfigDTOS);
+
+ /**
+ * 下载chart包
+ *
+ * @param helmConfigId
+ * @param chartUrl
+ * @return
+ */
+ byte[] downloadChart(Long helmConfigId, String chartUrl);
+}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHostCommandService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHostCommandService.java
index 7243a1dad6..1ae251fde7 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsHostCommandService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsHostCommandService.java
@@ -22,6 +22,8 @@ public interface DevopsHostCommandService {
DevopsHostCommandDTO queryInstanceLatest(Long instanceId, String instanceType);
+ DevopsHostCommandDTO queryDockerInstanceLatest(Long instanceId, String instanceType);
+
/**
* 查询出处于操作中状态三分钟及以上的记录
*
@@ -38,6 +40,4 @@ public interface DevopsHostCommandService {
void batchUpdateTimeoutCommand(Set missCommands);
List listByIds(Set missCommands);
-
- List listByTypeAndInsIds(Set insIds, String instanceType);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHostService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHostService.java
index f96ebfda3b..12909a815f 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsHostService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsHostService.java
@@ -128,9 +128,9 @@ public interface DevopsHostService {
* @param instanceId 实例id
* @return true表示匹配
*/
- boolean HostIdInstanceIdMatch(Long hostId, Long instanceId);
+ boolean hostIdInstanceIdMatch(Long hostId, Long instanceId);
- boolean HostIdDockerInstanceMatch(Long hostId, Long instanceId);
+ boolean hostIdDockerInstanceMatch(Long hostId, Long instanceId);
/**
* 分页查询主机
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHzeroDeployDetailsService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHzeroDeployDetailsService.java
index dbbb7a32b8..b213f68f7a 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsHzeroDeployDetailsService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsHzeroDeployDetailsService.java
@@ -22,9 +22,6 @@ public interface DevopsHzeroDeployDetailsService {
DevopsHzeroDeployDetailsDTO baseQueryByAppId(Long appId);
-
- DevopsHzeroDeployDetailsDTO baseQueryDeployingByEnvIdAndInstanceCode(Long envId, String instanceCode);
-
List listNotSuccessRecordId(Long recordId);
List listByDeployRecordId(Long deployRecordId);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsIngressService.java b/src/main/java/io/choerodon/devops/app/service/DevopsIngressService.java
index 8df25322b7..90c83bdddd 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsIngressService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsIngressService.java
@@ -1,5 +1,7 @@
package io.choerodon.devops.app.service;
+import java.util.List;
+
import io.choerodon.core.domain.Page;
import io.choerodon.devops.api.vo.DevopsIngressVO;
import io.choerodon.devops.app.eventhandler.payload.IngressSagaPayload;
@@ -8,8 +10,6 @@
import io.choerodon.devops.infra.dto.UserAttrDTO;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
-import java.util.List;
-
public interface DevopsIngressService {
@@ -142,8 +142,6 @@ IngressSagaPayload createForBatchDeployment(
Long baseUpdateStatus(Long envId, String name, String status);
- List baseListNameByServiceId(Long serviceId);
-
Boolean baseCheckName(Long envId, String name);
Boolean baseCheckPath(Long envId, String domain, String path, Long id);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsIssueRelService.java b/src/main/java/io/choerodon/devops/app/service/DevopsIssueRelService.java
index e6ef6f5b2b..81f7e52ea5 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsIssueRelService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsIssueRelService.java
@@ -66,7 +66,17 @@ public interface DevopsIssueRelService {
* @param issueId
* @return
*/
- Set listRelationByIssueIdAndObjectType(Long projectId, String object, Long issueId);
+ Set listRelationByIssueIdAndProjectIdAndObjectType(Long projectId, String object, Long issueId);
+
+ /**
+ * 列出关联了敏捷问题的commitId或branchId
+ *
+ * @param object
+ * @param issueId
+ * @return
+ */
+ Set listRelationByIssueIdAndObjectType(String object, Long issueId);
+
/**
* 列出敏捷问题以及关联的分支信息
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsNotificationUserRelService.java b/src/main/java/io/choerodon/devops/app/service/DevopsNotificationUserRelService.java
deleted file mode 100644
index 373f0b56bb..0000000000
--- a/src/main/java/io/choerodon/devops/app/service/DevopsNotificationUserRelService.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package io.choerodon.devops.app.service;
-
-/**
- * Created by Sheep on 2019/7/15.
- */
-public interface DevopsNotificationUserRelService {
-}
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsProjectService.java b/src/main/java/io/choerodon/devops/app/service/DevopsProjectService.java
index 46d92abd51..39dd361eaa 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsProjectService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsProjectService.java
@@ -44,10 +44,6 @@ public interface DevopsProjectService {
DevopsProjectDTO baseQueryByGitlabEnvGroupId(Integer envGroupId);
void baseUpdate(DevopsProjectDTO devopsProjectDTO);
-
- void baseUpdateByPrimaryKey(DevopsProjectDTO devopsProjectDTO);
-
-
/**
* 分页查询与该项目在同一组织的项目列表(包含自身)
*
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsRegistrySecretService.java b/src/main/java/io/choerodon/devops/app/service/DevopsRegistrySecretService.java
index 081bf346a6..95f8119c5a 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsRegistrySecretService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsRegistrySecretService.java
@@ -1,7 +1,5 @@
package io.choerodon.devops.app.service;
-import java.util.List;
-
import io.choerodon.devops.infra.dto.DevopsRegistrySecretDTO;
/**
@@ -45,8 +43,6 @@ public interface DevopsRegistrySecretService {
*/
DevopsRegistrySecretDTO baseQueryByClusterIdAndNamespace(Long clusterId, String namespace, Long configId, Long projectId);
- List baseListByConfig(Long configId);
-
/**
* 查询集群下的namespace中是否存在对应name的secret
*
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsSecretService.java b/src/main/java/io/choerodon/devops/app/service/DevopsSecretService.java
index 950eb4471c..02dd06f1b6 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsSecretService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsSecretService.java
@@ -1,13 +1,13 @@
package io.choerodon.devops.app.service;
+import java.util.List;
+
import io.choerodon.core.domain.Page;
import io.choerodon.devops.api.vo.SecretReqVO;
import io.choerodon.devops.api.vo.SecretRespVO;
import io.choerodon.devops.infra.dto.DevopsSecretDTO;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
-import java.util.List;
-
/**
* Created by n!Ck
* Date: 18-12-4
@@ -97,8 +97,6 @@ public interface DevopsSecretService {
SecretReqVO dtoToReqVo(DevopsSecretDTO devopsSecretDTO);
- SecretRespVO dtoToRespVo(DevopsSecretDTO devopsSecretDTO);
-
DevopsSecretDTO baseQuery(Long secretId);
DevopsSecretDTO baseCreate(DevopsSecretDTO devopsSecretDTO);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsServiceInstanceService.java b/src/main/java/io/choerodon/devops/app/service/DevopsServiceInstanceService.java
index 4aecb5b73a..79d4da5874 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsServiceInstanceService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsServiceInstanceService.java
@@ -11,8 +11,6 @@ public interface DevopsServiceInstanceService {
void baseCreate(DevopsServiceInstanceDTO devopsServiceInstanceDTO);
- DevopsServiceInstanceDTO baseQueryByOptions(Long serviceId, Long instanceId);
-
List baseListByServiceId(Long serviceId);
void deleteByServiceId(Long serviceId);
diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsServiceService.java b/src/main/java/io/choerodon/devops/app/service/DevopsServiceService.java
index 85ede8b33f..bb9a9de6be 100644
--- a/src/main/java/io/choerodon/devops/app/service/DevopsServiceService.java
+++ b/src/main/java/io/choerodon/devops/app/service/DevopsServiceService.java
@@ -1,5 +1,7 @@
package io.choerodon.devops.app.service;
+import java.util.List;
+
import io.choerodon.core.domain.Page;
import io.choerodon.devops.api.vo.DevopsServiceReqVO;
import io.choerodon.devops.api.vo.DevopsServiceVO;
@@ -10,8 +12,6 @@
import io.choerodon.devops.infra.dto.UserAttrDTO;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
-import java.util.List;
-
/**
* Created by Zenger on 2018/4/13.
*/
@@ -180,8 +180,6 @@ Page basePageByOptions(Long projectId, Long envId, Long i
void baseUpdateEndPoint(Long id);
- List baseListEnvByRunningService();
-
DevopsServiceDTO baseQueryByNameAndEnvId(String name, Long envId);
Boolean baseCheckServiceByEnv(Long envId);
diff --git a/src/main/java/io/choerodon/devops/app/service/GitlabGroupService.java b/src/main/java/io/choerodon/devops/app/service/GitlabGroupService.java
index e7cda2767d..5690118f66 100644
--- a/src/main/java/io/choerodon/devops/app/service/GitlabGroupService.java
+++ b/src/main/java/io/choerodon/devops/app/service/GitlabGroupService.java
@@ -2,7 +2,6 @@
import io.choerodon.devops.app.eventhandler.payload.GitlabGroupPayload;
import io.choerodon.devops.infra.dto.UserAttrDTO;
-import io.choerodon.devops.infra.dto.gitlab.GroupDTO;
import io.choerodon.devops.infra.dto.iam.ProjectDTO;
import io.choerodon.devops.infra.dto.iam.Tenant;
@@ -33,12 +32,5 @@ public interface GitlabGroupService {
*/
void createClusterEnvGroup(ProjectDTO projectDTO, Tenant organizationDTO, UserAttrDTO userAttrDTO);
- /**
- * 创建平台的应用组
- *
- * @return 创建后的组
- */
- GroupDTO createSiteAppGroup(Long iamUserId, String groupName);
-
Boolean checkRepositoryAvailable(String groupName, String projectName, String token);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/HandlerObjectFileRelationsService.java b/src/main/java/io/choerodon/devops/app/service/HandlerObjectFileRelationsService.java
index aaa28a635d..f0c2feeed8 100644
--- a/src/main/java/io/choerodon/devops/app/service/HandlerObjectFileRelationsService.java
+++ b/src/main/java/io/choerodon/devops/app/service/HandlerObjectFileRelationsService.java
@@ -1,12 +1,11 @@
package io.choerodon.devops.app.service;
+import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO;
+import io.kubernetes.client.openapi.models.V1Endpoints;
+
import java.util.List;
import java.util.Map;
-import io.kubernetes.client.models.V1Endpoints;
-
-import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO;
-
/**
* 处理资源对象和文件对应关系
diff --git a/src/main/java/io/choerodon/devops/app/service/HostCommandService.java b/src/main/java/io/choerodon/devops/app/service/HostCommandService.java
deleted file mode 100644
index 59410b2a96..0000000000
--- a/src/main/java/io/choerodon/devops/app/service/HostCommandService.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package io.choerodon.devops.app.service;
-
-/**
- * 〈功能简述〉
- * 〈〉
- *
- * @author wanghao
- * @Date 2021/6/28 11:55
- */
-public interface HostCommandService {
-}
diff --git a/src/main/java/io/choerodon/devops/app/service/ProjectService.java b/src/main/java/io/choerodon/devops/app/service/ProjectService.java
index 0ee90febae..b73cf8e6b6 100644
--- a/src/main/java/io/choerodon/devops/app/service/ProjectService.java
+++ b/src/main/java/io/choerodon/devops/app/service/ProjectService.java
@@ -2,22 +2,7 @@
import io.choerodon.devops.infra.dto.DevopsProjectDTO;
-/**
- * Created with IntelliJ IDEA.
- * User: Runge
- * Date: 2018/4/2
- * Time: 10:59
- * Description:
- */
public interface ProjectService {
- /**
- * 查询项目在gitlab中组是否创建
- *
- * @param projectId 项目Id
- * @return gitlab group Ready
- */
- boolean queryProjectGitlabGroupReady(Long projectId);
-
/**
* 根据Id查询project
diff --git a/src/main/java/io/choerodon/devops/app/service/SendNotificationService.java b/src/main/java/io/choerodon/devops/app/service/SendNotificationService.java
index ef59a69619..359ce37367 100644
--- a/src/main/java/io/choerodon/devops/app/service/SendNotificationService.java
+++ b/src/main/java/io/choerodon/devops/app/service/SendNotificationService.java
@@ -56,8 +56,6 @@ public interface SendNotificationService {
*/
void sendWhenAppServiceDisabled(Long appServiceId);
-// WebHookJsonSendDTO getWebHookJsonSendDTO(JSONObject JSONObject, String code, Long createdBy, Date lastUpdateDate);
-
/**
* 删除应用服务通知
*/
diff --git a/src/main/java/io/choerodon/devops/app/service/UserAttrService.java b/src/main/java/io/choerodon/devops/app/service/UserAttrService.java
index 8eff1b7055..806024cf9b 100644
--- a/src/main/java/io/choerodon/devops/app/service/UserAttrService.java
+++ b/src/main/java/io/choerodon/devops/app/service/UserAttrService.java
@@ -78,6 +78,8 @@ public interface UserAttrService {
*/
void updateAdmin(Long iamUserId, Boolean isGitlabAdmin);
+ void updateAdmins(List iamUserIds, Boolean isGitlabAdmin);
+
Page queryByAppServiceId(Long projectId, Long appServiceId, PageRequest pageRequest, String params);
/**
@@ -101,4 +103,21 @@ public interface UserAttrService {
* @return UserAttrDTO
*/
UserAttrDTO queryGitlabAdminByIamId();
+
+ /**
+ * 查询猪齿鱼中的所有gitlabAdmin用户
+ *
+ * @return
+ */
+ List listAllAdmin();
+
+ void updateGitlabAdminUserToNormalUser(List iamUserIds);
+
+ /**
+ * 查询用户的模拟令牌,不存在则创建
+ *
+ * @param iamUserId
+ * @return
+ */
+ String queryOrCreateImpersonationToken(Long iamUserId);
}
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AgentCommandServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AgentCommandServiceImpl.java
index 0d2e100a7c..2dd98d21fd 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/AgentCommandServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AgentCommandServiceImpl.java
@@ -329,7 +329,7 @@ public void initEnv(DevopsEnvironmentDTO devopsEnvironmentDTO, Long clusterId) {
ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(devopsEnvironmentDTO.getProjectId());
Tenant organization = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
String repoUrl = GitUtil.getGitlabSshUrl(PATTERN, gitlabSshUrl, organization.getTenantNum(),
- projectDTO.getCode(), devopsEnvironmentDTO.getCode(),
+ projectDTO.getDevopsComponentCode(), devopsEnvironmentDTO.getCode(),
EnvironmentType.forValue(devopsEnvironmentDTO.getType()),
devopsClusterMapper.selectByPrimaryKey(devopsEnvironmentDTO.getClusterId()).getCode());
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java
index c7ac9eb5f6..f9f43d809e 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java
@@ -1,24 +1,10 @@
package io.choerodon.devops.app.service.impl;
-import static io.choerodon.devops.infra.constant.GitOpsConstants.DATE_PATTERN;
-import static io.choerodon.devops.infra.constant.GitOpsConstants.THREE_MINUTE_MILLISECONDS;
-import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE;
-import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE;
-import static org.springframework.transaction.annotation.Isolation.READ_COMMITTED;
-
-import java.io.IOException;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
-import io.kubernetes.client.JSON;
-import io.kubernetes.client.models.*;
+import io.kubernetes.client.openapi.JSON;
+import io.kubernetes.client.openapi.models.*;
import org.codehaus.jackson.map.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,6 +16,20 @@
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
+import java.io.IOException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import static io.choerodon.devops.infra.constant.GitOpsConstants.DATE_PATTERN;
+import static io.choerodon.devops.infra.constant.GitOpsConstants.THREE_MINUTE_MILLISECONDS;
+import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE;
+import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE;
+import static org.springframework.transaction.annotation.Isolation.READ_COMMITTED;
+
import io.choerodon.asgard.saga.annotation.Saga;
import io.choerodon.asgard.saga.producer.StartSagaBuilder;
import io.choerodon.asgard.saga.producer.TransactionalProducer;
@@ -311,7 +311,7 @@ public void handlerUpdatePodMessage(String key, String msg, Long envId) {
* @return true 当状态不等于Pending时,所有container都ready
*/
private Boolean getReadyValue(String podStatus, V1Pod v1Pod) {
- return !PENDING.equals(podStatus) && v1Pod.getStatus().getContainerStatuses().stream().map(V1ContainerStatus::isReady).reduce((one, another) -> mapNullToFalse(one) && mapNullToFalse(another)).orElse(Boolean.FALSE);
+ return !PENDING.equals(podStatus) && v1Pod.getStatus().getContainerStatuses().stream().map(V1ContainerStatus::getReady).reduce((one, another) -> mapNullToFalse(one) && mapNullToFalse(another)).orElse(Boolean.FALSE);
}
@@ -601,11 +601,11 @@ public void resourceUpdate(String key, String msg, Long clusterId) {
DevopsDeploymentDTO deploymentDTO = devopsDeploymentService.baseQueryByEnvIdAndName(envId, KeyParseUtil.getResourceName(key));
// 部署组创建的deployment,如果副本变为0则更新应用状态为停止
if (deploymentDTO != null && WorkloadSourceTypeEnums.DEPLOY_GROUP.getType().equals(deploymentDTO.getSourceType())) {
- V1beta2Deployment v1beta2Deployment = K8sUtil.deserialize(msg, V1beta2Deployment.class);
- if (v1beta2Deployment.getSpec().getReplicas() == 0 && !InstanceStatus.STOPPED.getStatus().equals(deploymentDTO.getStatus())) {
+ V1Deployment v1Deployment = K8sUtil.deserialize(msg, V1Deployment.class);
+ if (v1Deployment.getSpec().getReplicas() == 0 && !InstanceStatus.STOPPED.getStatus().equals(deploymentDTO.getStatus())) {
deploymentDTO.setStatus(InstanceStatus.STOPPED.getStatus());
devopsDeploymentService.baseUpdate(deploymentDTO);
- } else if (v1beta2Deployment.getSpec().getReplicas() > 0 && !InstanceStatus.RUNNING.getStatus().equals(deploymentDTO.getStatus())) {
+ } else if (v1Deployment.getSpec().getReplicas() > 0 && !InstanceStatus.RUNNING.getStatus().equals(deploymentDTO.getStatus())) {
deploymentDTO.setStatus(InstanceStatus.RUNNING.getStatus());
devopsDeploymentService.baseUpdate(deploymentDTO);
}
@@ -759,6 +759,10 @@ private void handleUpdateServiceMsg(String key, Long envId, String msg, DevopsEn
// 如果数据库没有service的对象, 相关的 env_resource 纪录也不需要
return;
}
+ if (devopsServiceDTO.getType().equals("ClusterIP")) {
+ devopsServiceDTO.setClusterIp(v1Service.getSpec().getClusterIP());
+ devopsServiceService.baseUpdate(devopsServiceDTO);
+ }
if (devopsServiceDTO.getType().equals("LoadBalancer") &&
v1Service.getStatus() != null &&
v1Service.getStatus().getLoadBalancer() != null &&
@@ -942,7 +946,7 @@ public void handlerDomainCreateMessage(String key, String msg, Long clusterId) {
return;
}
- V1beta1Ingress ingress = json.deserialize(msg, V1beta1Ingress.class);
+ V1Ingress ingress = json.deserialize(msg, V1Ingress.class);
DevopsEnvResourceDTO devopsEnvResourceDTO = new DevopsEnvResourceDTO();
DevopsEnvResourceDetailDTO devopsEnvResourceDetailDTO = new DevopsEnvResourceDetailDTO();
devopsEnvResourceDetailDTO.setMessage(msg);
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java
index a1fb6767f5..e48b610472 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java
@@ -1,17 +1,17 @@
package io.choerodon.devops.app.service.impl;
-import java.util.Date;
-import java.util.List;
-
-import io.kubernetes.client.JSON;
-import io.kubernetes.client.models.V1beta2Deployment;
-import io.kubernetes.client.models.V1beta2StatefulSet;
+import io.kubernetes.client.openapi.JSON;
+import io.kubernetes.client.openapi.models.V1Deployment;
+import io.kubernetes.client.openapi.models.V1StatefulSet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.util.Date;
+import java.util.List;
+
import io.choerodon.devops.app.service.AppExceptionRecordService;
import io.choerodon.devops.app.service.DevopsDeployAppCenterService;
import io.choerodon.devops.infra.dto.AppExceptionRecordDTO;
@@ -32,7 +32,10 @@
public class AppExceptionRecordServiceImpl implements AppExceptionRecordService {
private static final Logger LOGGER = LoggerFactory.getLogger(AppExceptionRecordServiceImpl.class);
- private static JSON json = new JSON();
+
+ private static final String ERROR_UPDATE_EXCEPTION_RECORD = "error.update.exception.record";
+ private static final String ERROR_SAVE_EXCEPTION_RECORD = "error.save.exception.record";
+ private static final io.kubernetes.client.openapi.JSON JSON = new JSON();
@Autowired
private AppExceptionRecordMapper appExceptionRecordMapper;
@Autowired
@@ -51,12 +54,12 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource,
int desired = 1;
String resourceName = "";
if (ResourceType.DEPLOYMENT.getType().equals(resourceType)) {
- V1beta2Deployment v1beta2Deployment = json.deserialize(resource, V1beta2Deployment.class);
+ V1Deployment v1beta2Deployment = JSON.deserialize(resource, V1Deployment.class);
current = v1beta2Deployment.getStatus().getReadyReplicas() == null ? 0 : v1beta2Deployment.getStatus().getReadyReplicas();
desired = v1beta2Deployment.getStatus().getReplicas() == null ? 0 : v1beta2Deployment.getStatus().getReplicas();
resourceName = v1beta2Deployment.getMetadata().getName();
} else if (ResourceType.STATEFULSET.getType().equals(resourceType)) {
- V1beta2StatefulSet v1beta2StatefulSet = json.deserialize(resource, V1beta2StatefulSet.class);
+ V1StatefulSet v1beta2StatefulSet = JSON.deserialize(resource, V1StatefulSet.class);
current = v1beta2StatefulSet.getStatus().getReadyReplicas() == null ? 0 : v1beta2StatefulSet.getStatus().getReadyReplicas();
desired = v1beta2StatefulSet.getStatus().getReplicas() == null ? 0 : v1beta2StatefulSet.getStatus().getReplicas();
resourceName = v1beta2StatefulSet.getMetadata().getName();
@@ -71,7 +74,7 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource,
AppExceptionRecordDTO appExceptionRecordDTO = appExceptionRecordMapper.queryLatestExceptionRecordFilterByType(devopsDeployAppCenterEnvDTO.getId(), resourceType, resourceName);
if (appExceptionRecordDTO != null) {
appExceptionRecordDTO.setEndDate(new Date());
- MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, "error.update.exception.record");
+ MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, ERROR_UPDATE_EXCEPTION_RECORD);
}
} else if (current == 0) {
// 停机
@@ -85,11 +88,11 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource,
resourceName,
new Date(),
true);
- MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, "error.save.exception.record");
+ MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, ERROR_SAVE_EXCEPTION_RECORD);
} else {
if (Boolean.FALSE.equals(appExceptionRecordDTO.getDowntime())) {
appExceptionRecordDTO.setEndDate(new Date());
- MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, "error.update.exception.record");
+ MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, ERROR_UPDATE_EXCEPTION_RECORD);
AppExceptionRecordDTO appExceptionRecordDTO1 = new AppExceptionRecordDTO(devopsDeployAppCenterEnvDTO.getProjectId(),
devopsDeployAppCenterEnvDTO.getId(),
@@ -98,7 +101,7 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource,
resourceName,
new Date(),
true);
- MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, "error.save.exception.record");
+ MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, ERROR_SAVE_EXCEPTION_RECORD);
}
}
} else {
@@ -112,11 +115,11 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource,
resourceName,
new Date(),
false);
- MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, "error.save.exception.record");
+ MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, ERROR_SAVE_EXCEPTION_RECORD);
} else {
if (Boolean.TRUE.equals(appExceptionRecordDTO.getDowntime())) {
appExceptionRecordDTO.setEndDate(new Date());
- MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, "error.update.exception.record");
+ MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, ERROR_UPDATE_EXCEPTION_RECORD);
AppExceptionRecordDTO appExceptionRecordDTO1 = new AppExceptionRecordDTO(devopsDeployAppCenterEnvDTO.getProjectId(),
devopsDeployAppCenterEnvDTO.getId(),
@@ -125,7 +128,7 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource,
resourceName,
new Date(),
false);
- MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, "error.save.exception.record");
+ MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, ERROR_SAVE_EXCEPTION_RECORD);
}
}
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmRelServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmRelServiceImpl.java
new file mode 100644
index 0000000000..f98dd77d65
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmRelServiceImpl.java
@@ -0,0 +1,39 @@
+package io.choerodon.devops.app.service.impl;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.Assert;
+
+import io.choerodon.devops.app.service.AppServiceHelmRelService;
+import io.choerodon.devops.infra.constant.ResourceCheckConstant;
+import io.choerodon.devops.infra.dto.AppServiceHelmRelDTO;
+import io.choerodon.devops.infra.mapper.AppServiceHelmRelMapper;
+
+/**
+ * 应用服务和helm配置的关联关系表(AppServiceHelmRel)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-15 10:55:52
+ */
+@Service
+public class AppServiceHelmRelServiceImpl implements AppServiceHelmRelService {
+ @Autowired
+ private AppServiceHelmRelMapper appServiceHelmRelMapper;
+
+ @Override
+ public AppServiceHelmRelDTO queryByAppServiceId(Long appServiceId) {
+ Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL);
+
+ AppServiceHelmRelDTO appServiceHelmRelDTO = new AppServiceHelmRelDTO();
+ appServiceHelmRelDTO.setAppServiceId(appServiceId);
+ return appServiceHelmRelMapper.selectOne(appServiceHelmRelDTO);
+ }
+
+ @Override
+ public void batchInsertInNewTrans(List appServiceHelmRelDTOToInsert) {
+ appServiceHelmRelMapper.batchInsert(appServiceHelmRelDTOToInsert);
+ }
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java
new file mode 100644
index 0000000000..8eca131ab8
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java
@@ -0,0 +1,67 @@
+package io.choerodon.devops.app.service.impl;
+
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO;
+import io.choerodon.devops.app.service.AppServiceHelmVersionService;
+import io.choerodon.devops.infra.constant.ResourceCheckConstant;
+import io.choerodon.devops.infra.dto.AppServiceHelmVersionDTO;
+import io.choerodon.devops.infra.mapper.AppServiceHelmVersionMapper;
+import io.choerodon.devops.infra.util.MapperUtil;
+
+/**
+ * 应用版本表(AppServiceHelmVersion)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-13 16:47:41
+ */
+@Service
+public class AppServiceHelmVersionServiceImpl implements AppServiceHelmVersionService {
+ @Autowired
+ private AppServiceHelmVersionMapper appServiceHelmVersionMapper;
+
+ @Override
+ public List listByAppVersionIds(Set versionIds) {
+ return appServiceHelmVersionMapper.listByAppVersionIds(versionIds);
+ }
+
+ @Override
+ public AppServiceHelmVersionDTO queryByAppServiceVersionId(Long appServiceVersionId) {
+ Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL);
+
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = new AppServiceHelmVersionDTO();
+ appServiceHelmVersionDTO.setAppServiceVersionId(appServiceVersionId);
+
+ return appServiceHelmVersionMapper.selectOne(appServiceHelmVersionDTO);
+ }
+
+ @Override
+ @Transactional
+ public void create(AppServiceHelmVersionDTO appServiceHelmVersionDTO) {
+ MapperUtil.resultJudgedInsertSelective(appServiceHelmVersionMapper, appServiceHelmVersionDTO, "error.save.helm.version");
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteByAppServiceVersionId(Long appServiceVersionId) {
+ Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL);
+
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = new AppServiceHelmVersionDTO();
+ appServiceHelmVersionDTO.setAppServiceVersionId(appServiceVersionId);
+ appServiceHelmVersionMapper.delete(appServiceHelmVersionDTO);
+ }
+
+ @Override
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
+ public void batchInsertInNewTrans(List appServiceHelmVersionDTOToInsert) {
+ appServiceHelmVersionMapper.batchInsert(appServiceHelmVersionDTOToInsert);
+ }
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java
new file mode 100644
index 0000000000..a9d0660016
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java
@@ -0,0 +1,72 @@
+package io.choerodon.devops.app.service.impl;
+
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO;
+import io.choerodon.devops.app.service.AppServiceImageVersionService;
+import io.choerodon.devops.infra.constant.ResourceCheckConstant;
+import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO;
+import io.choerodon.devops.infra.mapper.AppServiceImageVersionMapper;
+import io.choerodon.devops.infra.util.MapperUtil;
+
+/**
+ * 应用版本表(AppServiceImageVersion)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-13 16:47:42
+ */
+@Service
+public class AppServiceImageVersionServiceImpl implements AppServiceImageVersionService {
+ @Autowired
+ private AppServiceImageVersionMapper appServiceImageVersionMapper;
+
+ @Override
+ public void create(AppServiceImageVersionDTO appServiceImageVersionDTO) {
+ MapperUtil.resultJudgedInsertSelective(appServiceImageVersionMapper, appServiceImageVersionDTO, "error.save.image.version");
+ }
+
+ @Override
+ public AppServiceImageVersionDTO queryByAppServiceVersionId(Long appServiceVersionId) {
+ Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL);
+
+ AppServiceImageVersionDTO appServiceImageVersionDTO = new AppServiceImageVersionDTO();
+ appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionId);
+
+ return appServiceImageVersionMapper.selectOne(appServiceImageVersionDTO);
+ }
+
+ @Override
+ public List listByAppVersionIds(Set versionIds) {
+ return appServiceImageVersionMapper.listByAppVersionIds(versionIds);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void baseUpdate(AppServiceImageVersionDTO appServiceImageVersionDTO) {
+ appServiceImageVersionMapper.updateByPrimaryKeySelective(appServiceImageVersionDTO);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteByAppServiceVersionId(Long appServiceVersionId) {
+ Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL);
+
+ AppServiceImageVersionDTO appServiceImageVersionDTO = new AppServiceImageVersionDTO();
+ appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionId);
+ appServiceImageVersionMapper.delete(appServiceImageVersionDTO);
+ }
+
+ @Override
+ @Transactional(propagation = Propagation.REQUIRES_NEW)
+ public void batchInsertInNewTrans(List appServiceImageVersionDTOS) {
+ appServiceImageVersionMapper.batchInsert(appServiceImageVersionDTOS);
+ }
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java
index da4d3f5031..b6ad8090ee 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java
@@ -1,25 +1,11 @@
package io.choerodon.devops.app.service.impl;
-import static io.choerodon.devops.infra.constant.MarketConstant.APP_SHELVES_CODE;
-import static io.choerodon.devops.infra.constant.MarketConstant.APP_SHELVES_NAME;
-import static io.choerodon.devops.infra.constant.MiscConstants.APP_INSTANCE_DELETE_REDIS_KEY;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.text.DecimalFormat;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import javax.annotation.Nullable;
-
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
-import io.kubernetes.client.JSON;
-import io.kubernetes.client.models.V1Service;
-import io.kubernetes.client.models.V1beta1Ingress;
+import io.kubernetes.client.openapi.JSON;
+import io.kubernetes.client.openapi.models.V1Ingress;
+import io.kubernetes.client.openapi.models.V1Service;
import org.apache.commons.lang.StringUtils;
import org.hzero.core.base.BaseConstants;
import org.hzero.core.util.Pair;
@@ -39,6 +25,20 @@
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import javax.annotation.Nullable;
+
+import static io.choerodon.devops.infra.constant.MarketConstant.APP_SHELVES_CODE;
+import static io.choerodon.devops.infra.constant.MarketConstant.APP_SHELVES_NAME;
+import static io.choerodon.devops.infra.constant.MiscConstants.APP_INSTANCE_DELETE_REDIS_KEY;
+
import io.choerodon.asgard.saga.annotation.Saga;
import io.choerodon.asgard.saga.producer.StartSagaBuilder;
import io.choerodon.asgard.saga.producer.TransactionalProducer;
@@ -225,6 +225,12 @@ public class AppServiceInstanceServiceImpl implements AppServiceInstanceService
private DevopsPrometheusMapper devopsPrometheusMapper;
@Autowired
private DevopsProjectMapper devopsProjectMapper;
+ @Autowired
+ private AppServiceImageVersionService appServiceImageVersionService;
+ @Autowired
+ private AppServiceHelmVersionService appServiceHelmVersionService;
+ @Autowired
+ private DevopsHelmConfigService devopsHelmConfigService;
/**
* 前端传入的排序字段和Mapper文件中的字段名的映射
*/
@@ -579,26 +585,26 @@ public Page pageDeployTimeTable(Long projectId, PageRequest
}
- @Override
- public void deployTestApp(Long projectId, AppServiceDeployVO appServiceDeployVO) {
- // 这里的environmentId就是集群id
- CommonExAssertUtil.assertTrue(permissionHelper.projectPermittedToCluster(appServiceDeployVO.getEnvironmentId(), projectId), MiscConstants.ERROR_OPERATING_RESOURCE_IN_OTHER_PROJECT);
-
- String versionValue = appServiceVersionService.baseQueryValue(appServiceDeployVO.getAppServiceVersionId());
- AppServiceDTO appServiceDTO = applicationService.baseQuery(appServiceDeployVO.getAppServiceId());
-
- DevopsEnvironmentDTO devopsEnvironmentDTO = new DevopsEnvironmentDTO();
- devopsEnvironmentDTO.setClusterId(appServiceDeployVO.getEnvironmentId());
- devopsEnvironmentDTO.setCode(CHOERODON);
- // 测试应用没有环境id
- String secretCode = getSecret(appServiceDTO, appServiceDeployVO.getAppServiceVersionId(), devopsEnvironmentDTO);
-
- AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQuery(appServiceDeployVO.getAppServiceVersionId());
- FileUtil.checkYamlFormat(appServiceDeployVO.getValues());
- String deployValue = getReplaceResult(versionValue,
- appServiceDeployVO.getValues()).getDeltaYaml().trim();
- agentCommandService.deployTestApp(appServiceDTO, appServiceVersionDTO, appServiceDeployVO.getInstanceName(), secretCode, appServiceDeployVO.getEnvironmentId(), deployValue);
- }
+// @Override
+// public void deployTestApp(Long projectId, AppServiceDeployVO appServiceDeployVO) {
+// // 这里的environmentId就是集群id
+// CommonExAssertUtil.assertTrue(permissionHelper.projectPermittedToCluster(appServiceDeployVO.getEnvironmentId(), projectId), MiscConstants.ERROR_OPERATING_RESOURCE_IN_OTHER_PROJECT);
+//
+// String versionValue = appServiceVersionService.baseQueryValue(appServiceDeployVO.getAppServiceVersionId());
+// AppServiceDTO appServiceDTO = applicationService.baseQuery(appServiceDeployVO.getAppServiceId());
+//
+// DevopsEnvironmentDTO devopsEnvironmentDTO = new DevopsEnvironmentDTO();
+// devopsEnvironmentDTO.setClusterId(appServiceDeployVO.getEnvironmentId());
+// devopsEnvironmentDTO.setCode(CHOERODON);
+// // 测试应用没有环境id
+// String secretCode = getSecret(appServiceDTO, appServiceDeployVO.getAppServiceVersionId(), devopsEnvironmentDTO);
+//
+// AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQuery(appServiceDeployVO.getAppServiceVersionId());
+// FileUtil.checkYamlFormat(appServiceDeployVO.getValues());
+// String deployValue = getReplaceResult(versionValue,
+// appServiceDeployVO.getValues()).getDeltaYaml().trim();
+// agentCommandService.deployTestApp(appServiceDTO, appServiceVersionDTO, appServiceDeployVO.getInstanceName(), secretCode, appServiceDeployVO.getEnvironmentId(), deployValue);
+// }
@Override
@@ -625,10 +631,10 @@ public InstanceControllerDetailVO getInstanceResourceDetailYaml(Long instanceId,
}
}
- @Override
- public void getTestAppStatus(Map> testReleases) {
- agentCommandService.getTestAppStatus(testReleases);
- }
+// @Override
+// public void getTestAppStatus(Map> testReleases) {
+// agentCommandService.getTestAppStatus(testReleases);
+// }
@Override
public void operationPodCount(Long projectId, String kind, String name, Long envId, Long count, boolean workload) {
@@ -1712,7 +1718,7 @@ public void deleteInstance(Long projectId, Long instanceId, Boolean deletePromet
TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()),
RELEASE_PREFIX + appServiceInstanceDTO.getCode() + YAML_SUFFIX,
"DELETE FILE",
- TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), "master");
+ TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), MASTER);
}
return;
} else {
@@ -1837,7 +1843,7 @@ private void checkNameInternal(String code, Long envId, boolean isFromPipeline)
@Override
public InstanceValueVO getReplaceResult(String versionValue, String deployValue) {
String deployFileAfterProcessed = deleteLineStartWithPoundKey(deployValue);
- if (versionValue.equals(deployValue) || !org.springframework.util.StringUtils.hasText(deployFileAfterProcessed)) {
+ if (versionValue.equals(deployValue) || org.apache.commons.lang3.StringUtils.isEmpty(deployFileAfterProcessed)) {
InstanceValueVO instanceValueVO = new InstanceValueVO();
instanceValueVO.setDeltaYaml("");
instanceValueVO.setYaml(versionValue);
@@ -2212,8 +2218,8 @@ public void batchDeploymentSaga(BatchDeploymentPayload batchDeploymentPayload) {
}
for (IngressSagaPayload ingressSagaPayload : batchDeploymentPayload.getIngressSagaPayloads()) {
- ResourceConvertToYamlHandler ingressResourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>();
- ingressResourceConvertToYamlHandler.setType(ingressSagaPayload.getV1beta1Ingress());
+ ResourceConvertToYamlHandler ingressResourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>();
+ ingressResourceConvertToYamlHandler.setType(ingressSagaPayload.getV1Ingress());
String ingressContent = ingressResourceConvertToYamlHandler.getCreationResourceContentForBatchDeployment();
String fileName = GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName() + GitOpsConstants.YAML_FILE_SUFFIX;
pathContentMap.put(fileName, ingressContent);
@@ -2289,7 +2295,6 @@ public void hzeroDeploy(Long detailsRecordId) {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void pipelineDeployHzeroApp(Long projectId, DevopsHzeroDeployDetailsDTO devopsHzeroDeployDetailsDTO) {
-// AppServiceInstanceDTO appServiceInstanceDTO = baseQueryByCodeAndEnv(devopsHzeroDeployDetailsDTO.getInstanceCode(), devopsHzeroDeployDetailsDTO.getEnvId());
DevopsHzeroDeployConfigDTO devopsHzeroDeployConfigDTO = devopsHzeroDeployConfigService.baseQueryById(devopsHzeroDeployDetailsDTO.getValueId());
// 设置用户上下文
@@ -2652,14 +2657,14 @@ private String getSecret(AppServiceDTO appServiceDTO, Long appServiceVersionId,
String secretCode = null;
//如果应用绑定了私有镜像库,则处理secret
AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQuery(appServiceVersionId);
-
// 先处理chart的认证信息
sendChartMuseumAuthentication(devopsEnvironmentDTO.getClusterId(), appServiceDTO, appServiceVersionDTO);
DevopsConfigDTO devopsConfigDTO;
- if (appServiceVersionDTO.getHarborConfigId() != null) {
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionId);
+ if (appServiceHelmVersionDTO.getHarborConfigId() != null) {
devopsConfigDTO = harborService.queryRepoConfigByIdToDevopsConfig(appServiceDTO.getId(), appServiceDTO.getProjectId(),
- appServiceVersionDTO.getHarborConfigId(), appServiceVersionDTO.getRepoType(), AUTHTYPE);
+ appServiceHelmVersionDTO.getHarborConfigId(), appServiceHelmVersionDTO.getHarborRepoType(), AUTHTYPE);
} else {
//查询harbor的用户名密码
devopsConfigDTO = harborService.queryRepoConfigToDevopsConfig(appServiceDTO.getProjectId(),
@@ -2803,10 +2808,12 @@ private String parseMarketChartRepo(String chartRepo) {
*/
private void sendChartMuseumAuthentication(Long clusterId, AppServiceDTO appServiceDTO, AppServiceVersionDTO
appServiceVersionDTO) {
- if (appServiceVersionDTO.getHelmConfigId() != null) {
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId());
+ if (appServiceHelmVersionDTO.getHelmConfigId() != null) {
// 查询chart配置
- DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, "chart", null);
- ConfigVO helmConfig = gson.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class);
+ DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigService.queryById(appServiceHelmVersionDTO.getHelmConfigId());
+ ConfigVO helmConfig = ConvertUtils.convertObject(devopsHelmConfigDTO, ConfigVO.class);
+ helmConfig.setIsPrivate(devopsHelmConfigDTO.getRepoPrivate());
// 如果是私有的, 发送认证信息给agent
if (Boolean.TRUE.equals(helmConfig.getIsPrivate())) {
agentCommandService.sendChartMuseumAuthentication(clusterId, helmConfig);
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java
new file mode 100644
index 0000000000..ac42d33cd4
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java
@@ -0,0 +1,68 @@
+package io.choerodon.devops.app.service.impl;
+
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO;
+import io.choerodon.devops.app.service.AppServiceMavenVersionService;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import io.choerodon.devops.infra.constant.ResourceCheckConstant;
+import io.choerodon.devops.infra.dto.AppServiceMavenVersionDTO;
+import io.choerodon.devops.infra.mapper.AppServiceMavenVersionMapper;
+import io.choerodon.devops.infra.util.MapperUtil;
+
+/**
+ * 应用版本表(AppServiceMavenVersion)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-13 16:47:43
+ */
+@Service
+public class AppServiceMavenVersionServiceImpl implements AppServiceMavenVersionService {
+ @Autowired
+ private AppServiceMavenVersionMapper appServiceMavenVersionMapper;
+
+ @Override
+ public AppServiceMavenVersionDTO queryByAppServiceVersionId(Long appServiceVersionId) {
+ Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL);
+
+ AppServiceMavenVersionDTO appServiceMavenVersionDTO = new AppServiceMavenVersionDTO();
+ appServiceMavenVersionDTO.setAppServiceVersionId(appServiceVersionId);
+
+ return appServiceMavenVersionMapper.selectOne(appServiceMavenVersionDTO);
+ }
+
+ @Override
+ @Transactional
+ public void create(AppServiceMavenVersionDTO appServiceMavenVersionDTO) {
+ MapperUtil.resultJudgedInsertSelective(appServiceMavenVersionMapper, appServiceMavenVersionDTO, "error.save.maven.version");
+ }
+
+ @Override
+ public List listByAppVersionIds(Set versionIds) {
+ return appServiceMavenVersionMapper.listByAppVersionIds(versionIds);
+ }
+
+ @Override
+ @Transactional
+ public void baseUpdate(AppServiceMavenVersionDTO appServiceMavenVersionDTO) {
+ appServiceMavenVersionMapper.updateByPrimaryKeySelective(appServiceMavenVersionDTO);
+ }
+
+ @Override
+ public void deleteByAppServiceVersionId(Long appServiceVersionId) {
+ Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL);
+
+ AppServiceMavenVersionDTO appServiceMavenVersionDTO = new AppServiceMavenVersionDTO();
+ appServiceMavenVersionDTO.setAppServiceVersionId(appServiceVersionId);
+ appServiceMavenVersionMapper.delete(appServiceMavenVersionDTO);
+
+ }
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java
index 745a1a72bc..c1f1900a38 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java
@@ -9,6 +9,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
+import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.text.DateFormat;
import java.text.ParseException;
@@ -24,7 +25,6 @@
import com.google.common.base.Functions;
import com.google.common.base.Joiner;
import com.google.gson.Gson;
-import io.kubernetes.client.JSON;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.eclipse.jgit.api.Git;
@@ -45,7 +45,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
@@ -83,7 +82,6 @@
import io.choerodon.devops.infra.constant.GitOpsConstants;
import io.choerodon.devops.infra.constant.MiscConstants;
import io.choerodon.devops.infra.constant.PipelineConstants;
-import io.choerodon.devops.infra.constant.ResourceCheckConstant;
import io.choerodon.devops.infra.dto.*;
import io.choerodon.devops.infra.dto.gitlab.*;
import io.choerodon.devops.infra.dto.harbor.HarborRepoConfigDTO;
@@ -136,7 +134,6 @@ public class AppServiceServiceImpl implements AppServiceService {
private static final String DUPLICATE = "duplicate";
private static final String NORMAL_SERVICE = "normal_service";
private static final String SHARE_SERVICE = "share_service";
- private static final String ALL = "all";
private static final String TEMP_MODAL = "\\?version=";
private static final String LOGIN_NAME = "loginName";
private static final String REAL_NAME = "realName";
@@ -154,7 +151,6 @@ public class AppServiceServiceImpl implements AppServiceService {
private static final String CI_FILE_TEMPLATE;
private final Gson gson = new Gson();
- private final JSON json = new JSON();
@Value("${services.gitlab.url}")
private String gitlabUrl;
@Value("${services.gitlab.proxy-url:}")
@@ -258,6 +254,8 @@ public class AppServiceServiceImpl implements AppServiceService {
private DevopsCiPipelineFunctionService devopsCiPipelineFunctionService;
@Autowired
private AppServiceInstanceService appServiceInstanceService;
+ @Autowired
+ private DevopsAppServiceHelmRelService devopsAppServiceHelmRelService;
static {
try (InputStream inputStream = AppServiceServiceImpl.class.getResourceAsStream("/shell/ci.sh")) {
@@ -354,17 +352,13 @@ public AppServiceRepVO query(Long projectId, Long appServiceId) {
shareAppService = true;
}
AppServiceRepVO appServiceRepVO = dtoToRepVo(appServiceDTO);
- List devopsConfigVOS = devopsConfigService.queryByResourceId(appServiceId, APP_SERVICE);
- if (!devopsConfigVOS.isEmpty()) {
- devopsConfigVOS.forEach(devopsConfigVO -> {
- if (devopsConfigVO.getType().equals(CHART)) {
- appServiceRepVO.setChart(devopsConfigVO);
- }
- });
+ DevopsAppServiceHelmRelDTO devopsAppServiceHelmRelDTO = devopsAppServiceHelmRelService.queryByAppServiceId(appServiceId);
+ if (devopsAppServiceHelmRelDTO != null) {
+ appServiceRepVO.setHelmConfigId(devopsAppServiceHelmRelDTO.getHelmConfigId());
}
//url地址拼接
if (appServiceDTO.getGitlabProjectId() != null && !shareAppService) {
- appServiceRepVO.setRepoUrl(concatRepoUrl(organizationDTO.getTenantNum(), projectDTO.getCode(), appServiceDTO.getCode()));
+ appServiceRepVO.setRepoUrl(concatRepoUrl(organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode()));
}
if (shareAppService) {
ProjectDTO shareProjectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId());
@@ -514,7 +508,7 @@ public void deleteAppServiceSage(Long projectId, Long appServiceId) {
Tenant tenant = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
UserAttrDTO userAttrDTO = userAttrService.baseQueryById(TypeUtil.objToLong(GitUserNameUtil.getUserId()));
Integer gitlabUserId = TypeUtil.objToInt(userAttrDTO.getGitlabUserId());
- GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName(tenant.getTenantNum() + "-" + projectDTO.getCode(), appServiceDTO.getCode(), gitlabUserId, false);
+ GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName(tenant.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), appServiceDTO.getCode(), gitlabUserId, false);
if (gitlabProjectDO != null && gitlabProjectDO.getId() != null) {
// 一般情况下,这个关于count的if条件是true,不正常的数据才会false
if (selectCountByGitlabProjectId(gitlabProjectDO.getId()) == 0) {
@@ -554,33 +548,10 @@ public Boolean update(Long projectId, AppServiceUpdateDTO appServiceUpdateDTO) {
appServiceMapper.updatePomFields(appServiceUpdateDTO.getId(), appServiceUpdateDTO.getGroupId(), appServiceUpdateDTO.getArtifactId());
AppServiceDTO appServiceDTO = ConvertUtils.convertObject(appServiceUpdateDTO, AppServiceDTO.class);
- List devopsConfigVOS = new ArrayList<>();
- DevopsConfigVO chart = new DevopsConfigVO();
- if (ObjectUtils.isEmpty(appServiceUpdateDTO.getChart())) {
- chart.setCustom(false);
- } else {
- chart = appServiceUpdateDTO.getChart();
- chart.setCustom(Boolean.TRUE);
- ConfigVO configVO = chart.getConfig();
- CommonExAssertUtil.assertNotNull(configVO, "error.chart.config.null");
- boolean usernameEmpty = StringUtils.isEmpty(configVO.getUserName());
- boolean passwordEmpty = StringUtils.isEmpty(configVO.getPassword());
- if (!usernameEmpty && !passwordEmpty) {
- configVO.setUserName(configVO.getUserName());
- configVO.setPassword(configVO.getPassword());
- configVO.setIsPrivate(Boolean.TRUE);
- } else {
- configVO.setIsPrivate(Boolean.FALSE);
- }
-
- // 用户名和密码要么都为空, 要么都有值
- CommonExAssertUtil.assertTrue(((usernameEmpty && passwordEmpty) || (!usernameEmpty && !passwordEmpty)), "error.chart.auth.invalid");
- }
- chart.setType(CHART);
- devopsConfigVOS.add(chart);
//处理helm仓库的配置
- devopsConfigService.operate(appServiceId, APP_SERVICE, devopsConfigVOS);
+ devopsAppServiceHelmRelService.handleRel(appServiceUpdateDTO.getId(), appServiceUpdateDTO.getHelmConfigId());
+
//保存应用服务与harbor仓库的关系
if (!Objects.isNull(appServiceUpdateDTO.getHarborRepoConfigDTO())) {
if (DEFAULT_REPO.equals(appServiceUpdateDTO.getHarborRepoConfigDTO().getType())) {
@@ -591,10 +562,10 @@ public Boolean update(Long projectId, AppServiceUpdateDTO appServiceUpdateDTO) {
rdupmClient.saveRelationByService(projectId, appServiceDTO.getId(), appServiceUpdateDTO.getHarborRepoConfigDTO().getRepoId());
}
}
- if (appServiceUpdateDTO.getChart() != null) {
- DevopsConfigDTO chartConfig = devopsConfigService.queryRealConfig(appServiceId, APP_SERVICE, CHART, AUTHTYPE_PULL);
- appServiceDTO.setChartConfigId(chartConfig.getId());
- }
+// if (appServiceUpdateDTO.getChart() != null) {
+// DevopsConfigDTO chartConfig = devopsConfigService.queryRealConfig(appServiceId, APP_SERVICE, CHART, AUTHTYPE_PULL);
+// appServiceDTO.setChartConfigId(chartConfig.getId());
+// }
if (!oldAppServiceDTO.getName().equals(appServiceUpdateDTO.getName())) {
checkName(oldAppServiceDTO.getProjectId(), appServiceDTO.getName());
@@ -727,14 +698,6 @@ public Page pageByOptions(Long projectId, Boolean isActive, Boo
List userIds = appServiceDTOList.stream().map(AppServiceDTO::getCreatedBy).collect(toList());
userIds.addAll(appServiceDTOList.stream().map(AppServiceDTO::getLastUpdatedBy).collect(toList()));
List distinctIds = userIds.stream().distinct().collect(toList());
-
-// Future> userFuture = baseServiceClientOperator.listUsersByIdsCollapse(new ArrayList<>(distinctIds));
-// List userResult;
-// try {
-// userResult = userFuture.get();
-// } catch (InterruptedException | ExecutionException e) {
-// throw new CommonException("Failed to get user", e);
-// }
List userResult = baseServiceClientOperator.listUsersByIds(distinctIds);
Map users = userResult.stream().collect(Collectors.toMap(IamUserDTO::getId, u -> u));
@@ -777,7 +740,7 @@ public Page pageInternalByOptionsWithAccessLevel(Long projectId
@Override
public List listByActive(Long projectId) {
Long userId = DetailsHelper.getUserDetails().getUserId();
- ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId, false, false, false);
+ ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId, false, false, false, false, false);
boolean projectOwner = permissionHelper.isGitlabProjectOwnerOrGitlabAdmin(projectId, userId);
List applicationDTOServiceList;
if (projectOwner) {
@@ -939,7 +902,7 @@ public void operationApplication(DevOpsAppServicePayload devOpsAppServicePayload
ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectBasicInfoById(devopsProjectDTO.getIamProjectId());
Tenant organizationDTO = baseServiceClientOperator.queryOrganizationBasicInfoById(projectDTO.getOrganizationId());
GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator
- .queryProjectByName(organizationDTO.getTenantNum() + "-" + projectDTO.getCode(), appServiceDTO.getCode(),
+ .queryProjectByName(organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), appServiceDTO.getCode(),
devOpsAppServicePayload.getUserId(), false);
Integer gitlabProjectId = gitlabProjectDO.getId();
if (gitlabProjectId == null) {
@@ -962,7 +925,7 @@ public void operationApplication(DevOpsAppServicePayload devOpsAppServicePayload
LOGGER.info("The template app service id is not null: {}, start to clone template repository", devOpsAppServicePayload.getTemplateAppServiceId());
String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl;
- String newGroupName = organizationDTO.getTenantNum() + "-" + projectDTO.getCode();
+ String newGroupName = organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode();
String repositoryUrl = repoUrl + newGroupName + "/" + appServiceDTO.getCode() + GIT;
cloneAndPushCode(appServiceDTO, userAttrDTO, devOpsAppServicePayload.getTemplateAppServiceId(), devOpsAppServicePayload.getTemplateAppServiceVersionId(), repositoryUrl, newGroupName);
}
@@ -1027,7 +990,7 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer
Tenant organizationDTO = baseServiceClientOperator.queryOrganizationBasicInfoById(projectDTO.getOrganizationId());
GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName(
- organizationDTO.getTenantNum() + "-" + projectDTO.getCode(),
+ organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(),
appServiceDTO.getCode(),
devOpsAppServiceImportPayload.getUserId(),
false);
@@ -1050,7 +1013,7 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer
gitlabServiceClientOperator.updateProjectCiConfigPath(gitlabProjectDO.getId(), TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), GitOpsConstants.TEMP_CI_CONFIG_PATH);
if (devOpsAppServiceImportPayload.getTemplate() != null && devOpsAppServiceImportPayload.getTemplate()
- && !StringUtils.isEmpty(devOpsAppServiceImportPayload.getRepositoryUrl())) {
+ && StringUtils.hasText(devOpsAppServiceImportPayload.getRepositoryUrl())) {
String[] tempUrl = devOpsAppServiceImportPayload.getRepositoryUrl().split(TEMP_MODAL);
if (tempUrl.length < 2) {
throw new CommonException("error.temp.git.url");
@@ -1059,11 +1022,11 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer
String repositoryUrl = tempUrl[0];
externalGitUtil.cloneAppMarket(applicationDir, templateVersion, repositoryUrl, devOpsAppServiceImportPayload.getAccessToken());
File applicationWorkDir = new File(gitUtil.getWorkingDirectory(applicationDir));
- replaceParams(appServiceDTO.getCode(), organizationDTO.getTenantNum() + "-" + projectDTO.getCode(), applicationDir, null, null, true);
+ replaceParams(appServiceDTO.getCode(), organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), applicationDir, null, null, true);
Git newGit = gitUtil.initGit(applicationWorkDir);
String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl;
appServiceDTO.setRepoUrl(repoUrl + organizationDTO.getTenantNum()
- + "-" + projectDTO.getCode() + "/" + appServiceDTO.getCode() + ".git");
+ + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode() + ".git");
String accessToken = getToken(devOpsAppServiceImportPayload.getGitlabProjectId(), applicationDir, userAttrDTO);
try {
gitUtil.commitAndPushForMaster(newGit, appServiceDTO.getRepoUrl(), templateVersion, accessToken);
@@ -1103,15 +1066,15 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer
String pullToken = getToken(devOpsAppServiceImportPayload.getGitlabProjectId(), applicationDir, gitlabAdminDTO);
git = gitUtil.cloneRepository(applicationWorkDir, appTemplateDTO.getGitlabUrl(), pullToken);
}
- replaceParams(appServiceDTO.getCode(), organizationDTO.getTenantNum() + "-" + projectDTO.getCode(), applicationWorkPath, oldAppServiceCode, devopsAppTemplateService.getTemplateGroupPath(appTemplateDTO.getId()), false);
+ replaceParams(appServiceDTO.getCode(), organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), applicationWorkPath, oldAppServiceCode, devopsAppTemplateService.getTemplateGroupPath(appTemplateDTO.getId()), false);
String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl;
appServiceDTO.setRepoUrl(repoUrl + organizationDTO.getTenantNum()
- + "-" + projectDTO.getCode() + "/" + appServiceDTO.getCode() + ".git");
+ + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode() + ".git");
String accessToken = getToken(devOpsAppServiceImportPayload.getGitlabProjectId(), applicationDir, userAttrDTO);
try {
gitUtil.commitAndPushForMaster(git, appServiceDTO.getRepoUrl(), "init app from template", accessToken);
} catch (Exception e) {
- throw e;
+ throw new CommonException("init app from template failed", e);
} finally {
releaseResources(applicationWorkDir, git);
}
@@ -1122,7 +1085,7 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer
// 设置Application对应的gitlab项目的仓库地址
String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl;
appServiceDTO.setRepoUrl(repoUrl + organizationDTO.getTenantNum()
- + "-" + projectDTO.getCode() + "/" + appServiceDTO.getCode() + ".git");
+ + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode() + ".git");
File applicationWorkDir = new File(gitUtil.getWorkingDirectory(applicationDir));
@@ -1240,11 +1203,10 @@ public String queryFile(String token) {
try {
ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId());
Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
-// DevopsConfigDTO harborConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, HARBOR, AUTHTYPE_PUSH);
DevopsConfigDTO harborConfigDTO = harborService.queryRepoConfigToDevopsConfig(projectDTO.getId(), appServiceDTO.getId(), AUTHTYPE_PUSH);
ConfigVO harborProjectConfig = gson.fromJson(harborConfigDTO.getConfig(), ConfigVO.class);
Map params = new HashMap<>();
- String groupName = organizationDTO.getTenantNum() + "-" + projectDTO.getCode();
+ String groupName = organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode();
params.put("{{ SONAR_GROUP_NAME }}", groupName);
if (harborProjectConfig.getProject() != null) {
groupName = harborProjectConfig.getProject();
@@ -1259,16 +1221,17 @@ public String queryFile(String token) {
params.put("{{ SONAR_LOGIN }}", "");
params.put("{{ SONAR_URL }}", "");
}
- params.put("{{ SONAR_PROJECT_KEY }}", organizationDTO.getTenantNum() + "-" + projectDTO.getCode() + ":" + appServiceDTO.getCode());
+ params.put("{{ SONAR_PROJECT_KEY }}", organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + ":" + appServiceDTO.getCode());
params.put("{{ GROUP_NAME }}", groupName);
params.put("{{ PROJECT_NAME }}", appServiceDTO.getCode());
- params.put("{{ PRO_CODE }}", projectDTO.getCode());
+ params.put("{{ PRO_CODE }}", projectDTO.getDevopsComponentCode());
params.put("{{ ORG_CODE }}", organizationDTO.getTenantNum());
params.put("{{ DOCKER_REGISTRY }}", dockerUrl);
params.put("{{ DOCKER_USERNAME }}", "'" + harborProjectConfig.getUserName() + "'");
params.put("{{ DOCKER_PASSWORD }}", harborProjectConfig.getPassword());
params.put("{{ HARBOR_CONFIG_ID }}", harborConfigDTO.getId().toString());
params.put("{{ REPO_TYPE }}", harborConfigDTO.getType());
+ params.put("{{ CHOERODON_URL }}", gatewayUrl);
String ciStr = FileUtil.replaceReturnString(CI_FILE_TEMPLATE, params);
StringBuilder stringBuilder = new StringBuilder(ciStr);
@@ -1447,10 +1410,7 @@ public AppServiceRepVO queryByCode(Long projectId, String code) {
}
@Override
- public Boolean checkChart(String url, @Nullable String username, @Nullable String password) {
- if (!url.endsWith("/")) {
- throw new CommonException("error.base.url.must.end");
- }
+ public Boolean checkChartOnOrganization(String url, @Nullable String username, @Nullable String password) {
url = url.endsWith("/") ? url.substring(0, url.length() - 1) : url;
ConfigurationProperties configurationProperties = new ConfigurationProperties();
configurationProperties.setBaseUrl(url);
@@ -1491,6 +1451,58 @@ public Boolean checkChart(String url, @Nullable String username, @Nullable Strin
return true;
}
+ @Override
+ public CheckInfoVO checkChart(Long projectId, String url, @Nullable String username, @Nullable String password) {
+ CheckInfoVO checkInfoVO = new CheckInfoVO();
+ url = url.endsWith("/") ? url.substring(0, url.length() - 1) : url;
+ URL processedUrl;
+ try {
+ processedUrl = new URL(url);
+ } catch (Exception e) {
+ checkInfoVO.setSuccess(false);
+ checkInfoVO.setErrMsg("helm仓库地址不正确");
+ return checkInfoVO;
+ }
+ ConfigurationProperties configurationProperties = new ConfigurationProperties();
+ configurationProperties.setBaseUrl(processedUrl.getProtocol() + "://" + processedUrl.getHost());
+ configurationProperties.setType(CHART);
+ if (username != null && password != null) {
+ configurationProperties.setUsername(username);
+ configurationProperties.setPassword(password);
+ }
+ ChartClient chartClient = null;
+
+ Response result;
+ try {
+ String[] params = processedUrl.getPath().split("/");
+ if (params.length != 3) {
+ checkInfoVO.setSuccess(false);
+ checkInfoVO.setErrMsg("helm仓库地址无效,应该类似:http://localhost:8080/org1/repoa");
+ return checkInfoVO;
+ }
+ Retrofit retrofit = RetrofitHandler.initRetrofit(configurationProperties, new RetrofitHandler.StringConverter());
+ chartClient = retrofit.create(ChartClient.class);
+ Call getIndex = chartClient.getIndex(params[1], params[2]);
+ result = getIndex.execute();
+ } catch (Exception ex) {
+ checkInfoVO.setSuccess(false);
+ checkInfoVO.setErrMsg("无法访问helm仓库:" + ex.getMessage());
+ return checkInfoVO;
+ }
+ if (result != null && result.isSuccessful()) {
+ checkInfoVO.setSuccess(true);
+ return checkInfoVO;
+ }
+ if (result != null && (result.code() > 400 && result.code() < 500)) {
+ checkInfoVO.setSuccess(false);
+ checkInfoVO.setErrMsg("账号或密码不正确");
+ return checkInfoVO;
+ }
+ checkInfoVO.setSuccess(false);
+ checkInfoVO.setErrMsg("测试连接失败");
+ return checkInfoVO;
+ }
+
@Override
public SonarContentsVO getSonarContent(Long projectId, Long appServiceId) {
//没有使用sonarqube直接返回空对象
@@ -1506,7 +1518,7 @@ public SonarContentsVO getSonarContent(Long projectId, Long appServiceId) {
//初始化sonarClient
SonarClient sonarClient = RetrofitHandler.getSonarClient(sonarqubeUrl, SONAR, userName, password);
- String key = String.format(SONAR_KEY, organization.getTenantNum(), projectDTO.getCode(), appServiceDTO.getCode());
+ String key = String.format(SONAR_KEY, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode());
sonarqubeUrl = sonarqubeUrl.endsWith("/") ? sonarqubeUrl : sonarqubeUrl + "/";
//校验sonarqube地址是否正确
@@ -1851,7 +1863,7 @@ public SonarTableVO getSonarTable(Long projectId, Long appServiceId, String type
ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId);
Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
SonarClient sonarClient = RetrofitHandler.getSonarClient(sonarqubeUrl, SONAR, userName, password);
- String key = String.format(SONAR_KEY, organizationDTO.getTenantNum(), projectDTO.getCode(), applicationDTO.getCode());
+ String key = String.format(SONAR_KEY, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), applicationDTO.getCode());
sonarqubeUrl = sonarqubeUrl.endsWith("/") ? sonarqubeUrl : sonarqubeUrl + "/";
Map queryMap = new HashMap<>();
queryMap.put("component", key);
@@ -2144,7 +2156,7 @@ public List createAppService(Long projectId, List groupDTOS = gitlabServiceClientOperator.queryGroupWithStatisticsByName(path, TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), Boolean.TRUE);
if (!CollectionUtils.isEmpty(groupDTOS)) {
List projectGroups = groupDTOS.stream().filter(groupDTO -> org.apache.commons.lang3.StringUtils.equalsIgnoreCase(groupDTO.getPath(), path)).collect(toList());
@@ -2423,19 +2435,6 @@ public Boolean checkDeleteEnvApp(Long appServiceId, Long envId) {
return devopsEnvApplicationService.checkCanDelete(appServiceId, envId);
}
- @Override
- public List listByProjectIdAndGAV(Long projectId, String groupId, String artifactId) {
- Assert.notNull(projectId, ResourceCheckConstant.ERROR_PROJECT_ID_IS_NULL);
- Assert.notNull(groupId, ResourceCheckConstant.ERROR_APP_GROUP_ID_IS_NULL);
- Assert.notNull(artifactId, ResourceCheckConstant.ERROR_APP_ARTIFACT_ID_IS_NULL);
-
- AppServiceDTO appServiceDTO = new AppServiceDTO();
- appServiceDTO.setProjectId(projectId);
- appServiceDTO.setGroupId(groupId);
- appServiceDTO.setArtifactId(artifactId);
- return appServiceMapper.select(appServiceDTO);
- }
-
private void downloadSourceCodeAndPush(AppServiceDTO appServiceDTO, UserAttrDTO userAttrDTO, AppServiceImportPayload appServiceImportPayload, String repositoryUrl, String newGroupName) {
// TODO: 2021/3/3 方法待抽取
@@ -2545,7 +2544,7 @@ private void cloneAndPushCode(AppServiceDTO appServiceDTO, UserAttrDTO userAttrD
String oldGroup;
ProjectDTO oldProjectDTO = baseServiceClientOperator.queryIamProjectById(oldAppServiceDTO.getProjectId());
Tenant oldOrganizationDTO = baseServiceClientOperator.queryOrganizationById(oldProjectDTO.getOrganizationId());
- oldGroup = oldOrganizationDTO.getTenantNum() + "-" + oldProjectDTO.getCode();
+ oldGroup = oldOrganizationDTO.getTenantNum() + "-" + oldProjectDTO.getDevopsComponentCode();
//拉取代码
// 获取push代码所需的access token
String applicationDir = APPLICATION + System.currentTimeMillis();
@@ -2694,7 +2693,7 @@ public String getGitlabUrl(Long projectId, Long appServiceId) {
Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
String urlSlash = gitlabUrl.endsWith("/") ? "" : "/";
return gitlabUrl + urlSlash
- + organizationDTO.getTenantNum() + "-" + projectDTO.getCode() + "/"
+ + organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + "/"
+ appServiceDTO.getCode();
}
return "";
@@ -2901,7 +2900,7 @@ private List listAllAppServicesHavingVersion(Long projectId,
ProjectDTO projectDTO = projectMap.get(entry.getKey());
AppServiceGroupVO appServiceGroupVO = new AppServiceGroupVO();
appServiceGroupVO.setName(projectDTO.getName());
- appServiceGroupVO.setCode(projectDTO.getCode());
+ appServiceGroupVO.setCode(projectDTO.getDevopsComponentCode());
appServiceGroupVO.setId(projectDTO.getId());
appServiceGroupVO.setAppServiceList(entry.getValue());
appServiceGroupList.add(appServiceGroupVO);
@@ -3109,8 +3108,8 @@ public Page listAppServiceByIds(Set ids, Boolean doPage,
rep.setGitlabProjectId(TypeUtil.objToLong(app.getGitlabProjectId()));
ProjectDTO project = projectDTOMap.get(rep.getProjectId());
Tenant org = orgMap.get(project.getOrganizationId());
- rep.setRepoUrl(concatRepoUrl(org.getTenantNum(), project.getCode(), rep.getCode()));
- rep.setSshRepositoryUrl(GitUtil.getAppServiceSshUrl(gitlabSshUrl, org.getTenantNum(), project.getCode(), rep.getCode()));
+ rep.setRepoUrl(concatRepoUrl(org.getTenantNum(), project.getDevopsComponentCode(), rep.getCode()));
+ rep.setSshRepositoryUrl(GitUtil.getAppServiceSshUrl(gitlabSshUrl, org.getTenantNum(), project.getDevopsComponentCode(), rep.getCode()));
return rep;
}).collect(toList());
@@ -3280,7 +3279,7 @@ public String calculateGitlabProjectUrlWithSuffix(Long appServiceId) {
ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId());
Tenant tenant = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl;
- return String.format(GitOpsConstants.REPO_URL_TEMPLATE_WITHOUT_SUFFIX, repoUrl, tenant.getTenantNum(), projectDTO.getCode(), appServiceDTO.getCode());
+ return String.format(GitOpsConstants.REPO_URL_TEMPLATE_WITHOUT_SUFFIX, repoUrl, tenant.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode());
}
/**
@@ -3304,9 +3303,9 @@ private void releaseResources(File applicationWorkDir, Git repositoryGit) {
private String getApplicationToken(String token, Integer projectId, Integer userId) {
List variables = gitlabServiceClientOperator.listAppServiceVariable(projectId, userId);
if (variables.isEmpty()) {
- gitlabServiceClientOperator.createProjectVariable(projectId, "Token", token, false, userId);
+ gitlabServiceClientOperator.createProjectVariable(projectId, GITLAB_VARIABLE_TOKEN, token, false, userId);
//添加跳过证书扫描的变量
- gitlabServiceClientOperator.createProjectVariable(projectId, "TRIVY_INSECURE", "true", false, userId);
+ gitlabServiceClientOperator.createProjectVariable(projectId, GITLAB_VARIABLE_TRIVY_INSECURE, "true", false, userId);
return token;
} else {
return variables.get(0).getValue();
@@ -3433,7 +3432,7 @@ public void createAppServiceForTransfer(AppServiceTransferVO appServiceTransferV
// 1. 迁移gitlab代码库
if (!oldProjectDTO.getNamespace().getId().equals(appServiceTransferVO.getGitlabGroupId())) {
- GitlabProjectDTO gitlabProjectDTO = gitlabServiceClientOperator.transferProject(appServiceTransferVO.getGitlabProjectId(),
+ gitlabServiceClientOperator.transferProject(appServiceTransferVO.getGitlabProjectId(),
appServiceTransferVO.getGitlabGroupId(),
userId);
}
@@ -3565,11 +3564,11 @@ private void initApplicationParams(Long projectId, List applicati
private void initApplicationParams(ImmutableProjectInfoVO info, AppServiceDTO appService, String urlSlash) {
if (appService.getExternalConfigId() == null) {
if (appService.getGitlabProjectId() != null) {
- String projectCode = info.getProjCode();
+ String devopsComponentCode = info.getDevopsComponentCode();
String tenantCode = info.getTenantNum();
- appService.setSshRepositoryUrl(GitUtil.getAppServiceSshUrl(gitlabSshUrl, tenantCode, projectCode, appService.getCode()));
+ appService.setSshRepositoryUrl(GitUtil.getAppServiceSshUrl(gitlabSshUrl, tenantCode, devopsComponentCode, appService.getCode()));
appService.setRepoUrl(
- gitlabUrl + urlSlash + tenantCode + "-" + projectCode + "/"
+ gitlabUrl + urlSlash + tenantCode + "-" + devopsComponentCode + "/"
+ appService.getCode() + ".git");
}
} else {
@@ -3676,7 +3675,7 @@ public AppServiceRepVO queryOtherProjectAppServiceWithRepositoryInfo(Long projec
@Override
public Page listAppServiceUnderOrg(Long projectId, Long appServiceId, String searchParam, PageRequest pageRequest) {
CustomUserDetails userDetails = DetailsHelper.getUserDetails();
- ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId, false, false, false);
+ ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId, false, false, false, false, false);
UserAppServiceIdsVO userAppServiceIdsVO = rducmClientOperator.getAppServiceIds(projectDTO.getOrganizationId(), userDetails.getUserId());
// 待查询的appService列表
@@ -3859,7 +3858,9 @@ public Boolean testConnection(AppExternalConfigDTO appExternalConfigDTO) {
// 校验账户权限
appExternalConfigDTO.setRepositoryUrl(appExternalConfigDTO.getRepositoryUrl().replace(".git", ""));
GitlabProjectDTO gitlabProjectDTO = gitlabServiceClientOperator.queryExternalProjectByCode(appExternalConfigDTO);
- LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>gitlabProjectDTO is {}<<<<<<<<<<<<<<<<<<<<<<<<<<<<", JsonHelper.marshalByJackson(gitlabProjectDTO));
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>gitlabProjectDTO is {}<<<<<<<<<<<<<<<<<<<<<<<<<<<<", JsonHelper.marshalByJackson(gitlabProjectDTO));
+ }
if (gitlabProjectDTO == null || gitlabProjectDTO.getId() == null) {
flag = false;
}
@@ -3878,16 +3879,15 @@ public Set listExternalAppIdByProjectId(Long projectId) {
@Override
public List queryAppByProjectIds(List projectIds) {
if (CollectionUtils.isEmpty(projectIds)) {
- return Collections.EMPTY_LIST;
+ return Collections.emptyList();
}
- List appServiceDTOS = appServiceMapper.listByActiveAndProjects(projectIds);
- return appServiceDTOS;
+ return appServiceMapper.listByActiveAndProjects(projectIds);
}
@Override
public Page pageByActive(Long projectId, Long targetProjectId, Long targetAppServiceId, PageRequest pageRequest, String param) {
Long userId = DetailsHelper.getUserDetails().getUserId();
- ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(targetProjectId, false, false, false);
+ ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(targetProjectId, false, false, false, false, false);
boolean projectOwner = permissionHelper.isGitlabProjectOwnerOrGitlabAdmin(targetProjectId, userId);
Page appServiceDTOPage;
if (projectOwner) {
@@ -3917,4 +3917,12 @@ public HarborRepoConfigDTO queryRepoConfigById(Long projectId, Long appServiceId
harborRepoConfig.setType(selectedHarborConfig.getRepoType());
return harborRepoConfig;
}
+
+ @Override
+ public List listProjectIdsByAppIds(List appIds) {
+ if (ObjectUtils.isEmpty(appIds)) {
+ return new ArrayList<>();
+ }
+ return appServiceMapper.listProjectIdsByAppIds(appIds);
+ }
}
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceShareResourceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceShareResourceServiceImpl.java
index d8c1315f3e..dcfd8b8499 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceShareResourceServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceShareResourceServiceImpl.java
@@ -1,13 +1,12 @@
package io.choerodon.devops.app.service.impl;
-import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
import io.choerodon.core.exception.CommonException;
import io.choerodon.devops.app.service.AppServiceShareResourceService;
import io.choerodon.devops.infra.dto.AppServiceShareResourceDTO;
import io.choerodon.devops.infra.mapper.AppShareResourceMapper;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
/**
* Created by Sheep on 2019/7/12.
@@ -34,11 +33,4 @@ public void baseDelete(Long shareId, Long projectId) {
applicationShareResourceMapper.deleteByPrimaryKey(appServiceShareResourceDTO);
}
- @Override
- public List baseListByShareId(Long shareId) {
- AppServiceShareResourceDTO appServiceShareResourceDTO = new AppServiceShareResourceDTO();
- appServiceShareResourceDTO.setShareId(shareId);
- return applicationShareResourceMapper.select(appServiceShareResourceDTO);
- }
-
}
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java
index 643100d1d3..67da1c4f32 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java
@@ -1,6 +1,6 @@
package io.choerodon.devops.app.service.impl;
-import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.*;
+import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.DEFAULT_REPO;
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;
@@ -9,8 +9,8 @@
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
+import java.util.function.Function;
import java.util.stream.Collectors;
-import javax.annotation.Nullable;
import com.google.gson.Gson;
import org.apache.commons.lang3.StringUtils;
@@ -18,11 +18,18 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Lazy;
+import org.springframework.core.io.ByteArrayResource;
+import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.HttpClientErrorException;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import io.choerodon.asgard.saga.annotation.Saga;
@@ -33,6 +40,9 @@
import io.choerodon.core.exception.FeignException;
import io.choerodon.core.iam.ResourceLevel;
import io.choerodon.devops.api.vo.*;
+import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO;
+import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO;
+import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO;
import io.choerodon.devops.api.vo.chart.ChartTagVO;
import io.choerodon.devops.app.eventhandler.constants.SagaTopicCodeConstants;
import io.choerodon.devops.app.service.*;
@@ -44,13 +54,11 @@
import io.choerodon.devops.infra.dto.iam.Tenant;
import io.choerodon.devops.infra.enums.ProjectConfigType;
import io.choerodon.devops.infra.exception.DevopsCiInvalidException;
-import io.choerodon.devops.infra.feign.RdupmClient;
import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator;
import io.choerodon.devops.infra.mapper.*;
import io.choerodon.devops.infra.util.*;
import io.choerodon.mybatis.pagehelper.PageHelper;
import io.choerodon.mybatis.pagehelper.domain.PageRequest;
-import io.choerodon.mybatis.pagehelper.domain.Sort;
@Service
public class AppServiceVersionServiceImpl implements AppServiceVersionService {
@@ -71,7 +79,7 @@ public class AppServiceVersionServiceImpl implements AppServiceVersionService {
private static final String CHART = "chart";
private static final String HARBOR_DEFAULT = "harbor_default";
private static final String ERROR_VERSION_INSERT = "error.version.insert";
- private static final String ERROR_VERSION_UPDATE="error.version.update";
+ private static final String ERROR_VERSION_UPDATE = "error.version.update";
@Value("${services.gitlab.url}")
private String gitlabUrl;
@@ -83,17 +91,8 @@ public class AppServiceVersionServiceImpl implements AppServiceVersionService {
@Autowired
private AppServiceVersionValueService appServiceVersionValueService;
@Autowired
- @Lazy
- private AppServiceInstanceService appServiceInstanceService;
- @Autowired
- private DevopsEnvironmentService devopsEnvironmentService;
- @Autowired
- private DevopsEnvCommandService devopsEnvCommandService;
- @Autowired
private DevopsGitlabCommitService devopsGitlabCommitService;
@Autowired
- private ChartUtil chartUtil;
- @Autowired
private AppServiceVersionMapper appServiceVersionMapper;
@Autowired
private AppServiceVersionReadmeMapper appServiceVersionReadmeMapper;
@@ -106,18 +105,27 @@ public class AppServiceVersionServiceImpl implements AppServiceVersionService {
@Autowired
private DevopsCiPipelineChartService devopsCiPipelineChartService;
@Autowired
- private DevopsCiPipelineService devopsCiPipelineService;
+ private AppServiceShareRuleMapper appServiceShareRuleMapper;
@Autowired
- private RdupmClient rdupmClient;
+ private AppServiceInstanceMapper appServiceInstanceMapper;
@Autowired
- private DevopsConfigMapper devopsConfigMapper;
+ private CiPipelineImageService ciPipelineImageService;
@Autowired
- private DevopsRegistrySecretMapper devopsRegistrySecretMapper;
+ private AppServiceHelmVersionService appServiceHelmVersionService;
@Autowired
- private AppServiceShareRuleMapper appServiceShareRuleMapper;
+ private AppServiceImageVersionService appServiceImageVersionService;
@Autowired
- private AppServiceInstanceMapper appServiceInstanceMapper;
+ private AppServiceMavenVersionService appServiceMavenVersionService;
+ @Autowired
+ private CiPipelineMavenService ciPipelineMavenService;
+ @Autowired
+ private CiPipelineAppVersionService ciPipelineAppVersionService;
+ @Autowired
+ private DevopsHelmConfigService devopsHelmConfigService;
+ @Autowired
+ @Qualifier(value = "restTemplateForIp")
+ private RestTemplate restTemplate;
@Autowired
private TransactionalProducer producer;
@@ -139,14 +147,63 @@ public void create(String image,
Long gitlabPipelineId,
String jobName) {
try {
- AppServiceVersionDTO appServiceVersionDTO = doCreate(image,
- TypeUtil.objToLong(harborConfigId),
- repoType,
- token,
- version,
- commit,
- files,
- ref);
+
+ AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token);
+
+ AppServiceVersionDTO appServiceVersionDTO = saveAppVersion(version, commit, ref, gitlabPipelineId, appServiceDTO.getId());
+
+ ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId());
+ Tenant organization = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
+
+ // 查询helm仓库配置id
+ DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigService.queryAppConfig(appServiceDTO.getId(), projectDTO.getId(), organization.getTenantId());
+
+ String repository;
+ if (ResourceLevel.PROJECT.value().equals(devopsHelmConfigDTO.getResourceType())) {
+ repository = devopsHelmConfigDTO.getUrl();
+ } else {
+ repository = devopsHelmConfigDTO.getUrl().endsWith("/") ? devopsHelmConfigDTO.getUrl() + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" : devopsHelmConfigDTO.getUrl() + "/" + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/";
+ }
+ // 取commit的一部分作为文件路径
+ String commitPart = commit == null ? "" : commit.substring(0, 8);
+ String storeFilePath = String.format(STORE_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart);
+ String destFilePath = String.format(DESTINATION_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart);
+ String path = FileUtil.multipartFileToFile(storeFilePath, files);
+
+ uploadChart(files, devopsHelmConfigDTO, repository);
+
+ // 解析chart包中的values文件
+ String values = getValues(storeFilePath, destFilePath, path);
+
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId());
+ if (appServiceHelmVersionDTO == null) {
+ AppServiceVersionValueDTO appServiceVersionValueDTO = new AppServiceVersionValueDTO();
+ appServiceVersionValueDTO.setValue(values);
+ appServiceVersionValueService.baseCreate(appServiceVersionValueDTO);
+
+ AppServiceVersionReadmeDTO appServiceVersionReadmeDTO = new AppServiceVersionReadmeDTO();
+ appServiceVersionReadmeDTO.setReadme(FileUtil.getReadme(destFilePath));
+ appServiceVersionReadmeMapper.insert(appServiceVersionReadmeDTO);
+
+ appServiceHelmVersionDTO = new AppServiceHelmVersionDTO();
+ appServiceHelmVersionDTO.setAppServiceVersionId(appServiceVersionDTO.getId());
+ appServiceHelmVersionDTO.setValueId(appServiceVersionValueDTO.getId());
+ appServiceHelmVersionDTO.setReadmeValueId(appServiceVersionReadmeDTO.getId());
+ appServiceHelmVersionDTO.setHarborRepoType(repoType);
+ appServiceHelmVersionDTO.setHarborConfigId(TypeUtil.objToLong(harborConfigId));
+ appServiceHelmVersionDTO.setHelmConfigId(devopsHelmConfigDTO.getId());
+ appServiceHelmVersionDTO.setRepository(repository);
+ appServiceHelmVersionDTO.setImage(image);
+
+ appServiceHelmVersionService.create(appServiceHelmVersionDTO);
+ } else {
+ updateValues(appServiceHelmVersionDTO.getValueId(), values);
+ }
+
+ FileUtil.deleteDirectories(destFilePath, storeFilePath);
+ //生成版本成功后发送webhook json
+ sendNotificationService.sendWhenAppServiceVersion(appServiceVersionDTO, appServiceDTO, projectDTO);
+
// 保存流水线chart版本信息
if (gitlabPipelineId != null && StringUtils.isNotBlank(jobName)) {
Long appServiceId = appServiceVersionDTO.getAppServiceId();
@@ -170,48 +227,59 @@ public void create(String image,
}
- private AppServiceVersionDTO doCreate(String image, Long harborConfigId, String repoType, String token, String version, String commit, MultipartFile files, String ref) {
- AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token);
-
- AppServiceVersionValueDTO appServiceVersionValueDTO = new AppServiceVersionValueDTO();
- AppServiceVersionDTO newVersion = new AppServiceVersionDTO();
- ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId());
- Tenant organization = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
- AppServiceVersionDTO oldVersionInDb = baseQueryByAppServiceIdAndVersion(appServiceDTO.getId(), version);
- newVersion.setAppServiceId(appServiceDTO.getId());
- newVersion.setImage(image);
- newVersion.setCommit(commit);
- newVersion.setRef(ref);
- newVersion.setVersion(version);
- //根据配置id 查询仓库是自定义还是默认
-// HarborRepoDTO harborRepoDTO = rdupmClient.queryHarborRepoConfig(appServiceDTO.getProjectId(), appServiceDTO.getId()).getBody();
-// if (Objects.isNull(harborRepoDTO)
-// || Objects.isNull(harborRepoDTO.getHarborRepoConfig())
-// || harborRepoDTO.getHarborRepoConfig().getRepoId().longValue() != harborConfigId) {
-// throw new DevopsCiInvalidException("error.harbor.configuration.expiration");
-// }
- newVersion.setHarborConfigId(harborConfigId);
- newVersion.setRepoType(repoType);
-
- // 查询helm仓库配置id
- DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, CHART, AUTH_TYPE_PULL);
- ConfigVO helmConfig = GSON.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class);
- String helmUrl = helmConfig.getUrl();
- newVersion.setHelmConfigId(devopsConfigDTO.getId());
-
- newVersion.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getCode() + "/");
-
- // 取commit的一部分作为文件路径
- String commitPart = commit == null ? "" : commit.substring(0, 8);
+ /**
+ * 上传chart包到chartmuserm
+ *
+ * @param files
+ * @param devopsHelmConfigDTO
+ * @param repository
+ */
+ private void uploadChart(MultipartFile files, DevopsHelmConfigDTO devopsHelmConfigDTO, String repository) {
+ MultiValueMap params = new LinkedMultiValueMap<>();
+ ByteArrayResource fileAsResource = null;
+ try {
+ byte[] bytes = files.getBytes();
- String storeFilePath = String.format(STORE_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart);
- String destFilePath = String.format(DESTINATION_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart);
+ fileAsResource = new ByteArrayResource(bytes) {
+ @Override
+ public String getFilename() {
+ return files.getOriginalFilename();
+ }
- String path = FileUtil.multipartFileToFile(storeFilePath, files);
+ @Override
+ public long contentLength() {
+ return files.getSize();
+ }
+ };
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ params.add("chart", fileAsResource);
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.MULTIPART_FORM_DATA);
+ if (devopsHelmConfigDTO.getRepoPrivate()) {
+ String credentials = devopsHelmConfigDTO.getUsername() + ":"
+ + devopsHelmConfigDTO.getPassword();
+ headers.add("Authorization", "Basic " + Base64.getEncoder().encodeToString(credentials.getBytes()));
+ }
+ HttpEntity> requestEntity = new HttpEntity<>(params, headers);
- // 上传chart包到 chart museum
- chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword());
+ ResponseEntity entity = null;
+ try {
+ entity = restTemplate.postForEntity(repository + "/api/charts", requestEntity, String.class);
+ if (!entity.getStatusCode().is2xxSuccessful() && !HttpStatus.CONFLICT.equals(entity.getStatusCode())) {
+ throw new CommonException("error.upload.chart");
+ }
+ } catch (HttpClientErrorException e) {
+ if (!HttpStatus.CONFLICT.equals(e.getStatusCode())) {
+ throw new CommonException("error.upload.chart", e);
+ }
+ } catch (RestClientException e) {
+ throw new CommonException(e);
+ }
+ }
+ private String getValues(String storeFilePath, String destFilePath, String path) {
FileUtil.unTarGZ(path, destFilePath);
// 使用深度优先遍历查找文件, 避免查询到子chart的values值
@@ -236,38 +304,114 @@ private AppServiceVersionDTO doCreate(String image, Long harborConfigId, String
FileUtil.deleteDirectories(storeFilePath, destFilePath);
throw new CommonException("The format of the values.yaml in the chart is invalid!", e);
}
-
- // 更新版本纪录和values纪录
- if (oldVersionInDb != null) {
- // 重新上传chart包后更新values
- updateValues(oldVersionInDb.getValueId(), values);
- updateVersion(oldVersionInDb, newVersion);
- } else {
- // 新建版本时的操作
- appServiceVersionValueDTO.setValue(values);
- try {
- newVersion.setValueId(appServiceVersionValueService
- .baseCreate(appServiceVersionValueDTO).getId());
- } catch (Exception e) {
- FileUtil.deleteDirectories(storeFilePath, destFilePath);
- throw new CommonException(ERROR_VERSION_INSERT, e);
- }
-
- AppServiceVersionReadmeDTO appServiceVersionReadmeDTO = new AppServiceVersionReadmeDTO();
- appServiceVersionReadmeDTO.setReadme(FileUtil.getReadme(destFilePath));
- appServiceVersionReadmeMapper.insert(appServiceVersionReadmeDTO);
-
- newVersion.setReadmeValueId(appServiceVersionReadmeDTO.getId());
- newVersion = baseCreate(newVersion);
- }
-
-
- FileUtil.deleteDirectories(destFilePath, storeFilePath);
- //生成版本成功后发送webhook json
- sendNotificationService.sendWhenAppServiceVersion(newVersion, appServiceDTO, projectDTO);
- return newVersion;
+ return values;
}
+// private AppServiceVersionDTO doCreate(String image,
+// Long harborConfigId,
+// String repoType,
+// String token,
+// String version,
+// String commit,
+// MultipartFile files,
+// String ref) {
+// AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token);
+//
+// AppServiceVersionValueDTO appServiceVersionValueDTO = new AppServiceVersionValueDTO();
+// AppServiceVersionDTO newVersion = new AppServiceVersionDTO();
+// ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId());
+// Tenant organization = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId());
+// AppServiceVersionDTO oldVersionInDb = baseQueryByAppServiceIdAndVersion(appServiceDTO.getId(), version);
+// newVersion.setAppServiceId(appServiceDTO.getId());
+// newVersion.setImage(image);
+// newVersion.setCommit(commit);
+// newVersion.setRef(ref);
+// newVersion.setVersion(version);
+// //根据配置id 查询仓库是自定义还是默认
+//// HarborRepoDTO harborRepoDTO = rdupmClient.queryHarborRepoConfig(appServiceDTO.getProjectId(), appServiceDTO.getId()).getBody();
+//// if (Objects.isNull(harborRepoDTO)
+//// || Objects.isNull(harborRepoDTO.getHarborRepoConfig())
+//// || harborRepoDTO.getHarborRepoConfig().getRepoId().longValue() != harborConfigId) {
+//// throw new DevopsCiInvalidException("error.harbor.configuration.expiration");
+//// }
+// newVersion.setHarborConfigId(harborConfigId);
+// newVersion.setRepoType(repoType);
+//
+// // 查询helm仓库配置id
+// DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, CHART, AUTH_TYPE_PULL);
+// ConfigVO helmConfig = GSON.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class);
+// String helmUrl = helmConfig.getUrl();
+// newVersion.setHelmConfigId(devopsConfigDTO.getId());
+//
+// newVersion.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/");
+//
+// // 取commit的一部分作为文件路径
+// String commitPart = commit == null ? "" : commit.substring(0, 8);
+//
+// String storeFilePath = String.format(STORE_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart);
+// String destFilePath = String.format(DESTINATION_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart);
+//
+// String path = FileUtil.multipartFileToFile(storeFilePath, files);
+//
+// // 上传chart包到 chart museum
+// chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword());
+//
+// FileUtil.unTarGZ(path, destFilePath);
+//
+// // 使用深度优先遍历查找文件, 避免查询到子chart的values值
+// File valuesFile = FileUtil.queryFileFromFilesBFS(new File(destFilePath), "values.yaml");
+//
+// if (valuesFile == null) {
+// FileUtil.deleteDirectories(storeFilePath, destFilePath);
+// throw new CommonException("error.find.values.yaml.in.chart");
+// }
+//
+// String values;
+// try (FileInputStream fis = new FileInputStream(valuesFile)) {
+// values = FileUtil.replaceReturnString(fis, null);
+// } catch (IOException e) {
+// FileUtil.deleteDirectories(storeFilePath, destFilePath);
+// throw new CommonException(e);
+// }
+//
+// try {
+// FileUtil.checkYamlFormat(values);
+// } catch (CommonException e) {
+// FileUtil.deleteDirectories(storeFilePath, destFilePath);
+// throw new CommonException("The format of the values.yaml in the chart is invalid!", e);
+// }
+//
+// // 更新版本纪录和values纪录
+// if (oldVersionInDb != null) {
+// // 重新上传chart包后更新values
+// updateValues(oldVersionInDb.getValueId(), values);
+// updateVersion(oldVersionInDb, newVersion);
+// } else {
+// // 新建版本时的操作
+// appServiceVersionValueDTO.setValue(values);
+// try {
+// newVersion.setValueId(appServiceVersionValueService
+// .baseCreate(appServiceVersionValueDTO).getId());
+// } catch (Exception e) {
+// FileUtil.deleteDirectories(storeFilePath, destFilePath);
+// throw new CommonException(ERROR_VERSION_INSERT, e);
+// }
+//
+// AppServiceVersionReadmeDTO appServiceVersionReadmeDTO = new AppServiceVersionReadmeDTO();
+// appServiceVersionReadmeDTO.setReadme(FileUtil.getReadme(destFilePath));
+// appServiceVersionReadmeMapper.insert(appServiceVersionReadmeDTO);
+//
+// newVersion.setReadmeValueId(appServiceVersionReadmeDTO.getId());
+// newVersion = baseCreate(newVersion);
+// }
+//
+//
+// FileUtil.deleteDirectories(destFilePath, storeFilePath);
+// //生成版本成功后发送webhook json
+// sendNotificationService.sendWhenAppServiceVersion(newVersion, appServiceDTO, projectDTO);
+// return newVersion;
+// }
+
private void updateVersion(AppServiceVersionDTO oldVersionInDb, AppServiceVersionDTO newVersion) {
newVersion.setId(oldVersionInDb.getId());
newVersion.setLastUpdateDate(new Date());
@@ -332,18 +476,74 @@ public Page pageByOptions(Long projectId, Long appServiceId
}
}
Page appServiceVersionVOS = ConvertUtils.convertPage(applicationVersionDTOPageInfo, AppServiceVersionVO.class);
- // 计算应用服务版本是否可以被删除
+
if (!CollectionUtils.isEmpty(appServiceVersionVOS.getContent())) {
+ // 计算应用服务版本是否可以被删除
caculateDelteFlag(appServiceId, appServiceVersionVOS.getContent());
+ // 添加版本关联的helm、image、jar版本信息
+ addVersionInfo(appServiceId, appServiceVersionVOS.getContent());
}
return appServiceVersionVOS;
}
+ /**
+ * 添加版本关联的helm、image、jar版本信息
+ *
+ * @param appServiceId
+ * @param appServiceVersionVOList
+ */
+ private void addVersionInfo(Long appServiceId, List appServiceVersionVOList) {
+ Set versionIds = appServiceVersionVOList.stream().map(AppServiceVersionVO::getId).collect(Collectors.toSet());
+
+ AppServiceDTO appServiceDTO = appServiceMapper.selectByPrimaryKey(appServiceId);
+
+ // 批量查询各版本信息
+ Map helmVersionMap = new HashMap<>();
+ List appServiceHelmVersionVOS = appServiceHelmVersionService.listByAppVersionIds(versionIds);
+ if (!CollectionUtils.isEmpty(appServiceHelmVersionVOS)) {
+ helmVersionMap = appServiceHelmVersionVOS.stream().collect(Collectors.toMap(AppServiceHelmVersionVO::getAppServiceVersionId, Function.identity()));
+ }
+ Map imageVersionMap = new HashMap<>();
+ List appServiceImageVersionVOS = appServiceImageVersionService.listByAppVersionIds(versionIds);
+ if (!CollectionUtils.isEmpty(appServiceImageVersionVOS)) {
+ imageVersionMap = appServiceImageVersionVOS.stream().collect(Collectors.toMap(AppServiceImageVersionVO::getAppServiceVersionId, Function.identity()));
+ }
+
+ Map mavenVersionMap = new HashMap<>();
+ List appServiceMavenVersionVOS = appServiceMavenVersionService.listByAppVersionIds(versionIds);
+ if (!CollectionUtils.isEmpty(appServiceMavenVersionVOS)) {
+ mavenVersionMap = appServiceMavenVersionVOS.stream().collect(Collectors.toMap(AppServiceMavenVersionVO::getAppServiceVersionId, Function.identity()));
+ }
+
+ // 填充版本信息
+ Map finalHelmVersionMap = helmVersionMap;
+ Map finalImageVersionMap = imageVersionMap;
+ Map finalMavenVersionMap = mavenVersionMap;
+ appServiceVersionVOList.forEach(appServiceVersionVO -> {
+ Long appServiceVersionId = appServiceVersionVO.getId();
+
+ AppServiceHelmVersionVO appServiceHelmVersionVO = finalHelmVersionMap.get(appServiceVersionId);
+ if (appServiceHelmVersionVO != null) {
+ appServiceHelmVersionVO.setChartName(appServiceDTO.getCode());
+ appServiceHelmVersionVO.setVersion(appServiceVersionVO.getVersion());
+ }
+ AppServiceImageVersionVO appServiceImageVersionVO = finalImageVersionMap.get(appServiceVersionId);
+ AppServiceMavenVersionVO appServiceMavenVersionVO = finalMavenVersionMap.get(appServiceVersionId);
+
+ appServiceVersionVO.setAppServiceHelmVersionVO(appServiceHelmVersionVO);
+ appServiceVersionVO.setAppServiceImageVersionVO(appServiceImageVersionVO);
+ appServiceVersionVO.setAppServiceMavenVersionVO(appServiceMavenVersionVO);
+ });
+
+
+ }
+
/**
* 计算应用服务版本是否可以被删除
* 1. 有实例的版本不能删除
* 2. 有共享规则的版本不能删除
+ *
* @param appServiceId
* @param content
*/
@@ -391,56 +591,11 @@ public List listUpgradeableAppVersion(Long projectId, L
baseListUpgradeVersion(appServiceServiceId), AppServiceVersionRespVO.class);
}
- @Override
- public DeployVersionVO queryDeployedVersions(Long appServiceId) {
- AppServiceVersionDTO appServiceVersionDTO = baseQueryNewestVersion(appServiceId);
- DeployVersionVO deployVersionVO = new DeployVersionVO();
- List deployEnvVersionVOS = new ArrayList<>();
- if (appServiceVersionDTO != null) {
- Map> envInstances = appServiceInstanceService.baseListByAppId(appServiceId)
- .stream()
- .filter(applicationInstanceDTO -> applicationInstanceDTO.getCommandId() != null)
- .collect(Collectors.groupingBy(AppServiceInstanceDTO::getEnvId));
-
- if (!envInstances.isEmpty()) {
- envInstances.forEach((key, value) -> {
- DevopsEnvironmentDTO devopsEnvironmentDTO = devopsEnvironmentService.baseQueryById(key);
- DeployEnvVersionVO deployEnvVersionVO = new DeployEnvVersionVO();
- deployEnvVersionVO.setEnvName(devopsEnvironmentDTO.getName());
- List deployInstanceVersionVOS = new ArrayList<>();
- Map> versionInstances = value.stream().collect(Collectors.groupingBy(t -> {
- DevopsEnvCommandDTO devopsEnvCommandDTO = devopsEnvCommandService.baseQuery(t.getCommandId());
- return devopsEnvCommandDTO.getObjectVersionId();
- }));
-
- if (!versionInstances.isEmpty()) {
- versionInstances.forEach((newKey, newValue) -> {
- AppServiceVersionDTO newAppServiceVersionDTO = baseQuery(newKey);
- DeployInstanceVersionVO deployInstanceVersionVO = new DeployInstanceVersionVO();
- deployInstanceVersionVO.setDeployVersion(newAppServiceVersionDTO.getVersion());
- deployInstanceVersionVO.setInstanceCount(newValue.size());
- if (newAppServiceVersionDTO.getId() < appServiceVersionDTO.getId()) {
- deployInstanceVersionVO.setUpdate(true);
- }
- deployInstanceVersionVOS.add(deployInstanceVersionVO);
- });
- }
-
- deployEnvVersionVO.setDeployIntanceVersionDTO(deployInstanceVersionVOS);
- deployEnvVersionVOS.add(deployEnvVersionVO);
- });
-
- deployVersionVO.setLatestVersion(appServiceVersionDTO.getVersion());
- deployVersionVO.setDeployEnvVersionVO(deployEnvVersionVOS);
- }
- }
- return deployVersionVO;
- }
-
@Override
public String queryVersionValue(Long appServiceServiceId) {
AppServiceVersionDTO appServiceVersionDTO = baseQuery(appServiceServiceId);
- return appServiceVersionValueService.baseQuery(appServiceVersionDTO.getValueId()).getValue();
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId());
+ return appServiceVersionValueService.baseQuery(appServiceHelmVersionDTO.getValueId()).getValue();
}
@Override
@@ -473,7 +628,7 @@ public List listByAppIdAndBranch(Long appServiceId
appServiceVersionAndCommitVO.setVersion(applicationVersionDTO.getVersion());
appServiceVersionAndCommitVO.setCreateDate(applicationVersionDTO.getCreationDate());
appServiceVersionAndCommitVO.setCommitUrl(gitlabUrl + "/"
- + organization.getTenantNum() + "-" + projectDTO.getCode() + "/"
+ + organization.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + "/"
+ applicationDTO.getCode() + ".git");
appServiceVersionAndCommitVOS.add(appServiceVersionAndCommitVO);
@@ -552,15 +707,6 @@ private AppServiceVersionVO dtoToVo(AppServiceVersionDTO appServiceVersionDTO) {
return appServiceVersionVO;
}
- @Override
- public List baseListAppNewestVersion(Long projectId) {
- ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId);
- List projectEList = baseServiceClientOperator.listIamProjectByOrgId(projectDTO.getOrganizationId());
- List projectIds = projectEList.stream().map(ProjectDTO::getId)
- .collect(Collectors.toCollection(ArrayList::new));
- return appServiceVersionMapper.listAppNewestVersion(projectId, projectIds);
- }
-
@Override
public Page pageShareVersionByAppId(Long appServiceId, PageRequest pageable, String params) {
Map paramMap = TypeUtil.castMapParams(params);
@@ -594,7 +740,16 @@ public List baseListAppDeployedVersion(Long projectId, Lon
@Override
public AppServiceVersionDTO baseQuery(Long appServiceServiceId) {
- return appServiceVersionMapper.selectByPrimaryKey(appServiceServiceId);
+ AppServiceVersionDTO appServiceVersionDTO = appServiceVersionMapper.selectByPrimaryKey(appServiceServiceId);
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId());
+ appServiceVersionDTO.setValueId(appServiceHelmVersionDTO.getValueId());
+ appServiceVersionDTO.setReadmeValueId(appServiceHelmVersionDTO.getReadmeValueId());
+ appServiceVersionDTO.setRepository(appServiceHelmVersionDTO.getRepository());
+ appServiceVersionDTO.setImage(appServiceHelmVersionDTO.getImage());
+ appServiceVersionDTO.setHarborConfigId(appServiceHelmVersionDTO.getHarborConfigId());
+ appServiceVersionDTO.setRepoType(appServiceHelmVersionDTO.getHarborRepoType());
+ appServiceVersionDTO.setHelmConfigId(appServiceHelmVersionDTO.getHelmConfigId());
+ return appServiceVersionDTO;
}
@Override
@@ -646,11 +801,6 @@ public List baseQueryByCommitSha(Long appServiceId, String
return appServiceVersionMapper.queryByCommitSha(appServiceId, ref, sha);
}
- @Override
- public AppServiceVersionDTO baseQueryNewestVersion(Long appServiceId) {
- return appServiceVersionMapper.queryNewestVersion(appServiceId);
- }
-
@Override
public List baseListByAppServiceVersionIds(List appServiceServiceIds) {
return appServiceVersionMapper.listByAppServiceVersionIds(appServiceServiceIds);
@@ -752,70 +902,6 @@ public void deleteByAppServiceId(Long appServiceId) {
}
}
- private Long queryDefaultHarborId() {
- DevopsConfigDTO devopsConfigDTO = new DevopsConfigDTO();
- devopsConfigDTO.setName(MiscConstants.DEFAULT_HARBOR_NAME);
- return devopsConfigMapper.selectOne(devopsConfigDTO).getId();
- }
-
- @Override
- public void fixHarbor() {
- //修复appVsersion表,register_secret表
- LOGGER.info("start fix appVsersion table");
- //根据appServiceID 进行分组
-
- Long defaultHarborConfigId = queryDefaultHarborId();
-
- LOGGER.info("Default harbor config id is {}", defaultHarborConfigId);
-
- List longList = appServiceVersionMapper.selectAllAppServiceIdWithNullHarborConfig();
- LOGGER.info("Start to fix null harbor config id versions. the app-service id size is {}", longList.size());
- for (Long appServiceId : longList) {
- handlerVersion(appServiceId);
- }
- LOGGER.info("End to fix null harbor config id versions");
-
- // 修harbor config id 非null的
- LOGGER.info("Start to fix default harbor config id versions");
- appServiceVersionMapper.updateDefaultHarborRecords(defaultHarborConfigId);
- LOGGER.info("Finish to fix default harbor config id versions");
-
- LOGGER.info("Start to fix non default harbor config id versions");
- appServiceVersionMapper.updateCustomHarborRecords(defaultHarborConfigId);
- LOGGER.info("Finish to fix non default harbor config id versions");
-
- LOGGER.info("end fix appVsersion table");
- LOGGER.info("start fix register_secret");
- int count = devopsRegistrySecretMapper.selectCount(null);
- int pageSize = 100;
- int total = (count + pageSize - 1) / pageSize;
- int pageNumber = 0;
- do {
- PageRequest pageable = new PageRequest();
- pageable.setPage(pageNumber);
- pageable.setSize(pageSize);
- pageable.setSort(new Sort("id"));
- Page doPageAndSort = PageHelper.doPageAndSort(PageRequestUtil.simpleConvertSortForPage(pageable),
- () -> devopsRegistrySecretMapper.selectAll());
- if (!CollectionUtils.isEmpty(doPageAndSort.getContent())) {
- for (DevopsRegistrySecretDTO devopsRegistrySecretDTO : doPageAndSort) {
- DevopsConfigDTO devopsConfigDTO = devopsConfigMapper.selectByPrimaryKey(devopsRegistrySecretDTO.getConfigId());
- if (!Objects.isNull(devopsConfigDTO) && HARBOR_DEFAULT.equals(devopsConfigDTO.getName())) {
- devopsRegistrySecretDTO.setConfigId(null);
- devopsRegistrySecretDTO.setRepoType(DEFAULT_REPO);
- devopsRegistrySecretMapper.updateByPrimaryKey(devopsRegistrySecretDTO);
- } else {
- devopsRegistrySecretDTO.setRepoType(CUSTOM_REPO);
- devopsRegistrySecretMapper.updateByPrimaryKey(devopsRegistrySecretDTO);
- }
- }
- }
- pageNumber++;
- } while (pageNumber <= total);
-
- LOGGER.info("end fix register_secret");
- }
-
@Override
@Transactional
@Saga(code = SagaTopicCodeConstants.DEVOPS_DELETE_APPLICATION_SERVICE_VERSION, inputSchemaClass = CustomResourceVO.class, description = "批量删除应用服务版本")
@@ -832,21 +918,27 @@ public void batchDelete(Long projectId, Long appServiceId, Set versionIds)
versionIds.forEach(id -> {
// 查询应用服务版本
AppServiceVersionDTO appServiceVersionDTO = appServiceVersionMapper.selectByPrimaryKey(id);
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId());
// 删除value
- appServiceVersionValueService.baseDeleteById(appServiceVersionDTO.getValueId());
+ appServiceVersionValueService.baseDeleteById(appServiceHelmVersionDTO.getValueId());
// 删除readme
- appServiceVersionReadmeMapper.deleteByPrimaryKey(appServiceVersionDTO.getReadmeValueId());
+ appServiceVersionReadmeMapper.deleteByPrimaryKey(appServiceHelmVersionDTO.getReadmeValueId());
// 计算删除harbor镜像列表
- if (DEFAULT_REPO.equals(appServiceVersionDTO.getRepoType())) {
- HarborImageTagDTO harborImageTagDTO = caculateHarborImageTagDTO(appServiceDTO.getProjectId(), appServiceVersionDTO.getImage());
+ if (DEFAULT_REPO.equals(appServiceHelmVersionDTO.getHarborRepoType())) {
+ HarborImageTagDTO harborImageTagDTO = caculateHarborImageTagDTO(appServiceDTO.getProjectId(), appServiceHelmVersionDTO.getImage());
deleteImagetags.add(harborImageTagDTO);
}
// 计算删除chart列表
- ChartTagVO chartTagVO = caculateChartTag(tenant.getTenantNum(), projectDTO.getCode(), appServiceDTO.getCode(), appServiceVersionDTO);
+ ChartTagVO chartTagVO = caculateChartTag(tenant.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode(), appServiceVersionDTO);
+ chartTagVO.setTenantId(tenant.getTenantId());
+ chartTagVO.setProjectId(projectDTO.getId());
deleteChartTags.add(chartTagVO);
// 删除应用服务版本
+ appServiceHelmVersionService.deleteByAppServiceVersionId(appServiceVersionDTO.getId());
+ appServiceImageVersionService.deleteByAppServiceVersionId(appServiceVersionDTO.getId());
+ appServiceMavenVersionService.deleteByAppServiceVersionId(appServiceVersionDTO.getId());
appServiceVersionMapper.deleteByPrimaryKey(appServiceVersionDTO.getId());
});
CustomResourceVO customResourceVO = new CustomResourceVO();
@@ -875,23 +967,131 @@ public AppServiceVersionDTO queryByCommitShaAndRef(Long appServiceId, String com
@Override
public AppServiceVersionWithHelmConfigVO queryVersionWithHelmConfig(Long projectId, Long appServiceVersionId) {
- AppServiceVersionWithHelmConfigVO appServiceVersionWithHelmConfigVO = io.choerodon.core.utils.ConvertUtils.convertObject(appServiceVersionMapper.selectByPrimaryKey(appServiceVersionId), AppServiceVersionWithHelmConfigVO.class);
- if (appServiceVersionWithHelmConfigVO != null) {
- Long helmConfigId = appServiceVersionWithHelmConfigVO.getHelmConfigId();
+ AppServiceVersionWithHelmConfigVO appServiceVersionWithHelmConfigVO = io.choerodon.core.utils.ConvertUtils.convertObject(appServiceVersionMapper.selectByAppServiceVersionId(appServiceVersionId), AppServiceVersionWithHelmConfigVO.class);
+ AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionId);
+ if (appServiceHelmVersionDTO != null) {
+ Long helmConfigId = appServiceHelmVersionDTO.getHelmConfigId();
if (helmConfigId == null) {
throw new FeignException("error.helm.config.id.null");
}
-
- DevopsConfigDTO devopsConfigDTO = devopsConfigMapper.selectByPrimaryKey(helmConfigId);
- if (devopsConfigDTO == null) {
+ DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigService.queryById(helmConfigId);
+ if (devopsHelmConfigDTO == null) {
throw new FeignException("error.helm.config.not.exist");
}
-
- appServiceVersionWithHelmConfigVO.setHelmConfig(JsonHelper.unmarshalByJackson(devopsConfigDTO.getConfig(), ConfigVO.class));
+ appServiceVersionWithHelmConfigVO.setHelmConfig(new ConfigVO(devopsHelmConfigDTO.getUrl(),
+ devopsHelmConfigDTO.getUsername(),
+ devopsHelmConfigDTO.getPassword(),
+ devopsHelmConfigDTO.getRepoPrivate()));
}
return appServiceVersionWithHelmConfigVO;
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public AppServiceVersionDTO publishAppVersion(String token, String version, String commit, String ref, Long gitlabPipelineId, String jobName) {
+ try {
+ // 1. 创建应用服务版本
+ AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token);
+ Long appServiceId = appServiceDTO.getId();
+ AppServiceVersionDTO appServiceVersionDTO = saveAppVersion(version, commit, ref, gitlabPipelineId, appServiceId);
+
+ // 2. 保存流水线任务记录信息
+ if (gitlabPipelineId != null && StringUtils.isNotBlank(jobName)) {
+ CiPipelineAppVersionDTO ciPipelineAppVersionDTO = ciPipelineAppVersionService.queryByPipelineIdAndJobName(appServiceId,
+ gitlabPipelineId,
+ jobName);
+ if (ciPipelineAppVersionDTO == null) {
+ ciPipelineAppVersionService.baseCreate(new CiPipelineAppVersionDTO(appServiceId,
+ gitlabPipelineId,
+ jobName,
+ appServiceVersionDTO.getId()));
+ }
+ }
+ return appServiceVersionDTO;
+ } catch (Exception e) {
+ if (e instanceof CommonException) {
+ throw new DevopsCiInvalidException(((CommonException) e).getCode(), e, ((CommonException) e).getParameters());
+ }
+ throw new DevopsCiInvalidException(e);
+ }
+ }
+
+ @Transactional(rollbackFor = Exception.class)
+ public AppServiceVersionDTO saveAppVersion(String version, String commit, String ref, Long gitlabPipelineId, Long appServiceId) {
+ AppServiceVersionDTO appServiceVersionDTO = baseQueryByAppServiceIdAndVersion(appServiceId, version);
+ // 不存在才创建
+ if (appServiceVersionDTO == null) {
+ appServiceVersionDTO = create(appServiceId, version, commit, ref);
+ }
+ Long appServiceVersionId = appServiceVersionDTO.getId();
+ // 2. 创建helm版本
+
+ // 3. 创建image版本
+ // 3.1 查询流水线中最新的镜像版本
+ AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionId);
+ if (appServiceImageVersionDTO == null) {
+ CiPipelineImageDTO ciPipelineImageDTO = ciPipelineImageService.queryPipelineLatestImage(appServiceId, gitlabPipelineId);
+ if (ciPipelineImageDTO != null) {
+ appServiceImageVersionDTO = new AppServiceImageVersionDTO();
+ appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionId);
+ appServiceImageVersionDTO.setImage(ciPipelineImageDTO.getImageTag());
+ appServiceImageVersionDTO.setHarborRepoType(ciPipelineImageDTO.getRepoType());
+ appServiceImageVersionDTO.setHarborConfigId(ciPipelineImageDTO.getHarborRepoId());
+ appServiceImageVersionService.create(appServiceImageVersionDTO);
+ }
+ }
+
+ // 4. 创建jar版本
+ AppServiceMavenVersionDTO appServiceMavenVersionDTO = appServiceMavenVersionService.queryByAppServiceVersionId(appServiceVersionId);
+ if (appServiceMavenVersionDTO == null) {
+ CiPipelineMavenDTO ciPipelineMavenDTO = ciPipelineMavenService.queryPipelineLatestImage(appServiceId, gitlabPipelineId);
+ if (ciPipelineMavenDTO != null) {
+ appServiceMavenVersionDTO = new AppServiceMavenVersionDTO();
+ appServiceMavenVersionDTO.setAppServiceVersionId(appServiceVersionId);
+ appServiceMavenVersionDTO.setGroupId(ciPipelineMavenDTO.getGroupId());
+ appServiceMavenVersionDTO.setArtifactId(ciPipelineMavenDTO.getArtifactId());
+ appServiceMavenVersionDTO.setVersion(ciPipelineMavenDTO.getVersion());
+ appServiceMavenVersionDTO.setMavenRepoUrl(ciPipelineMavenDTO.getMavenRepoUrl());
+ appServiceMavenVersionDTO.setUsername(ciPipelineMavenDTO.getUsername());
+ appServiceMavenVersionDTO.setPassword(ciPipelineMavenDTO.getPassword());
+ appServiceMavenVersionDTO.setNexusRepoId(ciPipelineMavenDTO.getNexusRepoId());
+ appServiceMavenVersionService.create(appServiceMavenVersionDTO);
+ }
+ }
+ return appServiceVersionDTO;
+ }
+
+ @Override
+ @Transactional
+ public AppServiceVersionDTO create(Long appServiceId, String version, String commit, String ref) {
+ AppServiceVersionDTO appServiceVersionDTO = new AppServiceVersionDTO();
+ appServiceVersionDTO.setAppServiceId(appServiceId);
+ appServiceVersionDTO.setVersion(version);
+ appServiceVersionDTO.setCommit(commit);
+ appServiceVersionDTO.setRef(ref);
+ return MapperUtil.resultJudgedInsertSelective(appServiceVersionMapper, appServiceVersionDTO, "error.save.version");
+ }
+
+ @Override
+ public List listAllVersionsWithHelmConfig() {
+ return appServiceVersionMapper.listAllVersionsWithHelmConfig();
+ }
+
+ @Override
+ public List listAllVersionsWithHarborConfig() {
+ return appServiceVersionMapper.listAllVersionsWithHarborConfig();
+ }
+
+ @Override
+ public Integer queryCountVersionsWithHelmConfig() {
+ return appServiceVersionMapper.queryCountVersionsWithHelmConfig();
+ }
+
+ @Override
+ public Integer queryCountVersionsWithHarborConfig() {
+ return appServiceVersionMapper.queryCountVersionsWithHarborConfig();
+ }
+
private Set checkVersion(Long appServiceId, Set versionIds) {
Set deleteErrorVersion = new HashSet<>();
AppServiceInstanceDTO appServiceInstanceDTO = new AppServiceInstanceDTO();
@@ -963,61 +1163,4 @@ private HarborImageTagDTO caculateHarborImageTagDTO(Long projectId, String image
harborImageTagDTO.setProjectId(projectId);
return harborImageTagDTO;
}
-
- @Nullable
- private DevopsConfigDTO queryConfigByAppServiceId(Long appServiceId) {
- DevopsConfigDTO configDTO = new DevopsConfigDTO();
- configDTO.setAppServiceId(appServiceId);
- return devopsConfigMapper.selectOne(configDTO);
- }
-
- @Nullable
- private DevopsConfigDTO queryConfigByProjectId(Long projectId) {
- DevopsConfigDTO configDTO = new DevopsConfigDTO();
- configDTO.setProjectId(projectId);
- return devopsConfigMapper.selectOne(configDTO);
- }
-
- @Nullable
- private DevopsConfigDTO queryConfigByOrgId(Long orgId) {
- DevopsConfigDTO configDTO = new DevopsConfigDTO();
- configDTO.setOrganizationId(orgId);
- return devopsConfigMapper.selectOne(configDTO);
- }
-
- private void handlerVersion(Long appServiceId) {
- LOGGER.info("fix app service id is {} data", appServiceId);
- DevopsConfigDTO devopsConfigDTO = queryConfigByAppServiceId(appServiceId);
- if (!Objects.isNull(devopsConfigDTO)) {
- //自定义仓库 ,配置和appService一样
- LOGGER.info("Custom config {} found for app-service with id {} in app service", devopsConfigDTO.getId(), appServiceId);
- appServiceVersionMapper.updateNullHarborVersionToCustomType(appServiceId, devopsConfigDTO.getId());
- } else {
- // 找项目的
- AppServiceDTO appServiceDTO = appServiceMapper.selectByPrimaryKey(appServiceId);
- if (!Objects.isNull(appServiceDTO)) {
- devopsConfigDTO = queryConfigByProjectId(appServiceDTO.getProjectId());
- if (!Objects.isNull(devopsConfigDTO)) {
- //自定义仓库 ,配置和project一样
- LOGGER.info("Custom config {} found for app-service with id {} in project with id {}", devopsConfigDTO.getId(), appServiceId, appServiceDTO.getProjectId());
- appServiceVersionMapper.updateNullHarborVersionToCustomType(appServiceId, devopsConfigDTO.getId());
- } else {
- ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId());
- if (!Objects.isNull(projectDTO)) {
- devopsConfigDTO = queryConfigByOrgId(projectDTO.getOrganizationId());
- if (!Objects.isNull(devopsConfigDTO)) {
- //自定义仓库 ,配置和Org一样
- LOGGER.info("Custom config {} found for app-service with id {} in organization with id {}", devopsConfigDTO.getId(), appServiceId, projectDTO.getOrganizationId());
- appServiceVersionMapper.updateNullHarborVersionToCustomType(appServiceId, devopsConfigDTO.getId());
- } else {
- //默认仓库
- LOGGER.info("No custom config Found for app-service with id {}, set to default", appServiceId);
- appServiceVersionMapper.updateNullHarborVersionToDefaultType(appServiceId);
- }
- }
- }
- }
-
- }
- }
}
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CertificationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CertificationServiceImpl.java
index ae2e0152a2..bf861e3327 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/CertificationServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/CertificationServiceImpl.java
@@ -132,7 +132,7 @@ public void createCertification(Long projectId, C7nCertificationCreateVO c7nCert
ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId);
- String path = String.format("tmp%s%s%s%s", FILE_SEPARATOR, projectDTO.getCode(), FILE_SEPARATOR, devopsEnvironmentDTO.getCode());
+ String path = String.format("tmp%s%s%s%s", FILE_SEPARATOR, projectDTO.getDevopsComponentCode(), FILE_SEPARATOR, devopsEnvironmentDTO.getCode());
String certFileName;
String keyFileName;
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CheckGitlabAccessLevelServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CheckGitlabAccessLevelServiceImpl.java
index 84c813eb47..bceb71d78e 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/CheckGitlabAccessLevelServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/CheckGitlabAccessLevelServiceImpl.java
@@ -30,7 +30,7 @@
*/
@Service
public class CheckGitlabAccessLevelServiceImpl implements CheckGitlabAccessLevelService {
- private final static String EMPTY_GITLAB_ACCESS_LEVEL = "error.empty.gitlab.access.level";
+ private static final String EMPTY_GITLAB_ACCESS_LEVEL = "error.empty.gitlab.access.level";
@Autowired
private HrdsCodeRepoClientOperator hrdsCodeRepoClientOperator;
@Autowired
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java
index 663a13edff..13c0f67b99 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java
@@ -178,20 +178,6 @@ public CiCdPipelineRecordVO queryPipelineRecordDetails(Long projectId, Long reco
return ciCdPipelineRecordVO;
}
- private boolean isFirstRecord(DevopsPipelineRecordRelVO devopsPipelineRecordRelVO) {
- //如果为流水线的下的第一条记录则返回为null
- Long pipelineId = devopsPipelineRecordRelVO.getPipelineId();
- DevopsPipelineRecordRelDTO recordRelDTO = new DevopsPipelineRecordRelDTO();
- recordRelDTO.setPipelineId(pipelineId);
- List select = devopsPipelineRecordRelMapper.select(recordRelDTO);
- if (select.size() == 1) {
- return true;
- }
- List devopsPipelineRecordRelVOS = ConvertUtils.convertList(select, this::relDtoToRelVO);
- CiCdPipelineUtils.recordListSort(devopsPipelineRecordRelVOS);
- return devopsPipelineRecordRelVO.getId().compareTo(devopsPipelineRecordRelVOS.get(devopsPipelineRecordRelVOS.size() - 1).getId()) == 0;
- }
-
private void fillPipelineVO(String userName, List stageRecordVOS, Date executeDate, CiCdPipelineVO ciCdPipelineVO, CiCdPipelineRecordVO ciCdPipelineRecordVO) {
ciCdPipelineVO.setCreateUserName(userName);
if (!CollectionUtils.isEmpty(stageRecordVOS)) {
@@ -377,7 +363,7 @@ public void cancelCdPipeline(Long pipelineRecordId) {
// 只有未执行、执行中的流水线可以取消执行
if (PipelineStatus.CREATED.toValue().equals(pipelineRecordDTO.getStatus())) {
- cancelCreateStageAndJob(pipelineRecordId);
+ cancelCreateOrRunningStageAndJob(pipelineRecordId);
} else if (PipelineStatus.RUNNING.toValue().equals(pipelineRecordDTO.getStatus())) {
List devopsCdStageRecordDTOS = devopsCdStageRecordService.queryStageWithPipelineRecordIdAndStatus(pipelineRecordId, PipelineStatus.RUNNING.toValue());
@@ -389,10 +375,9 @@ public void cancelCdPipeline(Long pipelineRecordId) {
if (JobTypeEnum.CD_AUDIT.value().equals(devopsCdJobRecordDTO.getType())) {
throw new CommonException(PipelineCheckConstant.ERROR_CANCEL_AUDITING_PIPELINE);
}
- devopsCdStageRecordService.updateStatusById(devopsCdStageRecordDTO.getId(), PipelineStatus.CANCELED.toValue());
}
}
- cancelCreateStageAndJob(pipelineRecordId);
+ cancelCreateOrRunningStageAndJob(pipelineRecordId);
} else {
return;
}
@@ -401,12 +386,28 @@ public void cancelCdPipeline(Long pipelineRecordId) {
workFlowServiceOperator.stopInstance(pipelineRecordDTO.getProjectId(), pipelineRecordDTO.getBusinessKey());
}
- private void cancelCreateStageAndJob(Long pipelineRecordId) {
- List devopsCdStageRecordDTOS = devopsCdStageRecordService.queryStageWithPipelineRecordIdAndStatus(pipelineRecordId, PipelineStatus.CREATED.toValue());
+ private void cancelCreateOrRunningStageAndJob(Long pipelineRecordId) {
+ List devopsCdStageRecordDTOS = new ArrayList<>();
+ List createdRecordDTOS = devopsCdStageRecordService.queryStageWithPipelineRecordIdAndStatus(pipelineRecordId, PipelineStatus.CREATED.toValue());
+ List runningRecordDTOS = devopsCdStageRecordService.queryStageWithPipelineRecordIdAndStatus(pipelineRecordId, PipelineStatus.RUNNING.toValue());
+ if (!CollectionUtils.isEmpty(createdRecordDTOS)) {
+ devopsCdStageRecordDTOS.addAll(createdRecordDTOS);
+ }
+ if (!CollectionUtils.isEmpty(runningRecordDTOS)) {
+ devopsCdStageRecordDTOS.addAll(runningRecordDTOS);
+ }
if (!CollectionUtils.isEmpty(devopsCdStageRecordDTOS)) {
devopsCdStageRecordDTOS.forEach(devopsCdStageRecordDTO -> {
devopsCdStageRecordService.updateStatusById(devopsCdStageRecordDTO.getId(), PipelineStatus.CANCELED.toValue());
- List devopsCdJobRecordDTOS = devopsCdJobRecordService.queryJobWithStageRecordIdAndStatus(devopsCdStageRecordDTO.getId(), PipelineStatus.CREATED.toValue());
+ List devopsCdJobRecordDTOS = new ArrayList<>();
+ List createdJobRecordDTOS = devopsCdJobRecordService.queryJobWithStageRecordIdAndStatus(devopsCdStageRecordDTO.getId(), PipelineStatus.CREATED.toValue());
+ List runningJobRecordDTOS = devopsCdJobRecordService.queryJobWithStageRecordIdAndStatus(devopsCdStageRecordDTO.getId(), PipelineStatus.RUNNING.toValue());
+ if (!CollectionUtils.isEmpty(createdJobRecordDTOS)) {
+ devopsCdJobRecordDTOS.addAll(createdJobRecordDTOS);
+ }
+ if (!CollectionUtils.isEmpty(runningJobRecordDTOS)) {
+ devopsCdJobRecordDTOS.addAll(runningJobRecordDTOS);
+ }
if (!CollectionUtils.isEmpty(devopsCdJobRecordDTOS)) {
devopsCdJobRecordDTOS.forEach(devopsCdJobRecordDTO -> devopsCdJobRecordService.updateStatusById(devopsCdJobRecordDTO.getId(), PipelineStatus.CANCELED.toValue()));
}
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java
new file mode 100644
index 0000000000..b2edbb21bd
--- /dev/null
+++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java
@@ -0,0 +1,54 @@
+package io.choerodon.devops.app.service.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
+
+import io.choerodon.devops.app.service.CiPipelineAppVersionService;
+import io.choerodon.devops.infra.constant.ResourceCheckConstant;
+import io.choerodon.devops.infra.dto.CiPipelineAppVersionDTO;
+import io.choerodon.devops.infra.mapper.CiPipelineAppVersionMapper;
+import io.choerodon.devops.infra.util.MapperUtil;
+
+/**
+ * 发布应用服务版本步骤生成的流水线记录信息(CiPipelineAppVersion)应用服务
+ *
+ * @author hao.wang@zknow.com
+ * @since 2022-07-14 16:01:30
+ */
+@Service
+public class CiPipelineAppVersionServiceImpl implements CiPipelineAppVersionService {
+ @Autowired
+ private CiPipelineAppVersionMapper ciPipelineAppVersionMapper;
+
+ @Override
+ public CiPipelineAppVersionDTO queryByPipelineIdAndJobName(Long appServiceId, Long gitlabPipelineId, String jobName) {
+ Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL);
+ Assert.notNull(gitlabPipelineId, ResourceCheckConstant.ERROR_GITLAB_PIPELINE_ID_IS_NULL);
+ Assert.notNull(jobName, ResourceCheckConstant.ERROR_JOB_NAME_ID_IS_NULL);
+
+ CiPipelineAppVersionDTO ciPipelineAppVersionDTO = new CiPipelineAppVersionDTO();
+ ciPipelineAppVersionDTO.setAppServiceId(appServiceId);
+ ciPipelineAppVersionDTO.setGitlabPipelineId(gitlabPipelineId);
+ ciPipelineAppVersionDTO.setJobName(jobName);
+
+ return ciPipelineAppVersionMapper.selectOne(ciPipelineAppVersionDTO);
+ }
+
+ @Override
+ public void baseCreate(CiPipelineAppVersionDTO ciPipelineAppVersionDTO) {
+ MapperUtil.resultJudgedInsertSelective(ciPipelineAppVersionMapper, ciPipelineAppVersionDTO, "error.save.app.version");
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteByAppServiceId(Long appServiceId) {
+ Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL);
+
+ CiPipelineAppVersionDTO ciPipelineAppVersionDTO = new CiPipelineAppVersionDTO();
+ ciPipelineAppVersionDTO.setAppServiceVersionId(appServiceId);
+ ciPipelineAppVersionMapper.delete(ciPipelineAppVersionDTO);
+ }
+}
+
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java
index 3c2e234f1a..61f9d7b4c9 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java
@@ -4,14 +4,20 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
import io.choerodon.core.exception.CommonException;
import io.choerodon.devops.api.vo.CiPipelineImageVO;
import io.choerodon.devops.api.vo.ImageRepoInfoVO;
+import io.choerodon.devops.app.service.AppServiceImageVersionService;
import io.choerodon.devops.app.service.AppServiceService;
+import io.choerodon.devops.app.service.AppServiceVersionService;
import io.choerodon.devops.app.service.CiPipelineImageService;
import io.choerodon.devops.infra.constant.MiscConstants;
+import io.choerodon.devops.infra.constant.ResourceCheckConstant;
import io.choerodon.devops.infra.dto.AppServiceDTO;
+import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO;
+import io.choerodon.devops.infra.dto.AppServiceVersionDTO;
import io.choerodon.devops.infra.dto.CiPipelineImageDTO;
import io.choerodon.devops.infra.dto.harbor.HarborRepoDTO;
import io.choerodon.devops.infra.enums.DevopsRegistryRepoType;
@@ -34,6 +40,10 @@ public class CiPipelineImageServiceImpl implements CiPipelineImageService {
@Autowired
private AppServiceService appServiceService;
@Autowired
+ private AppServiceImageVersionService appServiceImageVersionService;
+ @Autowired
+ private AppServiceVersionService appServiceVersionService;
+ @Autowired
private RdupmClientOperator rdupmClientOperator;
@Transactional(rollbackFor = Exception.class)
@@ -62,6 +72,27 @@ public void createOrUpdate(CiPipelineImageVO ciPipelineImageVO) {
throw new CommonException("error.update.image.record");
}
}
+
+ // 如果流水线中还包含发布应用服务版本的步骤,还需要将镜像信息保存到版本记录表中
+ AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQueryByAppServiceIdAndVersion(appServiceId, ciPipelineImageVO.getVersion());
+ if (appServiceVersionDTO != null) {
+ AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId());
+ // 镜像版本不存在则创建,存在则更新
+ if (appServiceImageVersionDTO == null) {
+ appServiceImageVersionDTO = new AppServiceImageVersionDTO();
+ appServiceImageVersionDTO.setImage(ciPipelineImageVO.getImageTag());
+ appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionDTO.getId());
+ appServiceImageVersionDTO.setHarborRepoType(ciPipelineImageVO.getRepoType());
+ appServiceImageVersionDTO.setHarborConfigId(ciPipelineImageVO.getHarborRepoId());
+ appServiceImageVersionService.create(appServiceImageVersionDTO);
+ } else {
+ appServiceImageVersionDTO.setImage(ciPipelineImageVO.getImageTag());
+ appServiceImageVersionDTO.setHarborRepoType(ciPipelineImageVO.getRepoType());
+ appServiceImageVersionDTO.setHarborConfigId(ciPipelineImageVO.getHarborRepoId());
+ appServiceImageVersionService.baseUpdate(appServiceImageVersionDTO);
+ }
+ }
+
});
}
@@ -141,6 +172,24 @@ public ImageRepoInfoVO queryImageRepoInfo(String token, Long gitlabPipelineId) {
return new ImageRepoInfoVO(String.valueOf(repoId), repoType, trimPrefix(dockerRegistry), groupName);
}
+ @Override
+ public CiPipelineImageDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId) {
+ Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL);
+ Assert.notNull(gitlabPipelineId, ResourceCheckConstant.ERROR_GITLAB_PIPELINE_ID_IS_NULL);
+
+ return ciPipelineImageMapper.queryPipelineLatestImage(appServiceId, gitlabPipelineId);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteByAppServiceId(Long appServiceId) {
+ Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL);
+
+ CiPipelineImageDTO ciPipelineImageDTO = new CiPipelineImageDTO();
+ ciPipelineImageDTO.setAppServiceId(appServiceId);
+ ciPipelineImageMapper.delete(ciPipelineImageDTO);
+ }
+
private String trimPrefix(String dockerRegistry) {
String dockerUrl = dockerRegistry.replace("http://", "").replace("https://", "");
return dockerUrl.endsWith("/") ? dockerUrl.substring(0, dockerUrl.length() - 1) : dockerUrl;
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java
index 1ec35a0053..67fc6032cc 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java
@@ -14,25 +14,18 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
-import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import retrofit2.Response;
import io.choerodon.core.exception.CommonException;
-import io.choerodon.devops.app.service.AppServiceService;
-import io.choerodon.devops.app.service.CiPipelineMavenService;
-import io.choerodon.devops.app.service.DevopsCiStepService;
+import io.choerodon.devops.app.service.*;
import io.choerodon.devops.infra.constant.ResourceCheckConstant;
-import io.choerodon.devops.infra.dto.AppServiceDTO;
-import io.choerodon.devops.infra.dto.CiPipelineMavenDTO;
-import io.choerodon.devops.infra.dto.DevopsCiJobDTO;
-import io.choerodon.devops.infra.dto.DevopsCiStepDTO;
+import io.choerodon.devops.infra.dto.*;
import io.choerodon.devops.infra.dto.iam.ProjectDTO;
import io.choerodon.devops.infra.dto.maven.Server;
import io.choerodon.devops.infra.dto.maven.Settings;
@@ -55,10 +48,10 @@
@Service
public class CiPipelineMavenServiceImpl implements CiPipelineMavenService {
- private final Logger logger = LoggerFactory.getLogger(getClass());
+ private static final Logger logger = LoggerFactory.getLogger(CiPipelineMavenServiceImpl.class);
- private final String ID = "id";
- private final String OBJECT_VERSION_NUMBER = "objectVersionNumber";
+ private static final String ID = "id";
+ private static final String OBJECT_VERSION_NUMBER = "objectVersionNumber";
@Autowired
private CiPipelineMavenMapper ciPipelineMavenMapper;
@@ -71,6 +64,10 @@ public class CiPipelineMavenServiceImpl implements CiPipelineMavenService {
private DevopsCiMavenSettingsMapper devopsCiMavenSettingsMapper;
@Autowired
private DevopsCiJobMapper devopsCiJobMapper;
+ @Autowired
+ private AppServiceMavenVersionService appServiceMavenVersionService;
+ @Autowired
+ private AppServiceVersionService appServiceVersionService;
@Autowired
private RdupmClient rdupmClient;
@@ -78,10 +75,6 @@ public class CiPipelineMavenServiceImpl implements CiPipelineMavenService {
@Autowired
private BaseServiceClientOperator baseServiceClientOperator;
- @Autowired
- @Qualifier(value = "restTemplateForIp")
- private RestTemplate restTemplateForIp;
-
@Transactional(rollbackFor = Exception.class)
@Override
public void createOrUpdate(CiPipelineMavenDTO ciPipelineMavenDTO) {
@@ -110,7 +103,8 @@ public void createOrUpdate(Long nexusRepoId,
MultipartFile file,
String mavenRepoUrl,
String username,
- String password) {
+ String password,
+ String version) {
ExceptionUtil.wrapExWithCiEx(() -> {
AppServiceDTO appServiceDTO = appServiceService.baseQueryByToken(Objects.requireNonNull(token));
if (appServiceDTO == null) {
@@ -188,6 +182,33 @@ public void createOrUpdate(Long nexusRepoId,
}
}
createOrUpdate(ciPipelineMavenDTO);
+ // 判断流水线中是否包含发布应用服务版本步骤,
+ AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQueryByAppServiceIdAndVersion(appServiceDTO.getId(), version);
+ if (appServiceVersionDTO != null) {
+ AppServiceMavenVersionDTO appServiceMavenVersionDTO = appServiceMavenVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId());
+ if (appServiceMavenVersionDTO == null) {
+ appServiceMavenVersionDTO = new AppServiceMavenVersionDTO();
+ appServiceMavenVersionDTO.setAppServiceVersionId(appServiceVersionDTO.getId());
+ appServiceMavenVersionDTO.setVersion(ciPipelineMavenDTO.getVersion());
+ appServiceMavenVersionDTO.setPassword(ciPipelineMavenDTO.getPassword());
+ appServiceMavenVersionDTO.setMavenRepoUrl(ciPipelineMavenDTO.getMavenRepoUrl());
+ appServiceMavenVersionDTO.setUsername(ciPipelineMavenDTO.getUsername());
+ appServiceMavenVersionDTO.setNexusRepoId(ciPipelineMavenDTO.getNexusRepoId());
+ appServiceMavenVersionDTO.setGroupId(ciPipelineMavenDTO.getGroupId());
+ appServiceMavenVersionDTO.setArtifactId(ciPipelineMavenDTO.getArtifactId());
+ appServiceMavenVersionService.create(appServiceMavenVersionDTO);
+ } else {
+ appServiceMavenVersionDTO.setVersion(ciPipelineMavenDTO.getVersion());
+ appServiceMavenVersionDTO.setPassword(ciPipelineMavenDTO.getPassword());
+ appServiceMavenVersionDTO.setMavenRepoUrl(ciPipelineMavenDTO.getMavenRepoUrl());
+ appServiceMavenVersionDTO.setUsername(ciPipelineMavenDTO.getUsername());
+ appServiceMavenVersionDTO.setNexusRepoId(ciPipelineMavenDTO.getNexusRepoId());
+ appServiceMavenVersionDTO.setGroupId(ciPipelineMavenDTO.getGroupId());
+ appServiceMavenVersionDTO.setArtifactId(ciPipelineMavenDTO.getArtifactId());
+ appServiceMavenVersionService.baseUpdate(appServiceMavenVersionDTO);
+ }
+ }
+
});
}
@@ -212,7 +233,7 @@ private String getJarSnapshotTimestamp(String nexusUrl, String repositoryName, S
return parsedVersion == null ? ciPipelineMavenDTO.getVersion() : parsedVersion;
} catch (Exception ex) {
if (logger.isDebugEnabled()) {
- logger.debug("Ex occurred when parse JarSnapshotTimestamp for {}:{}", ciPipelineMavenDTO.getGroupId(), ciPipelineMavenDTO.getArtifactId(), ciPipelineMavenDTO.getVersion());
+ logger.debug("Ex occurred when parse JarSnapshotTimestamp for {}:{}:{}", ciPipelineMavenDTO.getGroupId(), ciPipelineMavenDTO.getArtifactId(), ciPipelineMavenDTO.getVersion());
logger.debug("The ex is:", ex);
}
return ciPipelineMavenDTO.getVersion();
@@ -257,7 +278,7 @@ public String getCustomJarSnapshotTimestamp(String mavenRepoUrl, String userName
} catch (Exception ex) {
if (logger.isInfoEnabled()) {
- logger.info("Ex occurred when parse JarSnapshotTimestamp for {}:{}", ciPipelineMavenDTO.getGroupId(), ciPipelineMavenDTO.getArtifactId(), ciPipelineMavenDTO.getVersion());
+ logger.info("Ex occurred when parse JarSnapshotTimestamp for {}:{}:{}", ciPipelineMavenDTO.getGroupId(), ciPipelineMavenDTO.getArtifactId(), ciPipelineMavenDTO.getVersion());
logger.info("The ex is:", ex);
}
return ciPipelineMavenDTO.getVersion();
@@ -286,4 +307,22 @@ public CiPipelineMavenDTO queryByGitlabPipelineId(Long appServiceId, Long gitlab
ciPipelineMavenDTO.setJobName(jobName);
return ciPipelineMavenMapper.selectOne(ciPipelineMavenDTO);
}
+
+ @Override
+ public CiPipelineMavenDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId) {
+ Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL);
+ Assert.notNull(gitlabPipelineId, ResourceCheckConstant.ERROR_GITLAB_PIPELINE_ID_IS_NULL);
+
+ return ciPipelineMavenMapper.queryPipelineLatestMaven(appServiceId, gitlabPipelineId);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteByAppServiceId(Long appServiceId) {
+ Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL);
+
+ CiPipelineMavenDTO ciPipelineMavenDTO = new CiPipelineMavenDTO();
+ ciPipelineMavenDTO.setAppServiceId(appServiceId);
+ ciPipelineMavenMapper.delete(ciPipelineMavenDTO);
+ }
}
diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java
index f337086013..295995962d 100644
--- a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java
+++ b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java
@@ -4,15 +4,14 @@
import java.util.Comparator;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
import com.google.common.base.Joiner;
-import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.hzero.core.base.BaseConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
-import io.choerodon.devops.api.vo.template.CiTemplateJobGroupVO;
import io.choerodon.devops.app.service.CiTemplateJobGroupService;
import io.choerodon.devops.infra.dto.CiTemplateJobGroupDTO;
import io.choerodon.devops.infra.enums.CiTemplateJobGroupTypeEnum;
@@ -48,8 +47,7 @@ public List listAllGroups() {
@Override
public List listNonEmptyGroups() {
List