diff --git a/.gitignore b/.gitignore index 4f9e02c..a5ce865 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,5 @@ hs_err_pid* .flattened-pom.xml /bin/nacos-server-2.3.0/logs/ /bin/nacos-server-2.3.0/data/protocol/raft/*/log/ +/bin/nacos/nacos-server-2.3.0/logs/ +/bin/nacos/nacos-server-2.3.0/data/protocol/raft/*/log/ diff --git a/.mvn/maven.config b/.mvn/maven.config index 9b1795b..1a1c7ef 100644 --- a/.mvn/maven.config +++ b/.mvn/maven.config @@ -1 +1,2 @@ +-Dversion=1.0-SNAPSHOT -Dadapter-revision=1.0.0 \ No newline at end of file diff --git a/bin/maven/settings.xml b/bin/maven/settings.xml new file mode 100644 index 0000000..be4117f --- /dev/null +++ b/bin/maven/settings.xml @@ -0,0 +1,98 @@ + + + D:\work\maven-space\ + + org.eclipse.jkube + org.springframework.boot + + + + + + snapshots + devops + LianYu_123# + + + public + devops + LianYu_123# + + + releases + devops + LianYu_123# + + + + + snapshots + snapshots + http://119.3.241.212:8088/repository/maven-snapshots/ + com.lianyu:*-SNAPSHOT + + + releases + releases + http://119.3.241.212:8088/repository/maven-releases/ + com.lianyu:*-RELEASE + + + public + public + http://119.3.241.212:8088/repository/maven-public/ + *,!com.qc.soft.*:*,!com.lianyu:*-SNAPSHOT,!com.lianyu:*-RELEASE + + + + + + nexus-env-profile + + + public + http://119.3.241.212:8088/repository/maven-public/ + + true + always + + + true + always + + + + snapshots + http://119.3.241.212:8088/repository/maven-snapshots/ + + true + always + + + + releases + http://119.3.241.212:8088/repository/maven-releases/ + + true + always + + + + + + + snapshots + snapshots + http://119.3.241.212:8088/repository/maven-snapshots/ + snapshots + snapshots + http://119.3.241.212:8088/repository/maven-releases/ + + + + + nexus-env-profile + + diff --git a/bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-core.yml b/bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-core.yml deleted file mode 100644 index 7655a55..0000000 --- a/bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-core.yml +++ /dev/null @@ -1,5 +0,0 @@ -server: - port: 9090 -spring: - application: - name: deploy-ease-core \ No newline at end of file diff --git a/bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-synchronizer.yml b/bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-synchronizer.yml deleted file mode 100644 index 8ec0e4c..0000000 --- a/bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-synchronizer.yml +++ /dev/null @@ -1,5 +0,0 @@ -server: - port: 0 -spring: - application: - name: deploy-ease-synchronizer-${TENANT_CODE} \ No newline at end of file diff --git a/bin/nacos-start.cmd b/bin/nacos-start.cmd deleted file mode 100644 index c1965ae..0000000 --- a/bin/nacos-start.cmd +++ /dev/null @@ -1 +0,0 @@ -D:\work\github-workspace\deploy-ease-backend\bin\nacos-server-2.3.0\bin\startup.cmd -m standalone \ No newline at end of file diff --git a/bin/nacos-logo.ico b/bin/nacos/nacos-logo.ico similarity index 100% rename from bin/nacos-logo.ico rename to bin/nacos/nacos-logo.ico diff --git a/bin/nacos-logo.png b/bin/nacos/nacos-logo.png similarity index 100% rename from bin/nacos-logo.png rename to bin/nacos/nacos-logo.png diff --git a/bin/nacos-server-2.3.0/LICENSE b/bin/nacos/nacos-server-2.3.0/LICENSE similarity index 100% rename from bin/nacos-server-2.3.0/LICENSE rename to bin/nacos/nacos-server-2.3.0/LICENSE diff --git a/bin/nacos-server-2.3.0/NOTICE b/bin/nacos/nacos-server-2.3.0/NOTICE similarity index 100% rename from bin/nacos-server-2.3.0/NOTICE rename to bin/nacos/nacos-server-2.3.0/NOTICE diff --git a/bin/nacos-server-2.3.0/bin/shutdown.cmd b/bin/nacos/nacos-server-2.3.0/bin/shutdown.cmd similarity index 100% rename from bin/nacos-server-2.3.0/bin/shutdown.cmd rename to bin/nacos/nacos-server-2.3.0/bin/shutdown.cmd diff --git a/bin/nacos-server-2.3.0/bin/shutdown.sh b/bin/nacos/nacos-server-2.3.0/bin/shutdown.sh similarity index 100% rename from bin/nacos-server-2.3.0/bin/shutdown.sh rename to bin/nacos/nacos-server-2.3.0/bin/shutdown.sh diff --git a/bin/nacos-server-2.3.0/bin/start.cmd b/bin/nacos/nacos-server-2.3.0/bin/start.cmd similarity index 100% rename from bin/nacos-server-2.3.0/bin/start.cmd rename to bin/nacos/nacos-server-2.3.0/bin/start.cmd diff --git a/bin/nacos-server-2.3.0/bin/startup.cmd b/bin/nacos/nacos-server-2.3.0/bin/startup.cmd similarity index 100% rename from bin/nacos-server-2.3.0/bin/startup.cmd rename to bin/nacos/nacos-server-2.3.0/bin/startup.cmd diff --git a/bin/nacos-server-2.3.0/bin/startup.sh b/bin/nacos/nacos-server-2.3.0/bin/startup.sh similarity index 100% rename from bin/nacos-server-2.3.0/bin/startup.sh rename to bin/nacos/nacos-server-2.3.0/bin/startup.sh diff --git a/bin/nacos-server-2.3.0/conf/1.4.0-ipv6_support-update.sql b/bin/nacos/nacos-server-2.3.0/conf/1.4.0-ipv6_support-update.sql similarity index 100% rename from bin/nacos-server-2.3.0/conf/1.4.0-ipv6_support-update.sql rename to bin/nacos/nacos-server-2.3.0/conf/1.4.0-ipv6_support-update.sql diff --git a/bin/nacos-server-2.3.0/conf/announcement.conf b/bin/nacos/nacos-server-2.3.0/conf/announcement.conf similarity index 100% rename from bin/nacos-server-2.3.0/conf/announcement.conf rename to bin/nacos/nacos-server-2.3.0/conf/announcement.conf diff --git a/bin/nacos-server-2.3.0/conf/application.properties b/bin/nacos/nacos-server-2.3.0/conf/application.properties similarity index 100% rename from bin/nacos-server-2.3.0/conf/application.properties rename to bin/nacos/nacos-server-2.3.0/conf/application.properties diff --git a/bin/nacos-server-2.3.0/conf/application.properties.example b/bin/nacos/nacos-server-2.3.0/conf/application.properties.example similarity index 100% rename from bin/nacos-server-2.3.0/conf/application.properties.example rename to bin/nacos/nacos-server-2.3.0/conf/application.properties.example diff --git a/bin/nacos-server-2.3.0/conf/cluster.conf.example b/bin/nacos/nacos-server-2.3.0/conf/cluster.conf.example similarity index 100% rename from bin/nacos-server-2.3.0/conf/cluster.conf.example rename to bin/nacos/nacos-server-2.3.0/conf/cluster.conf.example diff --git a/bin/nacos-server-2.3.0/conf/console-guide.conf b/bin/nacos/nacos-server-2.3.0/conf/console-guide.conf similarity index 100% rename from bin/nacos-server-2.3.0/conf/console-guide.conf rename to bin/nacos/nacos-server-2.3.0/conf/console-guide.conf diff --git a/bin/nacos-server-2.3.0/conf/derby-schema.sql b/bin/nacos/nacos-server-2.3.0/conf/derby-schema.sql similarity index 100% rename from bin/nacos-server-2.3.0/conf/derby-schema.sql rename to bin/nacos/nacos-server-2.3.0/conf/derby-schema.sql diff --git a/bin/nacos-server-2.3.0/conf/mysql-schema.sql b/bin/nacos/nacos-server-2.3.0/conf/mysql-schema.sql similarity index 100% rename from bin/nacos-server-2.3.0/conf/mysql-schema.sql rename to bin/nacos/nacos-server-2.3.0/conf/mysql-schema.sql diff --git a/bin/nacos-server-2.3.0/conf/nacos-logback.xml b/bin/nacos/nacos-server-2.3.0/conf/nacos-logback.xml similarity index 100% rename from bin/nacos-server-2.3.0/conf/nacos-logback.xml rename to bin/nacos/nacos-server-2.3.0/conf/nacos-logback.xml diff --git a/bin/nacos-server-2.3.0/data/protocol/raft/naming_instance_metadata/meta-data/raft_meta b/bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_instance_metadata/meta-data/raft_meta similarity index 100% rename from bin/nacos-server-2.3.0/data/protocol/raft/naming_instance_metadata/meta-data/raft_meta rename to bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_instance_metadata/meta-data/raft_meta diff --git a/bin/nacos-server-2.3.0/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_9/__raft_snapshot_meta b/bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_9/__raft_snapshot_meta similarity index 100% rename from bin/nacos-server-2.3.0/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_9/__raft_snapshot_meta rename to bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_instance_metadata/snapshot/snapshot_9/__raft_snapshot_meta diff --git a/bin/nacos-server-2.3.0/data/protocol/raft/naming_persistent_service_v2/meta-data/raft_meta b/bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_persistent_service_v2/meta-data/raft_meta similarity index 100% rename from bin/nacos-server-2.3.0/data/protocol/raft/naming_persistent_service_v2/meta-data/raft_meta rename to bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_persistent_service_v2/meta-data/raft_meta diff --git a/bin/nacos-server-2.3.0/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_7/__raft_snapshot_meta b/bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_7/__raft_snapshot_meta similarity index 100% rename from bin/nacos-server-2.3.0/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_7/__raft_snapshot_meta rename to bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_persistent_service_v2/snapshot/snapshot_7/__raft_snapshot_meta diff --git a/bin/nacos-server-2.3.0/data/protocol/raft/naming_service_metadata/meta-data/raft_meta b/bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_service_metadata/meta-data/raft_meta similarity index 100% rename from bin/nacos-server-2.3.0/data/protocol/raft/naming_service_metadata/meta-data/raft_meta rename to bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_service_metadata/meta-data/raft_meta diff --git a/bin/nacos-server-2.3.0/data/protocol/raft/naming_service_metadata/snapshot/snapshot_7/__raft_snapshot_meta b/bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_service_metadata/snapshot/snapshot_7/__raft_snapshot_meta similarity index 100% rename from bin/nacos-server-2.3.0/data/protocol/raft/naming_service_metadata/snapshot/snapshot_7/__raft_snapshot_meta rename to bin/nacos/nacos-server-2.3.0/data/protocol/raft/naming_service_metadata/snapshot/snapshot_7/__raft_snapshot_meta diff --git a/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-core.yml b/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-core.yml new file mode 100644 index 0000000..d1ee2e5 --- /dev/null +++ b/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-core.yml @@ -0,0 +1,8 @@ +server: + port: 9090 +spring: + application: + name: deploy-ease-core +deploy-ease: + adapter: + path: D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\target\deploy-ease-tenant-adapter-1.0.0.jar \ No newline at end of file diff --git a/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-tenant-adapter.yml b/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-tenant-adapter.yml new file mode 100644 index 0000000..ab04f7c --- /dev/null +++ b/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/business/deploy-ease-tenant-adapter.yml @@ -0,0 +1,5 @@ +server: + port: 0 +spring: + application: + name: deploy-ease-tenant-adapter-${TENANT_CODE} \ No newline at end of file diff --git a/bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/common/common.yml b/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/common/common.yml similarity index 89% rename from bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/common/common.yml rename to bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/common/common.yml index 362d4b9..3b16bd9 100644 --- a/bin/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/common/common.yml +++ b/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/deploy-ease-dev/common/common.yml @@ -1,4 +1,9 @@ spring: + http: + encoding: + charset: UTF-8 + enabled: true + force: true jpa: show-sql: true properties: diff --git a/bin/nacos-server-2.3.0/data/tenant-config-data/iscmtech-dev/common/db.yml b/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/iscmtech-dev/common/db.yml similarity index 100% rename from bin/nacos-server-2.3.0/data/tenant-config-data/iscmtech-dev/common/db.yml rename to bin/nacos/nacos-server-2.3.0/data/tenant-config-data/iscmtech-dev/common/db.yml diff --git a/bin/nacos-server-2.3.0/data/tenant-config-data/iscmtech-dev/scp/scp-service-manager.yml b/bin/nacos/nacos-server-2.3.0/data/tenant-config-data/iscmtech-dev/scp/scp-service-manager.yml similarity index 100% rename from bin/nacos-server-2.3.0/data/tenant-config-data/iscmtech-dev/scp/scp-service-manager.yml rename to bin/nacos/nacos-server-2.3.0/data/tenant-config-data/iscmtech-dev/scp/scp-service-manager.yml diff --git a/bin/nacos/nacos-start.cmd b/bin/nacos/nacos-start.cmd new file mode 100644 index 0000000..de37e9f --- /dev/null +++ b/bin/nacos/nacos-start.cmd @@ -0,0 +1 @@ +D:\work\github-workspace\deploy-ease-backend\bin\nacos\nacos-server-2.3.0\bin\startup.cmd -m standalone \ No newline at end of file diff --git a/deploy-ease-api/pom.xml b/deploy-ease-api/pom.xml index 057e9cc..ae0b58c 100644 --- a/deploy-ease-api/pom.xml +++ b/deploy-ease-api/pom.xml @@ -4,6 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 deploy-ease-api + jar @@ -20,8 +21,8 @@ com.qc.soft - deploy-ease - 1.0-SNAPSHOT + deploy-ease-parent + ${version} \ No newline at end of file diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IDictionaryController.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IDictionaryApi.java similarity index 71% rename from deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IDictionaryController.java rename to deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IDictionaryApi.java index 506509f..b3b2e7b 100644 --- a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IDictionaryController.java +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IDictionaryApi.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.api.controller; +package com.qc.soft.deploy.ease.api; import com.qc.soft.deploy.ease.api.response.DictionaryResponse; import com.qc.soft.deploy.ease.api.response.TenantDictionaryResponse; @@ -9,13 +9,13 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController -@RequestMapping("/deploy-ease/dict") -public interface IDictionaryController { +@RequestMapping("/api/v1") +public interface IDictionaryApi { - @GetMapping("/system") + @GetMapping("/dict/system") List systemDicts(); - @GetMapping("/tenant") + @GetMapping("/dict/tenant") List tenantDicts(); } diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IJenkinsController.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IJenkinsApi.java similarity index 54% rename from deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IJenkinsController.java rename to deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IJenkinsApi.java index a78dcff..8281d65 100644 --- a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IJenkinsController.java +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IJenkinsApi.java @@ -1,11 +1,11 @@ -package com.qc.soft.deploy.ease.api.controller; +package com.qc.soft.deploy.ease.api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping("/deploy-ease/jenkins") -public interface IJenkinsController { +@RequestMapping("/api/v1") +public interface IJenkinsApi { } diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IK8sController.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IK8sApi.java similarity index 91% rename from deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IK8sController.java rename to deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IK8sApi.java index a52eb80..9aaf0eb 100644 --- a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IK8sController.java +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IK8sApi.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.api.controller; +package com.qc.soft.deploy.ease.api; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/deploy-ease/k8s") -public interface IK8sController { +public interface IK8sApi { // @GetMapping("namespaces") diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/INacosController.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/INacosApi.java similarity index 68% rename from deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/INacosController.java rename to deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/INacosApi.java index 208a307..00fdf9b 100644 --- a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/INacosController.java +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/INacosApi.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.api.controller; +package com.qc.soft.deploy.ease.api; import org.springframework.web.bind.annotation.GetMapping; @@ -6,8 +6,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping("/deploy-ease/nacos") -public interface INacosController { +@RequestMapping("/api/nacos") +public interface INacosApi { @GetMapping("/instances") void instances(); diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IProjectController.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IProjectApi.java similarity index 82% rename from deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IProjectController.java rename to deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IProjectApi.java index 9e2ccf1..6a62d43 100644 --- a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IProjectController.java +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IProjectApi.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.api.controller; +package com.qc.soft.deploy.ease.api; import com.qc.soft.deploy.ease.api.response.ProjectResponse; import org.springframework.web.bind.annotation.GetMapping; @@ -9,7 +9,7 @@ import java.util.List; @RestController @RequestMapping("/deploy-ease/project") -public interface IProjectController { +public interface IProjectApi { @GetMapping("/list") diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/ITenantApi.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/ITenantApi.java new file mode 100644 index 0000000..ed0625f --- /dev/null +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/ITenantApi.java @@ -0,0 +1,16 @@ +package com.qc.soft.deploy.ease.api; + + +import com.qc.soft.deploy.ease.api.response.TenantAdapterContextResponse; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/v1") +public interface ITenantApi { + + @GetMapping("/tenant/getAdapterContext") + TenantAdapterContextResponse tenantAdapterContext(); + +} diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/ITestController.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/ITestApi.java similarity index 77% rename from deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/ITestController.java rename to deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/ITestApi.java index c7db786..54a3aa1 100644 --- a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/ITestController.java +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/ITestApi.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.api.controller; +package com.qc.soft.deploy.ease.api; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/deploy-ease/test") -public interface ITestController { +public interface ITestApi { @GetMapping("test") void test(); diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IUserController.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IUserApi.java similarity index 79% rename from deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IUserController.java rename to deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IUserApi.java index 1272c70..1610fa6 100644 --- a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/controller/IUserController.java +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/IUserApi.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.api.controller; +package com.qc.soft.deploy.ease.api; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -6,7 +6,7 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/deploy-ease/user") -public interface IUserController { +public interface IUserApi { @GetMapping("/login") diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/base/BaseResponse.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/base/BaseResponse.java index 2eb772a..def7cc7 100644 --- a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/base/BaseResponse.java +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/base/BaseResponse.java @@ -1,11 +1,16 @@ package com.qc.soft.deploy.ease.api.base; +import lombok.Data; + import java.io.Serializable; import java.time.LocalDateTime; +@Data public abstract class BaseResponse implements Serializable { + private Long id; + private LocalDateTime createTime; private LocalDateTime updateTime; diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/JenkinsResponse.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/JenkinsResponse.java new file mode 100644 index 0000000..49c1f06 --- /dev/null +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/JenkinsResponse.java @@ -0,0 +1,23 @@ +package com.qc.soft.deploy.ease.api.response; + +import com.qc.soft.deploy.ease.api.base.BaseResponse; +import lombok.Data; + +@Data +public class JenkinsResponse extends BaseResponse { + + private String code; + + private String name; + + private String username; + + private String password; + + private String url; + + private String envCode; + + private String tenantCode; + +} diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantAdapterContextResponse.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantAdapterContextResponse.java new file mode 100644 index 0000000..c617718 --- /dev/null +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantAdapterContextResponse.java @@ -0,0 +1,15 @@ +package com.qc.soft.deploy.ease.api.response; + +import com.qc.soft.deploy.ease.api.base.BaseResponse; +import lombok.Data; + +import java.util.List; + +@Data +public class TenantAdapterContextResponse extends BaseResponse { + + private TenantResponse tenant; + + private List envList; + +} diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantEnvJenkinsResponse.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantEnvJenkinsResponse.java new file mode 100644 index 0000000..a2c5cff --- /dev/null +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantEnvJenkinsResponse.java @@ -0,0 +1,17 @@ +package com.qc.soft.deploy.ease.api.response; + +import com.qc.soft.deploy.ease.api.base.BaseResponse; +import lombok.Data; + +@Data +public class TenantEnvJenkinsResponse extends BaseResponse { + + private String viewName; + + private String username; + + private String password; + + private String url; + +} diff --git a/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantEnvResponse.java b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantEnvResponse.java new file mode 100644 index 0000000..6ec56a1 --- /dev/null +++ b/deploy-ease-api/src/main/java/com/qc/soft/deploy/ease/api/response/TenantEnvResponse.java @@ -0,0 +1,20 @@ +package com.qc.soft.deploy.ease.api.response; + + +import com.qc.soft.deploy.ease.api.base.BaseResponse; +import lombok.Data; + +@Data +public class TenantEnvResponse extends BaseResponse { + + private String code; + + private String name; + + private int type; + + private boolean isVpn; + + private TenantEnvJenkinsResponse jenkins; + +} diff --git a/deploy-ease-basic/pom.xml b/deploy-ease-basic/pom.xml new file mode 100644 index 0000000..fd05fb2 --- /dev/null +++ b/deploy-ease-basic/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + deploy-ease-basic + jar + + + + org.springframework.boot + spring-boot-starter-web + + + org.projectlombok + lombok + provided + + + com.alibaba + transmittable-thread-local + + + jakarta.persistence + jakarta.persistence-api + + + cn.hutool + hutool-all + + + org.apache.httpcomponents.client5 + httpclient5 + + + com.alibaba.fastjson2 + fastjson2 + + + org.apache.commons + commons-lang3 + + + + + com.qc.soft + deploy-ease-parent + ${version} + + + \ No newline at end of file diff --git a/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalExceptionHandler.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalExceptionHandler.java new file mode 100644 index 0000000..fd56701 --- /dev/null +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalExceptionHandler.java @@ -0,0 +1,37 @@ +package com.qc.soft.framework.basic.config; + +import com.qc.soft.framework.basic.entity.BasicResponseState; +import com.qc.soft.framework.basic.exception.BasicException; +import com.qc.soft.framework.basic.web.ApiResult; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +@RestControllerAdvice +@Slf4j +public class GlobalExceptionHandler { + + public GlobalExceptionHandler() { + log.info("Framework global exception handler registered successfully!!!"); + } + + @Resource + private HttpServletRequest httpServletRequest; + + @ExceptionHandler(BasicException.class) + public Object parameterBodyMissingExceptionHandler(BasicException exception) { + log.error("An exception occurred while requesting an interface:{}", httpServletRequest.getRequestURI(), exception); + if (!httpServletRequest.getRequestURI().startsWith("/api/v1")) { + return exception; + } + if (StringUtils.isNotEmpty(exception.getMessage())) { + BasicResponseState error = exception.getError(); + error.setMessage(exception.getMessage()); + } + return ApiResult.builder().code(exception.getError().getCode()).message(exception.getError().getMessage()).build(); + } +} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalResponseHandler.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalResponseHandler.java similarity index 56% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalResponseHandler.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalResponseHandler.java index b6a084c..9b8623b 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalResponseHandler.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalResponseHandler.java @@ -1,6 +1,8 @@ -package com.qc.soft.deploy.ease.config; +package com.qc.soft.framework.basic.config; -import com.qc.soft.deploy.ease.enums.ResponseCode; +import com.qc.soft.framework.basic.enums.IBasicState; +import com.qc.soft.framework.basic.web.ApiResult; +import lombok.extern.slf4j.Slf4j; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -9,8 +11,13 @@ import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; @ControllerAdvice +@Slf4j public class GlobalResponseHandler implements ResponseBodyAdvice { + public GlobalResponseHandler() { + log.info("Framework global response handler registered successfully!!!"); + } + @Override public boolean supports(MethodParameter returnType, Class converterType) { return true; @@ -18,18 +25,15 @@ public class GlobalResponseHandler implements ResponseBodyAdvice { @Override public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, org.springframework.http.server.ServerHttpRequest request, ServerHttpResponse response) { - if (body instanceof ResponseEntity) { + if (!request.getURI().getPath().startsWith("/api/v1")) { return body; } - if (body instanceof String) { + if (body instanceof ResponseEntity || body instanceof ApiResult) { return body; } if (body == null) { - return ApiResponse.builder().code(ResponseCode.SUCCESS.getCode()).message(ResponseCode.SUCCESS.getMessage()).build(); + return ApiResult.builder().code(IBasicState.SUCCESS.getCode()).message(IBasicState.SUCCESS.getMessage()).build(); } - if (body instanceof ApiResponse) { - return body; - } - return ApiResponse.builder().data(body).code(ResponseCode.SUCCESS.getCode()).message(ResponseCode.SUCCESS.getMessage()).build(); + return ApiResult.builder().data(body).code(IBasicState.SUCCESS.getCode()).message(IBasicState.SUCCESS.getMessage()).build(); } } diff --git a/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalTenantInterceptor.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalTenantInterceptor.java new file mode 100644 index 0000000..d112957 --- /dev/null +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalTenantInterceptor.java @@ -0,0 +1,42 @@ +package com.qc.soft.framework.basic.config; + +import com.qc.soft.framework.basic.context.TenantContext; +import com.qc.soft.framework.basic.enums.IBasicState; +import com.qc.soft.framework.basic.exception.BasicException; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Import; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + + +@Slf4j +@Component +@Import({GlobalResponseHandler.class, GlobalExceptionHandler.class}) +public class GlobalTenantInterceptor implements HandlerInterceptor { + + + public GlobalTenantInterceptor() { + log.info("Framework global tenant interceptor registered successfully!!!"); + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + String tenantCode = request.getHeader("x-tenant-code"); + if (null == tenantCode || StringUtils.isEmpty(tenantCode)) { + throw new BasicException(IBasicState.TENANT_DOES_NOT_EXIST, "请求头未携带:x-tenant-code"); + } + TenantContext.setCurrentTenant(tenantCode); + return true; + } + + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + TenantContext.clear(); + } +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/WebMvcConfig.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalWebConfigurer.java similarity index 52% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/WebMvcConfig.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalWebConfigurer.java index 8191219..0dad3ca 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/WebMvcConfig.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/config/GlobalWebConfigurer.java @@ -1,15 +1,18 @@ -package com.qc.soft.deploy.ease.config; +package com.qc.soft.framework.basic.config; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.qc.soft.deploy.ease.interceptor.TenantInterceptor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.AutoConfigureBefore; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; @@ -17,14 +20,16 @@ import java.text.SimpleDateFormat; import java.util.List; @Configuration -public class WebMvcConfig extends WebMvcConfigurerAdapter { - +@Slf4j +@Import(GlobalTenantInterceptor.class) +public class GlobalWebConfigurer implements WebMvcConfigurer { @Resource - private TenantInterceptor tenantInterceptor; - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(tenantInterceptor).addPathPatterns("/**"); + private GlobalTenantInterceptor globalTenantInterceptor; + + + public GlobalWebConfigurer() { + log.info("Framework global web configurer registered successfully!!!"); } @Override @@ -35,6 +40,20 @@ public class WebMvcConfig extends WebMvcConfigurerAdapter { mapper.registerModule(new JavaTimeModule()); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); converters.add(new MappingJackson2HttpMessageConverter(mapper)); - super.configureMessageConverters(converters); } -} + + @Override + public void addInterceptors(InterceptorRegistry registry) { + //TODO 搜索引用的项目继承这个拦截器没有,如果继承了就自动加载,比如 自己写一个注解,将拦截的路径都自动加载 + registry.addInterceptor(globalTenantInterceptor).addPathPatterns("/**").order(-9999); + } + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") // 允许跨域的路径 + .allowedOrigins("*") // 允许跨域请求的域名 + .allowedHeaders("*") // 允许的请求头 + .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法 + .allowCredentials(true); // 是否允许证书(cookies) + } +} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/context/TenantContext.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/context/TenantContext.java similarity index 90% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/context/TenantContext.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/context/TenantContext.java index 8745edd..326e687 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/context/TenantContext.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/context/TenantContext.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.context; +package com.qc.soft.framework.basic.context; import com.alibaba.ttl.TransmittableThreadLocal; diff --git a/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/entity/BaseEntity.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/entity/BaseEntity.java new file mode 100644 index 0000000..f1f967d --- /dev/null +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/entity/BaseEntity.java @@ -0,0 +1,28 @@ +package com.qc.soft.framework.basic.entity; + +import javax.persistence.Column; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import java.io.Serializable; +import java.time.LocalDateTime; + + +@MappedSuperclass +public abstract class BaseEntity implements Serializable { + + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false, updatable = false) + private LocalDateTime createTime; + + @Column(nullable = false) + private LocalDateTime updateTime; + + private Boolean isDeleted; + +} diff --git a/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/entity/BasicResponseState.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/entity/BasicResponseState.java new file mode 100644 index 0000000..a20cd42 --- /dev/null +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/entity/BasicResponseState.java @@ -0,0 +1,16 @@ +package com.qc.soft.framework.basic.entity; + +import lombok.Builder; +import lombok.Data; +import lombok.ToString; + +@Data +@Builder +@ToString +public class BasicResponseState { + + private String code; + + private String message; + +} diff --git a/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/enums/IBasicState.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/enums/IBasicState.java new file mode 100644 index 0000000..4e44141 --- /dev/null +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/enums/IBasicState.java @@ -0,0 +1,16 @@ +package com.qc.soft.framework.basic.enums; + +import com.qc.soft.framework.basic.entity.BasicResponseState; + +public interface IBasicState { + + + BasicResponseState SUCCESS = BasicResponseState.builder().code("SUCCESS").message("操作成功").build(); + + BasicResponseState FAILURE = BasicResponseState.builder().code("FAILURE").message("操作失败").build(); + + BasicResponseState TENANT_DOES_NOT_EXIST = BasicResponseState.builder().code("TENANT_DOES_NOT_EXIST").message("租户不存在").build(); + + BasicResponseState TENANT_NOT_ENABLED = BasicResponseState.builder().code("TENANT_NOT_ENABLED").message("%s租户未启用").build(); + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/JenkinsJobStatus.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/enums/JenkinsJobStatus.java similarity index 88% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/JenkinsJobStatus.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/enums/JenkinsJobStatus.java index 28fa291..c7b7e75 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/JenkinsJobStatus.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/enums/JenkinsJobStatus.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.enums; +package com.qc.soft.framework.basic.enums; import lombok.Getter; diff --git a/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/exception/BasicException.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/exception/BasicException.java new file mode 100644 index 0000000..a3cbef2 --- /dev/null +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/exception/BasicException.java @@ -0,0 +1,32 @@ +package com.qc.soft.framework.basic.exception; + + +import com.qc.soft.framework.basic.entity.BasicResponseState; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class BasicException extends RuntimeException { + + private BasicResponseState error; + + public BasicException(String message) { + super(message, null); + } + + public BasicException(BasicResponseState error) { + super(error.getMessage(), null); + this.error = error; + } + + public BasicException(BasicResponseState error, String message) { + super(message, null); + this.error = error; + } + + public BasicException(BasicResponseState error, Throwable e) { + super(error.getMessage(), e); + this.error = error; + } +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/BasicAuthUtils.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/BasicAuthUtils.java similarity index 87% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/BasicAuthUtils.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/BasicAuthUtils.java index 3313709..67ea7bb 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/BasicAuthUtils.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/BasicAuthUtils.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.utils; +package com.qc.soft.framework.basic.utils; import java.util.Base64; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/DateUtils.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/DateUtils.java similarity index 98% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/DateUtils.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/DateUtils.java index f7e887c..b5abf9c 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/DateUtils.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/DateUtils.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.utils; +package com.qc.soft.framework.basic.utils; import java.text.ParseException; import java.text.SimpleDateFormat; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/FileUtils.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/FileUtils.java similarity index 97% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/FileUtils.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/FileUtils.java index fb111a8..4cdb967 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/FileUtils.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/FileUtils.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.utils; +package com.qc.soft.framework.basic.utils; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.Resource; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/HttpUtils.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/HttpUtils.java similarity index 98% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/HttpUtils.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/HttpUtils.java index d346c91..70e1c31 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/HttpUtils.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/HttpUtils.java @@ -1,10 +1,9 @@ -package com.qc.soft.deploy.ease.utils; +package com.qc.soft.framework.basic.utils; import cn.hutool.core.map.MapUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.apache.hc.client5.http.classic.methods.HttpDelete; import org.apache.hc.client5.http.classic.methods.HttpGet; import org.apache.hc.client5.http.classic.methods.HttpPost; @@ -15,7 +14,6 @@ import org.apache.hc.client5.http.impl.classic.HttpClients; import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; -import org.apache.logging.log4j.util.Strings; import java.io.File; import java.io.FileOutputStream; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/MapUtils.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/MapUtils.java similarity index 94% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/MapUtils.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/MapUtils.java index 10017fe..b1b3576 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/MapUtils.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/MapUtils.java @@ -1,8 +1,8 @@ -package com.qc.soft.deploy.ease.utils; +package com.qc.soft.framework.basic.utils; -import java.util.Map; -import java.util.HashMap; import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; public class MapUtils { public static Map toMap(Object object) { diff --git a/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/ProcessUtils.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/ProcessUtils.java new file mode 100644 index 0000000..c556944 --- /dev/null +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/ProcessUtils.java @@ -0,0 +1,36 @@ +package com.qc.soft.framework.basic.utils; + +import lombok.extern.slf4j.Slf4j; +import lombok.val; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +@Slf4j +public class ProcessUtils { + + public static String execPowershellCommand(String command) { + String[] execCommand = { + "C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", + "-Command", + command + }; + try { + val processBuilder = new ProcessBuilder(execCommand); + val process = processBuilder.start(); + val reader = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + StringBuilder output = new StringBuilder(); + while ((line = reader.readLine()) != null) { + output.append(line).append("\n"); + } + int exitCode = process.waitFor(); + log.info("Exec powershell done, exitCode:{}", exitCode); + return output.toString(); + } catch (IOException | InterruptedException e) { + log.error("Exec powershell command failed, command:{}", execCommand, e); + } + return null; + } +} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/StrUtils.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/StrUtils.java similarity index 81% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/StrUtils.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/StrUtils.java index 0fc0ab9..76d9a3f 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/StrUtils.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/StrUtils.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.utils; +package com.qc.soft.framework.basic.utils; public class StrUtils { diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/TemplateParamsBuildUtils.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/TemplateParamsBuildUtils.java similarity index 87% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/TemplateParamsBuildUtils.java rename to deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/TemplateParamsBuildUtils.java index 138e163..80acd3b 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/TemplateParamsBuildUtils.java +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/utils/TemplateParamsBuildUtils.java @@ -1,4 +1,4 @@ -package com.qc.soft.deploy.ease.utils; +package com.qc.soft.framework.basic.utils; import java.util.HashMap; import java.util.Map; diff --git a/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/web/ApiResult.java b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/web/ApiResult.java new file mode 100644 index 0000000..9c1221a --- /dev/null +++ b/deploy-ease-basic/src/main/java/com/qc/soft/framework/basic/web/ApiResult.java @@ -0,0 +1,40 @@ +package com.qc.soft.framework.basic.web; + +import com.qc.soft.framework.basic.entity.BasicResponseState; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +@Setter +@Getter +@Builder +@ToString +public class ApiResult implements Serializable { + + private String code; + + private String message; + + private T data; + + public ApiResult(String code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public ApiResult(BasicResponseState state) { + this.code = state.getCode(); + this.message = state.getMessage(); + } + + public ApiResult(BasicResponseState state, T data) { + this.code = state.getCode(); + this.message = state.getMessage(); + this.data = data; + } + +} diff --git a/deploy-ease-basic/target/maven-archiver/pom.properties b/deploy-ease-basic/target/maven-archiver/pom.properties new file mode 100644 index 0000000..313c642 --- /dev/null +++ b/deploy-ease-basic/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=deploy-ease-basic +groupId=com.qc.soft +version=1.0-SNAPSHOT diff --git a/deploy-ease-basic/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/deploy-ease-basic/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..61942d4 --- /dev/null +++ b/deploy-ease-basic/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,21 @@ +com\qc\soft\framework\basic\config\GlobalTenantInterceptor.class +com\qc\soft\framework\basic\web\ApiResult.class +com\qc\soft\framework\basic\entity\BasicResponseState$BasicResponseStateBuilder.class +com\qc\soft\framework\basic\utils\DateUtils.class +com\qc\soft\framework\basic\entity\BasicResponseState.class +com\qc\soft\framework\basic\utils\StrUtils.class +com\qc\soft\framework\basic\enums\JenkinsJobStatus.class +com\qc\soft\framework\basic\utils\TemplateParamsBuildUtils.class +com\qc\soft\framework\basic\utils\MapUtils.class +com\qc\soft\framework\basic\context\TenantContext.class +com\qc\soft\framework\basic\config\GlobalWebConfigurer.class +com\qc\soft\framework\basic\utils\HttpUtils.class +com\qc\soft\framework\basic\config\GlobalResponseHandler.class +com\qc\soft\framework\basic\exception\BasicException.class +com\qc\soft\framework\basic\utils\FileUtils.class +com\qc\soft\framework\basic\utils\ProcessUtils.class +com\qc\soft\framework\basic\config\GlobalExceptionHandler.class +com\qc\soft\framework\basic\enums\IBasicState.class +com\qc\soft\framework\basic\entity\BaseEntity.class +com\qc\soft\framework\basic\utils\BasicAuthUtils.class +com\qc\soft\framework\basic\web\ApiResult$ApiResultBuilder.class diff --git a/deploy-ease-basic/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/deploy-ease-basic/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..6d55abb --- /dev/null +++ b/deploy-ease-basic/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,19 @@ +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\context\TenantContext.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\config\GlobalTenantInterceptor.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\config\GlobalWebConfigurer.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\config\GlobalExceptionHandler.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\utils\HttpUtils.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\web\ApiResult.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\utils\DateUtils.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\utils\BasicAuthUtils.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\enums\IBasicState.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\entity\BasicResponseState.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\utils\FileUtils.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\utils\TemplateParamsBuildUtils.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\config\GlobalResponseHandler.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\enums\JenkinsJobStatus.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\utils\ProcessUtils.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\entity\BaseEntity.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\utils\StrUtils.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\exception\BasicException.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-basic\src\main\java\com\qc\soft\framework\basic\utils\MapUtils.java diff --git a/deploy-ease-basic/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/deploy-ease-basic/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/deploy-ease-basic/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/deploy-ease-basic/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/deploy-ease-core/pom.xml b/deploy-ease-core/pom.xml index 1497647..845bd39 100644 --- a/deploy-ease-core/pom.xml +++ b/deploy-ease-core/pom.xml @@ -78,11 +78,6 @@ httpclient5 ${http5.version} - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - cn.hutool hutool-all @@ -123,10 +118,15 @@ mapstruct-jdk8 ${mapstruct.version} + + com.qc.soft + deploy-ease-basic + ${version} + com.qc.soft deploy-ease-api - 1.0-SNAPSHOT + ${version} com.alibaba.cloud @@ -140,36 +140,16 @@ com.alibaba.nacos nacos-client + + org.apache.commons + commons-lang3 + 3.12.0 + - - org.codehaus.mojo - flatten-maven-plugin - ${flatten-maven-plugin.version} - - true - resolveCiFriendliesOnly - - - - flatten - process-resources - - flatten - - - - flatten-clean - clean - - clean - - - - org.codehaus.mojo exec-maven-plugin @@ -255,7 +235,7 @@ com.qc.soft deploy-ease-parent - 1.0-SNAPSHOT + ${version} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/DeployEaseApplication.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/DeployEaseApplication.java index 4bda5e6..0cc18e9 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/DeployEaseApplication.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/DeployEaseApplication.java @@ -11,7 +11,7 @@ import java.net.URLClassLoader; @SpringBootConfiguration @EnableAutoConfiguration -@ComponentScan("com.qc.soft.deploy.ease.*") +@ComponentScan("com.qc.soft.deploy.ease") @EnableAsync public class DeployEaseApplication { diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/ApiResponse.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/ApiResponse.java deleted file mode 100644 index 2935943..0000000 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/ApiResponse.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.qc.soft.deploy.ease.config; - -import com.qc.soft.deploy.ease.enums.BusinessErrorCode; -import lombok.Builder; -import lombok.ToString; - -import java.io.Serializable; -import java.util.StringJoiner; - -@Builder -@ToString -public class ApiResponse implements Serializable { - - private BusinessErrorCode code; - - private String message; - - private T data; - - public ApiResponse(BusinessErrorCode code, String message) { - this.code = code; - this.message = message; - } - - public ApiResponse(BusinessErrorCode code, String message, T data) { - this(code, message); - this.data = data; - } - - public BusinessErrorCode getCode() { - return code; - } - - public void setCode(BusinessErrorCode code) { - this.code = code; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public T getData() { - return data; - } - - public void setData(T data) { - this.data = data; - } - -} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/BusinessWebConfigurer.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/BusinessWebConfigurer.java new file mode 100644 index 0000000..b3820b5 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/BusinessWebConfigurer.java @@ -0,0 +1,24 @@ +package com.qc.soft.deploy.ease.config; + +import com.qc.soft.deploy.ease.interceptor.BusinessTenantInterceptor; +import com.qc.soft.framework.basic.config.GlobalWebConfigurer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import javax.annotation.Resource; +@Configuration +@Slf4j +@AutoConfigureAfter(GlobalWebConfigurer.class) +public class BusinessWebConfigurer implements WebMvcConfigurer { + + @Resource + private BusinessTenantInterceptor businessTenantInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(businessTenantInterceptor).addPathPatterns("/**"); + } + +} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalCorsConfig.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalCorsConfig.java deleted file mode 100644 index d4aaf95..0000000 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalCorsConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.qc.soft.deploy.ease.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -@Configuration -public class GlobalCorsConfig { - @Bean - public WebMvcConfigurer corsConfigurer() { - return new WebMvcConfigurer() { - @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**") // 允许跨域的路径 - .allowedOrigins("*") // 允许跨域请求的域名 - .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法 - .allowedHeaders("*") // 允许的请求头 - .allowCredentials(true); // 是否允许证书(cookies) - } - }; - } -} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalExceptionHandler.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalExceptionHandler.java deleted file mode 100644 index 294f1fa..0000000 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/GlobalExceptionHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.qc.soft.deploy.ease.config; - -import com.qc.soft.deploy.ease.enums.ResponseCode; -import com.qc.soft.deploy.ease.exception.BusinessException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.RestControllerAdvice; - -import javax.servlet.http.HttpServletRequest; - -@RestControllerAdvice -@Slf4j -public class GlobalExceptionHandler { - - @Autowired - private HttpServletRequest httpServletRequest; - - @ExceptionHandler(BusinessException.class) - public ApiResponse parameterBodyMissingExceptionHandler(BusinessException exception) { - String requestURI = httpServletRequest.getRequestURI(); - log.error("An exception occurred while requesting an interface:{}", requestURI, exception); - return ApiResponse.builder().code(exception.getCode()).message(exception.getMessage()).build(); - } -} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/ShutdownContextClosedEventListener.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/ShutdownContextClosedEventListener.java new file mode 100644 index 0000000..b108100 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/ShutdownContextClosedEventListener.java @@ -0,0 +1,22 @@ +package com.qc.soft.deploy.ease.config; + +import com.qc.soft.deploy.ease.context.TenantAdapterProcessContext; +import com.qc.soft.deploy.ease.dto.TenantAdapterJarDTO; +import com.qc.soft.framework.basic.utils.ProcessUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextClosedEvent; +import org.springframework.stereotype.Component; + +@Component +@Slf4j +public class ShutdownContextClosedEventListener implements ApplicationListener { + @Override + public void onApplicationEvent(ContextClosedEvent event) { + System.out.println("The service is terminating and starts destroying the adapter project!!!"); + for (TenantAdapterJarDTO tenantAdapterJar : TenantAdapterProcessContext.getTenantJarProcess()) { + String output = ProcessUtils.execPowershellCommand(String.format("Stop-Process -Id %s", tenantAdapterJar.getPid())); + log.info("Tenant {} adapter project it has been destroyed,output:{}", tenantAdapterJar.getTenantCode(), output); + } + } +} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/TenantAdapterRunner.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/TenantAdapterRunner.java index 1bd03cf..a25b05b 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/TenantAdapterRunner.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/config/TenantAdapterRunner.java @@ -1,77 +1,170 @@ package com.qc.soft.deploy.ease.config; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; -import com.qc.soft.deploy.ease.consts.Consts; +import com.qc.soft.deploy.ease.api.response.TenantResponse; +import com.qc.soft.deploy.ease.context.TenantAdapterProcessContext; +import com.qc.soft.deploy.ease.dto.TenantAdapterJarDTO; +import com.qc.soft.deploy.ease.enums.BusinessState; +import com.qc.soft.deploy.ease.exception.BusinessException; +import com.qc.soft.deploy.ease.service.INacosService; import com.qc.soft.deploy.ease.service.ITenantService; import lombok.extern.slf4j.Slf4j; -import org.apache.logging.log4j.util.Strings; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.io.BufferedReader; import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; import java.util.Properties; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import static com.qc.soft.framework.basic.utils.ProcessUtils.execPowershellCommand; @Component @Slf4j public class TenantAdapterRunner implements CommandLineRunner { + private static final int QUERY_INTERVAL_MS = 10000; + + private static final int MAX_ATTEMPTS = 10; + @Resource private ITenantService tenantService; + @Resource + private INacosService nacosService; + @Resource private NacosDiscoveryProperties nacosDiscoveryProperties; + @Value("${deploy-ease.adapter.path}") + private String adapterJarFile; + @Override + public void run(String... args) { - String env; - String classLoaderName = getClass().getClassLoader().getClass().getName(); - if (classLoaderName.contains("LaunchedURLClassLoader")) { - System.out.println("Application started via java -jar or from a fat JAR."); - env = "prod"; - } else { - env = "dev"; - } -// -DNACOS_CONFIG_SERVER=192.168.0.166:8848 -// -DTENANT_CODE=longi -// -DDEPLOY_ENV=deploy-ease-dev -// -DNACOS_USER=nacos -// -DNACOS_PWD=qichen5210523 + List tenants = tenantService.tenants(); + log.info("Start the tenant adapter project!!!"); + ExecutorService pool = Executors.newFixedThreadPool(tenants.size()); + ExecutorService checkRegistered = Executors.newSingleThreadExecutor(); +// for (TenantResponse tenant : tenants) { +// runTenantAdapterJar(tenant.getTenantCode()); +// } + CompletableFuture.allOf(tenants.stream().map(tenant -> CompletableFuture.runAsync(() -> execStartTenantAdapterJar(tenant.getTenantCode()), pool)).toArray(CompletableFuture[]::new)); + pool.shutdown(); + checkRegistered.submit(() -> { + boolean nacosResult = false; + int attempts = 0; + while (!nacosResult && attempts < MAX_ATTEMPTS) { + List> registered = nacosService.instances(tenants.stream().map(TenantResponse::getTenantCode).collect(Collectors.toList())); + nacosResult = registered.stream().allMatch(Pair::getRight); + if (!nacosResult) { + attempts++; + log.error("Check tenant adapter registered nacos not complete successfully {} attempts", attempts); + try { + Thread.sleep(QUERY_INTERVAL_MS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.error("Check registered task thread was interrupted: ", e); + break; + } + } + } + + if (nacosResult) { + TenantAdapterProcessContext.setTenantJarProcess(getWindowTenantAdapterProcess()); + log.info("All tenant adapter registered nacos registration complete!!!"); + } else { + log.error("Check tenant adapter registered nacos did not complete successfully within the maximum attempts!!!"); + } + checkRegistered.shutdown(); + try { + if (!checkRegistered.awaitTermination(60, TimeUnit.SECONDS)) { + checkRegistered.shutdownNow(); + } + } catch (InterruptedException e) { + checkRegistered.shutdownNow(); + Thread.currentThread().interrupt(); + } + }); + } + + @NotNull + private String[] buildTenantAdapterNacosArgs(String tenantCode) { Properties nacosProperties = nacosDiscoveryProperties.getNacosProperties(); - System.out.println(nacosProperties); - String tenantAdapterJarPath = Consts.TENANT_ADAPTER_SERVICE_JAR_PATH.get(env); + return new String[] {String.format("--NACOS_CONFIG_SERVER=%s", nacosProperties.get("serverAddr")), String.format("--TENANT_CODE=%s", tenantCode), String.format("--DEPLOY_ENV=%s", nacosProperties.get("namespace")), String.format("--NACOS_USER=%s", nacosProperties.get("username")), String.format("--NACOS_PWD=%s", nacosProperties.get("password"))}; + } - String nacosOptions = String.format("-DNACOS_CONFIG_SERVER=%s -DDEPLOY_ENV=%s -DTENANT_CODE=longi -DNACOS_USER=%s -DNACOS_PWD=%s", - nacosProperties.get("serverAddr"), - nacosProperties.get("namespace"), - nacosProperties.get("username"), - nacosProperties.get("password") - ); - - - String[] command = {"java", "-jar", nacosOptions, tenantAdapterJarPath}; + private void execStartTenantAdapterJar(String tenantCode) { + String[] runArgs = buildTenantAdapterNacosArgs(tenantCode); try { + log.info("Start the {} adapter project", tenantCode); + String[] command = {"java", "-jar", adapterJarFile}; ProcessBuilder processBuilder = new ProcessBuilder(command); - processBuilder.inheritIO(); - processBuilder.redirectErrorStream(true); + processBuilder.command().addAll(java.util.Arrays.asList(runArgs)); Process process = processBuilder.start(); - Executors.newSingleThreadExecutor().submit(() -> { + new Thread(() -> { try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { String line; while ((line = reader.readLine()) != null) { - System.out.println(line); + log.warn(line); } } catch (Exception e) { - e.printStackTrace(); + log.error("Read boot jar log error", e); } - }); - // 等待进程结束 - int exitCode = process.waitFor(); - System.out.println("Process exited with code: " + exitCode); + }).start(); + log.info("Startup {} adapter project complete!!!", tenantCode); } catch (Exception e) { - log.error("Failed to start the adapter jar", e); + log.error("Failed to start the adapter project jar, args:{}", runArgs, e); } } -} + + + public List getWindowTenantAdapterProcess() { + String command = "Get-WmiObject Win32_Process | Where-Object { $_.Name -like 'java.exe' -and $_.CommandLine -like '*deploy-ease-tenant-adapter-1.0.0.jar*' } | Select-Object ProcessId, CommandLine | Format-List -Property ProcessId, CommandLine"; + String output = execPowershellCommand(command); + if (StringUtils.isEmpty(output)) { + return new ArrayList<>(); + } + List result = new ArrayList<>(); + List processIds = new ArrayList<>(); + List tenantCodes = new ArrayList<>(); + Pattern processIdPattern = Pattern.compile("ProcessId\\s+:\\s+(\\d+)"); + Matcher processIdMatcher = processIdPattern.matcher(output); + + while (processIdMatcher.find()) { + String processId = processIdMatcher.group(1); + processIds.add(processId); + } + + Pattern tenantCodePattern = Pattern.compile("--TENANT_CODE=([^\\s]+)"); + Matcher tenantCodeMatcher = tenantCodePattern.matcher(output); + + while (tenantCodeMatcher.find()) { + String tenantCode = tenantCodeMatcher.group(1); + tenantCodes.add(tenantCode); + } + int size = Math.min(processIds.size(), tenantCodes.size()); + if (processIds.size() != tenantCodes.size()) { + throw new BusinessException(BusinessState.TENANT_CODE_AND_NUMBER_PROCESSES_INCONSISTENT); + } + for (int i = 0; i < size; i++) { + result.add(TenantAdapterJarDTO.builder().pid(processIds.get(i)).tenantCode(tenantCodes.get(i)).build()); + } + log.info("Query window tenant start process is finished!!!"); + return result; + } + +} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/consts/Consts.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/consts/Consts.java index 2f71ef7..0c68f5f 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/consts/Consts.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/consts/Consts.java @@ -4,11 +4,11 @@ import java.util.HashMap; import java.util.Map; public class Consts { - public static final String TENANT_ADAPTER_SERVICE_NAME = "deploy-ease-adapter-%s"; + public static final String TENANT_ADAPTER_SERVICE_NAME = "deploy-ease-tenant-adapter-%s"; public static final Map TENANT_ADAPTER_SERVICE_JAR_PATH = new HashMap<>(); static { - TENANT_ADAPTER_SERVICE_JAR_PATH.put("dev", "D://workgithub-workspace//deploy-ease-backend//deploy-ease-tenant-adapter//target//deploy-ease-tenant-adapter-1.0.0.jar"); + TENANT_ADAPTER_SERVICE_JAR_PATH.put("dev", "D:\\work\\github-workspace\\deploy-ease-backend\\deploy-ease-tenant-adapter\\target\\deploy-ease-tenant-adapter-1.0.0.jar"); } } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/context/TenantAdapterProcessContext.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/context/TenantAdapterProcessContext.java new file mode 100644 index 0000000..4647709 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/context/TenantAdapterProcessContext.java @@ -0,0 +1,17 @@ +package com.qc.soft.deploy.ease.context; + +import com.qc.soft.deploy.ease.dto.TenantAdapterJarDTO; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +public class TenantAdapterProcessContext { + @Getter + private static final List tenantJarProcess = new ArrayList<>(); + + public static void setTenantJarProcess(List tenantsProcess) { + tenantJarProcess.addAll(tenantsProcess); + } + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/api/DictionaryApiApiController.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/api/DictionaryApiApiController.java new file mode 100644 index 0000000..852927b --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/api/DictionaryApiApiController.java @@ -0,0 +1,27 @@ +package com.qc.soft.deploy.ease.controller.api; + +import com.qc.soft.deploy.ease.api.IDictionaryApi; +import com.qc.soft.deploy.ease.api.response.DictionaryResponse; +import com.qc.soft.deploy.ease.api.response.TenantDictionaryResponse; +import com.qc.soft.deploy.ease.service.IDictionaryService; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +public class DictionaryApiApiController implements IDictionaryApi { + + @Resource + private IDictionaryService dictionaryService; + + @Override + public List systemDicts() { + return dictionaryService.findSystemDicts(); + } + + @Override + public List tenantDicts() { + return dictionaryService.findDictsByTenantCode(); + } +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/NacosController.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/api/NacosApiApiController.java similarity index 65% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/NacosController.java rename to deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/api/NacosApiApiController.java index 0323682..8807f61 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/NacosController.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/api/NacosApiApiController.java @@ -1,13 +1,13 @@ -package com.qc.soft.deploy.ease.controller; +package com.qc.soft.deploy.ease.controller.api; -import com.qc.soft.deploy.ease.api.controller.INacosController; +import com.qc.soft.deploy.ease.api.INacosApi; import com.qc.soft.deploy.ease.service.INacosService; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController -public class NacosController implements INacosController { +public class NacosApiApiController implements INacosApi { @Resource diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/mgmt/DictionaryController.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/mgmt/DictionaryController.java new file mode 100644 index 0000000..ad8a168 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/mgmt/DictionaryController.java @@ -0,0 +1,32 @@ +package com.qc.soft.deploy.ease.controller.mgmt; + +import com.qc.soft.deploy.ease.api.IDictionaryApi; +import com.qc.soft.deploy.ease.api.response.DictionaryResponse; +import com.qc.soft.deploy.ease.api.response.TenantDictionaryResponse; +import com.qc.soft.deploy.ease.context.TenantAdapterProcessContext; +import com.qc.soft.deploy.ease.dto.TenantAdapterJarDTO; +import com.qc.soft.deploy.ease.service.IDictionaryService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/mgmt") +public class DictionaryController implements IDictionaryApi { + + @Resource + private IDictionaryService dictionaryService; + + @Override + public List systemDicts() { + List tenantJarProcess = TenantAdapterProcessContext.getTenantJarProcess(); + return dictionaryService.findSystemDicts(); + } + + @Override + public List tenantDicts() { + return dictionaryService.findDictsByTenantCode(); + } +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/mgmt/TenantController.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/mgmt/TenantController.java new file mode 100644 index 0000000..85c9655 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/controller/mgmt/TenantController.java @@ -0,0 +1,22 @@ +package com.qc.soft.deploy.ease.controller.mgmt; + +import com.qc.soft.deploy.ease.api.ITenantApi; +import com.qc.soft.deploy.ease.api.response.TenantAdapterContextResponse; +import com.qc.soft.deploy.ease.service.ITenantService; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/mgmt") +public class TenantController implements ITenantApi { + + @Resource + private ITenantService tenantService; + + @Override + public TenantAdapterContextResponse tenantAdapterContext() { + return tenantService.getTenantAdapterContext(); + } +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/dto/DictionaryConvert.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/dto/DictionaryConvert.java index 8901e2c..f39ffb4 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/dto/DictionaryConvert.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/dto/DictionaryConvert.java @@ -1,8 +1,7 @@ package com.qc.soft.deploy.ease.convert.dto; -import com.qc.soft.deploy.ease.convert.K8sNamespaceConvert; -import com.qc.soft.deploy.ease.entity.Dictionary; -import com.qc.soft.deploy.ease.entity.TenantDictionary; +import com.qc.soft.deploy.ease.entity.SysDict; +import com.qc.soft.deploy.ease.entity.TenantDict; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; @@ -15,9 +14,9 @@ public interface DictionaryConvert { @Mappings( - @Mapping(target = "tenantCode", expression = "java(com.qc.soft.deploy.ease.context.TenantContext.getCurrentTenant())") + @Mapping(target = "tenantCode", expression = "java(com.qc.soft.framework.basic.context.TenantContext.getCurrentTenant())") ) - TenantDictionary systemDictionaryToTenantDictionary(Dictionary dictionary); + TenantDict systemDictionaryToTenantDictionary(SysDict sysDict); } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/DictionaryConvert.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/DictionaryConvert.java index 02b23c7..6022db3 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/DictionaryConvert.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/DictionaryConvert.java @@ -1,7 +1,7 @@ package com.qc.soft.deploy.ease.convert.response; import com.qc.soft.deploy.ease.api.response.DictionaryResponse; -import com.qc.soft.deploy.ease.entity.Dictionary; +import com.qc.soft.deploy.ease.entity.SysDict; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -13,6 +13,6 @@ public interface DictionaryConvert { DictionaryConvert INSTANCE = Mappers.getMapper(DictionaryConvert.class); - List entityToResponse(List dictionaries); + List entityToResponse(List dictionaries); } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/TenantConvert.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/TenantConvert.java index e12dc47..4434f51 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/TenantConvert.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/TenantConvert.java @@ -1,9 +1,7 @@ package com.qc.soft.deploy.ease.convert.response; -import com.qc.soft.deploy.ease.api.response.TenantDictionaryResponse; import com.qc.soft.deploy.ease.api.response.TenantResponse; import com.qc.soft.deploy.ease.entity.Tenant; -import com.qc.soft.deploy.ease.entity.TenantDictionary; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/TenantDictionaryConvert.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/TenantDictionaryConvert.java index 0eadc3e..dbbb377 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/TenantDictionaryConvert.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/convert/response/TenantDictionaryConvert.java @@ -1,7 +1,7 @@ package com.qc.soft.deploy.ease.convert.response; import com.qc.soft.deploy.ease.api.response.TenantDictionaryResponse; -import com.qc.soft.deploy.ease.entity.TenantDictionary; +import com.qc.soft.deploy.ease.entity.TenantDict; import org.mapstruct.Mapper; import org.mapstruct.factory.Mappers; @@ -13,6 +13,6 @@ public interface TenantDictionaryConvert { TenantDictionaryConvert INSTANCE = Mappers.getMapper(TenantDictionaryConvert.class); - List entityToResponse(List dictionaries); + List entityToResponse(List dictionaries); } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/dto/TenantAdapterJarDTO.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/dto/TenantAdapterJarDTO.java new file mode 100644 index 0000000..4367e1e --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/dto/TenantAdapterJarDTO.java @@ -0,0 +1,14 @@ +package com.qc.soft.deploy.ease.dto; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class TenantAdapterJarDTO { + + private String pid; + + private String tenantCode; + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/Dictionary.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysDict.java similarity index 72% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/Dictionary.java rename to deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysDict.java index 86295d6..00e3bf8 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/Dictionary.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysDict.java @@ -6,17 +6,13 @@ import lombok.EqualsAndHashCode; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; import javax.persistence.Table; -import java.util.Date; @EqualsAndHashCode(callSuper = true) -@Table(name = "dictionary") +@Table(name = "sys_dict") @Entity @Data -public class Dictionary extends BaseEntity { +public class SysDict extends BaseEntity { @Column(name = "dictionary_code") private String code; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysJenkinsConfig.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysJenkinsConfig.java new file mode 100644 index 0000000..3cb0505 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysJenkinsConfig.java @@ -0,0 +1,29 @@ +package com.qc.soft.deploy.ease.entity; + +import com.qc.soft.framework.basic.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +@EqualsAndHashCode(callSuper = true) +@Table(name = "sys_jenkins_config") +@Entity +@Data +public class SysJenkinsConfig extends BaseEntity { + + @Column(name = "jenkins_code") + private String jenkinsCode; + + @Column(name = "jenkins_name") + private String jenkinsName; + + private String username; + + private String password; + + private String url; + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/User.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysUser.java similarity index 60% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/User.java rename to deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysUser.java index 7ba6646..9da0206 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/User.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/SysUser.java @@ -6,18 +6,13 @@ import lombok.EqualsAndHashCode; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.EntityListeners; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; import javax.persistence.Table; -import java.util.Date; @EqualsAndHashCode(callSuper = true) -@Table(name = "user") +@Table(name = "sys_user") @Entity @Data -public class User extends BaseEntity { +public class SysUser extends BaseEntity { @Column(name = "user_name") private String username; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantDictionary.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantDict.java similarity index 91% rename from deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantDictionary.java rename to deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantDict.java index ddf8e55..d08014d 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantDictionary.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantDict.java @@ -12,7 +12,7 @@ import javax.persistence.Table; @Table(name = "tenant_dictionary") @Entity @Data -public class TenantDictionary extends BaseEntity { +public class TenantDict extends BaseEntity { @Column(name = "dictionary_code") private String code; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantEnv.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantEnv.java new file mode 100644 index 0000000..4d18988 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantEnv.java @@ -0,0 +1,32 @@ +package com.qc.soft.deploy.ease.entity; + + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +@EqualsAndHashCode(callSuper = true) +@Table(name = "tenant_env") +@Entity +@Data +public class TenantEnv extends BaseEntity { + + @Column(name = "code") + private String envCode; + + @Column(name = "name") + private String envName; + + @Column(name = "type") + private int evnType; + + @Column(name = "tenant_code") + private String tenantCode; + + @Column(name = "is_vpn") + private boolean isVpn; + +} \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantEnvJenkins.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantEnvJenkins.java new file mode 100644 index 0000000..a5dc901 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/entity/TenantEnvJenkins.java @@ -0,0 +1,29 @@ +package com.qc.soft.deploy.ease.entity; + +import com.qc.soft.framework.basic.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Table; + +@EqualsAndHashCode(callSuper = true) +@Table(name = "tenant_env_jenkins") +@Entity +@Data +public class TenantEnvJenkins extends BaseEntity { + + @Column(name = "view_name") + private String viewName; + + @Column(name = "jenkins_code") + private String jenkinsCode; + + @Column(name = "env_code") + private String envCode; + + @Column(name = "tenant_code") + private String tenantCode; + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/BusinessErrorCode.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/BusinessErrorCode.java deleted file mode 100644 index 29ee00e..0000000 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/BusinessErrorCode.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.qc.soft.deploy.ease.enums; - -public enum BusinessErrorCode { - - SUCCESS("操作成功"), - FAILURE("操作失败"), - TENANT_DOES_NOT_EXIST("租户不存在"), - - TENANT_NOT_ENABLED("%s租户未启用"); - - - private String message; - - BusinessErrorCode(String message) { - this.message = message; - } - - public String getMessage() { - return message; - } -} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/BusinessState.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/BusinessState.java new file mode 100644 index 0000000..509d905 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/BusinessState.java @@ -0,0 +1,23 @@ +package com.qc.soft.deploy.ease.enums; + +import com.qc.soft.framework.basic.entity.BasicResponseState; +import com.qc.soft.framework.basic.enums.IBasicState; + +public interface BusinessState extends IBasicState { + + BasicResponseState TENANT_CODE_AND_NUMBER_PROCESSES_INCONSISTENT = BasicResponseState.builder().code("TENANT_CODE_AND_NUMBER_PROCESSES_INCONSISTENT").message("租户Code数量和进程数量不一致").build(); + + +// +// SUCCESS("操作成功"), +// FAILURE("操作失败"), +// TENANT_DOES_NOT_EXIST("租户不存在"), +// TENANT_NOT_ENABLED("%s租户未启用"); +// +// private final String message; +// +// BusinessErrorCode(String message) { +// this.message = message; +// } + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/ResponseCode.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/ResponseCode.java deleted file mode 100644 index c8e7e44..0000000 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/enums/ResponseCode.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.qc.soft.deploy.ease.enums; - -import lombok.Getter; - -@Getter -public enum ResponseCode { - - SUCCESS(BusinessErrorCode.SUCCESS, BusinessErrorCode.SUCCESS.getMessage()), - FAILURE(BusinessErrorCode.FAILURE, BusinessErrorCode.FAILURE.getMessage()), - TENANT_DOES_NOT_EXIST(BusinessErrorCode.TENANT_DOES_NOT_EXIST, BusinessErrorCode.TENANT_DOES_NOT_EXIST.getMessage()); - - private final BusinessErrorCode code; - - private final String message; - - ResponseCode(BusinessErrorCode code, String message) { - this.code = code; - this.message = message; - } - -} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/exception/BusinessException.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/exception/BusinessException.java index 5808ef2..37916b5 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/exception/BusinessException.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/exception/BusinessException.java @@ -1,27 +1,29 @@ package com.qc.soft.deploy.ease.exception; -import com.qc.soft.deploy.ease.enums.BusinessErrorCode; +import com.qc.soft.framework.basic.entity.BasicResponseState; +import com.qc.soft.framework.basic.exception.BasicException; import lombok.Builder; import lombok.Getter; import lombok.Setter; +@Getter @Setter -@Builder -public class BusinessException extends RuntimeException { +public class BusinessException extends BasicException { - @Getter - protected BusinessErrorCode code; - protected String message; - - public BusinessException(BusinessErrorCode code, String message, Throwable e) { - super(message, e); - this.code = code; - this.message = message; + public BusinessException(String message) { + super(message); } - public BusinessException(BusinessErrorCode code, String message) { - this(code, message, null); + public BusinessException(BasicResponseState error) { + super(error); } + public BusinessException(BasicResponseState error, String message) { + super(error, message); + } + + public BusinessException(BasicResponseState error, Throwable e) { + super(error, e); + } } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/fegin/response/JenkinsJobResponse.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/fegin/response/JenkinsJobResponse.java index 5710397..0dd20e6 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/fegin/response/JenkinsJobResponse.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/fegin/response/JenkinsJobResponse.java @@ -1,6 +1,5 @@ package com.qc.soft.deploy.ease.fegin.response; -import com.qc.soft.deploy.ease.enums.JenkinsJobStatus; import lombok.Data; import lombok.ToString; @@ -20,7 +19,7 @@ public class JenkinsJobResponse { private boolean building; - private JenkinsJobStatus result; +// private JenkinsJobStatus result; private Date timestamp; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/interceptor/BusinessTenantInterceptor.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/interceptor/BusinessTenantInterceptor.java new file mode 100644 index 0000000..cfbfe1e --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/interceptor/BusinessTenantInterceptor.java @@ -0,0 +1,41 @@ +package com.qc.soft.deploy.ease.interceptor; + +import com.qc.soft.deploy.ease.entity.Tenant; +import com.qc.soft.deploy.ease.exception.BusinessException; +import com.qc.soft.deploy.ease.repository.ITenantRepository; +import com.qc.soft.deploy.ease.state.IBusinessState; +import com.qc.soft.framework.basic.context.TenantContext; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@Slf4j +@Component +public class BusinessTenantInterceptor implements HandlerInterceptor { + + @Resource + private ITenantRepository tenantRepository; + + public BusinessTenantInterceptor() { + log.info("Business tenant interceptor registered successfully!!!"); + } + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { + String tenantCode = TenantContext.getCurrentTenant(); + Tenant tenant = tenantRepository.findByTenantCode(tenantCode); + if (tenant == null) { + throw new BusinessException(IBusinessState.TENANT_DOES_NOT_EXIST); + } + if (!tenant.isEnabled()) { + throw new BusinessException(IBusinessState.TENANT_NOT_ENABLED, String.format(IBusinessState.TENANT_NOT_ENABLED.getMessage(), tenantCode)); + } + return true; + } + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/interceptor/TenantInterceptor.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/interceptor/TenantInterceptor.java deleted file mode 100644 index 862b665..0000000 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/interceptor/TenantInterceptor.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.qc.soft.deploy.ease.interceptor; - -import com.qc.soft.deploy.ease.context.TenantContext; -import com.qc.soft.deploy.ease.entity.Tenant; -import com.qc.soft.deploy.ease.exception.BusinessException; -import com.qc.soft.deploy.ease.repository.ITenantRepository; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.HandlerInterceptor; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import static com.qc.soft.deploy.ease.enums.BusinessErrorCode.TENANT_DOES_NOT_EXIST; -import static com.qc.soft.deploy.ease.enums.BusinessErrorCode.TENANT_NOT_ENABLED; - -@Slf4j -@Component -public class TenantInterceptor implements HandlerInterceptor { - - @Resource - private ITenantRepository tenantRepository; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - String tenantCode = request.getHeader("x-tenant-code"); - if (null == tenantCode || StringUtils.isEmpty(tenantCode)) { - throw new BusinessException(TENANT_DOES_NOT_EXIST, "请求头未携带:x-tenant-code"); - } - Tenant tenant = tenantRepository.findByTenantCode(tenantCode); - if (tenant == null) { - throw new BusinessException(TENANT_DOES_NOT_EXIST, TENANT_DOES_NOT_EXIST.getMessage()); - } - if (!tenant.isEnabled()) { - throw new BusinessException(TENANT_NOT_ENABLED, String.format(TENANT_NOT_ENABLED.getMessage(), tenantCode)); - } - TenantContext.setCurrentTenant(tenantCode); - return true; - } - - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - TenantContext.clear(); - } -} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/IDictionaryRepository.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/IDictionaryRepository.java index 873350b..572419f 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/IDictionaryRepository.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/IDictionaryRepository.java @@ -1,13 +1,12 @@ package com.qc.soft.deploy.ease.repository; -import com.qc.soft.deploy.ease.entity.Dictionary; -import com.qc.soft.deploy.ease.entity.User; +import com.qc.soft.deploy.ease.entity.SysDict; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; -public interface IDictionaryRepository extends JpaRepository { +public interface IDictionaryRepository extends JpaRepository { - List findAll(); + List findAll(); } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ISysJenkinsConfigRepository.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ISysJenkinsConfigRepository.java new file mode 100644 index 0000000..85664eb --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ISysJenkinsConfigRepository.java @@ -0,0 +1,12 @@ +package com.qc.soft.deploy.ease.repository; + +import com.qc.soft.deploy.ease.entity.SysJenkinsConfig; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ISysJenkinsConfigRepository extends JpaRepository { + + List findByJenkinsCodeIn(List codes); + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantDictionaryRepository.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantDictionaryRepository.java index c1a91ca..68a51d5 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantDictionaryRepository.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantDictionaryRepository.java @@ -1,13 +1,12 @@ package com.qc.soft.deploy.ease.repository; -import com.qc.soft.deploy.ease.entity.Dictionary; -import com.qc.soft.deploy.ease.entity.TenantDictionary; +import com.qc.soft.deploy.ease.entity.TenantDict; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; -public interface ITenantDictionaryRepository extends JpaRepository { +public interface ITenantDictionaryRepository extends JpaRepository { - List findAllByTenantCode(String tenantCode); + List findAllByTenantCode(String tenantCode); } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantEnvJenkinsRepository.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantEnvJenkinsRepository.java new file mode 100644 index 0000000..e630bd8 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantEnvJenkinsRepository.java @@ -0,0 +1,13 @@ +package com.qc.soft.deploy.ease.repository; + + +import com.qc.soft.deploy.ease.entity.TenantEnvJenkins; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ITenantEnvJenkinsRepository extends JpaRepository { + + List findByEnvCodeIn(List envCodes); + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantEnvRepository.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantEnvRepository.java new file mode 100644 index 0000000..c796193 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantEnvRepository.java @@ -0,0 +1,13 @@ +package com.qc.soft.deploy.ease.repository; + +import com.qc.soft.deploy.ease.entity.Tenant; +import com.qc.soft.deploy.ease.entity.TenantEnv; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface ITenantEnvRepository extends JpaRepository { + + List findByTenantCode(String tenantCode); + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantRepository.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantRepository.java index 82c8b74..e59411b 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantRepository.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/ITenantRepository.java @@ -1,11 +1,8 @@ package com.qc.soft.deploy.ease.repository; -import com.qc.soft.deploy.ease.entity.Dictionary; import com.qc.soft.deploy.ease.entity.Tenant; import org.springframework.data.jpa.repository.JpaRepository; -import java.util.List; - public interface ITenantRepository extends JpaRepository { Tenant findByTenantCode(String tenantCode); diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/IUserRepository.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/IUserRepository.java index d524797..f9b8065 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/IUserRepository.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/repository/IUserRepository.java @@ -1,8 +1,8 @@ package com.qc.soft.deploy.ease.repository; -import com.qc.soft.deploy.ease.entity.User; +import com.qc.soft.deploy.ease.entity.SysUser; import org.springframework.data.jpa.repository.JpaRepository; -public interface IUserRepository extends JpaRepository { - User findByUsernameAndPassword(String username, String password); +public interface IUserRepository extends JpaRepository { + SysUser findByUsernameAndPassword(String username, String password); } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/INacosService.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/INacosService.java index 434dcc6..5973ab0 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/INacosService.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/INacosService.java @@ -1,6 +1,11 @@ package com.qc.soft.deploy.ease.service; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.List; + public interface INacosService { void instances(); + List> instances(List tenantCodes); } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/ITenantService.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/ITenantService.java index 09b0060..e5d282b 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/ITenantService.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/ITenantService.java @@ -1,6 +1,6 @@ package com.qc.soft.deploy.ease.service; -import com.qc.soft.deploy.ease.api.response.ProjectResponse; +import com.qc.soft.deploy.ease.api.response.TenantAdapterContextResponse; import com.qc.soft.deploy.ease.api.response.TenantResponse; import java.util.List; @@ -8,4 +8,6 @@ import java.util.List; public interface ITenantService { List tenants(); + + TenantAdapterContextResponse getTenantAdapterContext(); } \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/DictionaryServiceImpl.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/DictionaryServiceImpl.java index 07c11f3..ae030af 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/DictionaryServiceImpl.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/DictionaryServiceImpl.java @@ -2,21 +2,17 @@ package com.qc.soft.deploy.ease.service.impl; import com.qc.soft.deploy.ease.api.response.DictionaryResponse; import com.qc.soft.deploy.ease.api.response.TenantDictionaryResponse; -import com.qc.soft.deploy.ease.context.TenantContext; import com.qc.soft.deploy.ease.convert.response.DictionaryConvert; -import com.qc.soft.deploy.ease.convert.response.TenantDictionaryConvert; -import com.qc.soft.deploy.ease.entity.Dictionary; -import com.qc.soft.deploy.ease.entity.TenantDictionary; +import com.qc.soft.deploy.ease.exception.BusinessException; import com.qc.soft.deploy.ease.repository.IDictionaryRepository; import com.qc.soft.deploy.ease.repository.ITenantDictionaryRepository; import com.qc.soft.deploy.ease.service.IDictionaryService; +import com.qc.soft.framework.basic.enums.IBasicState; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; + @Service public class DictionaryServiceImpl implements IDictionaryService { @@ -36,19 +32,23 @@ public class DictionaryServiceImpl implements IDictionaryService { @Override public List findDictsByTenantCode() { - String tenantCode = TenantContext.getCurrentTenant(); - List tenantSharingDict = dictionaryRepository.findAll().stream().filter(Dictionary::isTenantSharing).collect(Collectors.toList()); - List tenantDict = tenantDictionaryRepository.findAllByTenantCode(tenantCode); - List mergeTenantDict = new ArrayList<>(); - tenantSharingDict.forEach(v -> { - String systemDictCode = v.getCode(); - Map tenantDictMap = tenantDict.stream().collect(Collectors.toMap(TenantDictionary::getCode, tenantDictionary -> tenantDictionary)); - TenantDictionary tenantDictionary = tenantDictMap.get(systemDictCode); - if (tenantDictionary == null) { - tenantDictMap.put(systemDictCode, com.qc.soft.deploy.ease.convert.dto.DictionaryConvert.INSTANCE.systemDictionaryToTenantDictionary(v)); - } - mergeTenantDict.addAll(tenantDictMap.values()); - }); - return TenantDictionaryConvert.INSTANCE.entityToResponse(mergeTenantDict); + throw new BusinessException(IBasicState.TENANT_DOES_NOT_EXIST); + + + +// String tenantCode = TenantContext.getCurrentTenant(); +// List tenantSharingDict = dictionaryRepository.findAll().stream().filter(Dictionary::isTenantSharing).collect(Collectors.toList()); +// List tenantDict = tenantDictionaryRepository.findAllByTenantCode(tenantCode); +// List mergeTenantDict = new ArrayList<>(); +// tenantSharingDict.forEach(v -> { +// String systemDictCode = v.getCode(); +// Map tenantDictMap = tenantDict.stream().collect(Collectors.toMap(TenantDictionary::getCode, tenantDictionary -> tenantDictionary)); +// TenantDictionary tenantDictionary = tenantDictMap.get(systemDictCode); +// if (tenantDictionary == null) { +// tenantDictMap.put(systemDictCode, com.qc.soft.deploy.ease.convert.dto.DictionaryConvert.INSTANCE.systemDictionaryToTenantDictionary(v)); +// } +// mergeTenantDict.addAll(tenantDictMap.values()); +// }); +// return TenantDictionaryConvert.INSTANCE.entityToResponse(mergeTenantDict); } } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/JenkinsServiceImpl.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/JenkinsServiceImpl.java index 669f074..88ae5b6 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/JenkinsServiceImpl.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/JenkinsServiceImpl.java @@ -1,81 +1,81 @@ -package com.qc.soft.deploy.ease.service.impl; - -import com.qc.soft.deploy.ease.fegin.response.JenkinsJobResponse; -import com.qc.soft.deploy.ease.event.JenkinsJobChangeEvent; -import com.qc.soft.deploy.ease.enums.JenkinsJobStatus; -import com.qc.soft.deploy.ease.service.IJenkinsService; -import org.springframework.messaging.Message; -import org.springframework.messaging.support.MessageBuilder; -import org.springframework.statemachine.StateMachine; -import org.springframework.statemachine.persist.StateMachinePersister; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.HashMap; -import java.util.Map; - -@Service -public class JenkinsServiceImpl implements IJenkinsService { - - - @Resource - private StateMachine jenkinsStateMachine; - - - @Resource - private StateMachinePersister persister; - - private int id = 1; - - private Map jenkinsJobs = new HashMap<>(); - - @Override - public JenkinsJobResponse create() { - JenkinsJobResponse jenkinsJob = new JenkinsJobResponse(); - jenkinsJob.setResult(JenkinsJobStatus.WAITING_BUILD);//设置订单的初始状态 - jenkinsJob.setId((long) id++);//设置订单的编号,累加 - jenkinsJobs.put(jenkinsJob.getId(), jenkinsJob);//根据编号对应地存储订单对象,便于存取 - System.out.println("订单创建成功" + jenkinsJob.toString()); - return jenkinsJob;//返回创建好的订单对象 - } - - //获取订单列表 - @Override - public Map getJenkinsJobs() { - return jenkinsJobs; - } - - - private synchronized boolean sendEvent(Message message, JenkinsJobResponse jenkinsJobResponse) { - boolean result = false; - try { - jenkinsStateMachine.start(); - //尝试恢复状态机状态 - persister.restore(jenkinsStateMachine, jenkinsJobResponse); - //添加延迟用于线程安全测试 - Thread.sleep(1000); - result = jenkinsStateMachine.sendEvent(message); - //持久化状态机状态 - persister.persist(jenkinsStateMachine, jenkinsJobResponse); - } catch (Exception e) { - e.printStackTrace(); - } finally { - jenkinsStateMachine.stop(); - } - return result; - } - - @Override - public JenkinsJobResponse pay(long id) { - - /*根据id获取订单集合的指定订单*/ - JenkinsJobResponse jenkinsJobResponse = jenkinsJobs.get(id); - Message message = MessageBuilder.withPayload(JenkinsJobChangeEvent.SUCCESS).setHeader("jenkinsJobResponse", jenkinsJobResponse).build(); - - if (!sendEvent(message, jenkinsJobResponse)) { - System.out.println("订单支付失败"); - } - - return jenkinsJobResponse; - } -} +//package com.qc.soft.deploy.ease.service.impl; +// +//import com.qc.soft.deploy.ease.fegin.response.JenkinsJobResponse; +//import com.qc.soft.deploy.ease.event.JenkinsJobChangeEvent; +//import com.qc.soft.deploy.ease.enums.JenkinsJobStatus; +//import com.qc.soft.deploy.ease.service.IJenkinsService; +//import org.springframework.messaging.Message; +//import org.springframework.messaging.support.MessageBuilder; +//import org.springframework.statemachine.StateMachine; +//import org.springframework.statemachine.persist.StateMachinePersister; +//import org.springframework.stereotype.Service; +// +//import javax.annotation.Resource; +//import java.util.HashMap; +//import java.util.Map; +// +//@Service +//public class JenkinsServiceImpl implements IJenkinsService { +// +// +// @Resource +// private StateMachine jenkinsStateMachine; +// +// +// @Resource +// private StateMachinePersister persister; +// +// private int id = 1; +// +// private Map jenkinsJobs = new HashMap<>(); +// +// @Override +// public JenkinsJobResponse create() { +// JenkinsJobResponse jenkinsJob = new JenkinsJobResponse(); +// jenkinsJob.setResult(JenkinsJobStatus.WAITING_BUILD);//设置订单的初始状态 +// jenkinsJob.setId((long) id++);//设置订单的编号,累加 +// jenkinsJobs.put(jenkinsJob.getId(), jenkinsJob);//根据编号对应地存储订单对象,便于存取 +// System.out.println("订单创建成功" + jenkinsJob.toString()); +// return jenkinsJob;//返回创建好的订单对象 +// } +// +// //获取订单列表 +// @Override +// public Map getJenkinsJobs() { +// return jenkinsJobs; +// } +// +// +// private synchronized boolean sendEvent(Message message, JenkinsJobResponse jenkinsJobResponse) { +// boolean result = false; +// try { +// jenkinsStateMachine.start(); +// //尝试恢复状态机状态 +// persister.restore(jenkinsStateMachine, jenkinsJobResponse); +// //添加延迟用于线程安全测试 +// Thread.sleep(1000); +// result = jenkinsStateMachine.sendEvent(message); +// //持久化状态机状态 +// persister.persist(jenkinsStateMachine, jenkinsJobResponse); +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// jenkinsStateMachine.stop(); +// } +// return result; +// } +// +// @Override +// public JenkinsJobResponse pay(long id) { +// +// /*根据id获取订单集合的指定订单*/ +// JenkinsJobResponse jenkinsJobResponse = jenkinsJobs.get(id); +// Message message = MessageBuilder.withPayload(JenkinsJobChangeEvent.SUCCESS).setHeader("jenkinsJobResponse", jenkinsJobResponse).build(); +// +// if (!sendEvent(message, jenkinsJobResponse)) { +// System.out.println("订单支付失败"); +// } +// +// return jenkinsJobResponse; +// } +//} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/NacosServiceImpl.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/NacosServiceImpl.java index e744c40..e1fafb0 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/NacosServiceImpl.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/NacosServiceImpl.java @@ -9,9 +9,12 @@ import com.qc.soft.deploy.ease.api.response.TenantResponse; import com.qc.soft.deploy.ease.consts.Consts; import com.qc.soft.deploy.ease.service.INacosService; import com.qc.soft.deploy.ease.service.ITenantService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.tuple.Pair; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; @Service @@ -38,4 +41,23 @@ public class NacosServiceImpl implements INacosService { } } + @Override + public List> instances(List tenantCodes) { + List> result = new ArrayList<>(); + try { + NamingService namingService = NamingFactory.createNamingService(nacosDiscoveryProperties.getNacosProperties()); + for (String tenantCode : tenantCodes) { + List instances = namingService.getAllInstances(String.format(Consts.TENANT_ADAPTER_SERVICE_NAME, tenantCode), nacosDiscoveryProperties.getGroup()); + if (CollectionUtils.isEmpty(instances)) { + result.add(Pair.of(tenantCode, false)); + } else { + result.add(Pair.of(tenantCode, true)); + } + } + return result; + } catch (NacosException e) { + throw new RuntimeException(e); + } + } + } diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/ProjectServiceImpl.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/ProjectServiceImpl.java index b26880c..2f37f26 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/ProjectServiceImpl.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/ProjectServiceImpl.java @@ -1,10 +1,10 @@ package com.qc.soft.deploy.ease.service.impl; import com.qc.soft.deploy.ease.api.response.ProjectResponse; -import com.qc.soft.deploy.ease.context.TenantContext; import com.qc.soft.deploy.ease.convert.response.ProjectConvert; import com.qc.soft.deploy.ease.repository.IProjectRepository; import com.qc.soft.deploy.ease.service.IProjectService; +import com.qc.soft.framework.basic.context.TenantContext; import org.springframework.stereotype.Service; import javax.annotation.Resource; diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/TenantServiceImpl.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/TenantServiceImpl.java index 3cdc5e2..c569a33 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/TenantServiceImpl.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/TenantServiceImpl.java @@ -1,22 +1,22 @@ package com.qc.soft.deploy.ease.service.impl; +import com.qc.soft.deploy.ease.api.response.TenantAdapterContextResponse; +import com.qc.soft.deploy.ease.api.response.TenantEnvResponse; import com.qc.soft.deploy.ease.api.response.TenantResponse; import com.qc.soft.deploy.ease.convert.response.TenantConvert; -import com.qc.soft.deploy.ease.holder.K8sApiHolder; -import com.qc.soft.deploy.ease.k8s.K8sDeploymentResponse; -import com.qc.soft.deploy.ease.k8s.K8sNamespaceResponse; -import com.qc.soft.deploy.ease.k8s.K8sPodResponse; +import com.qc.soft.deploy.ease.entity.SysJenkinsConfig; +import com.qc.soft.deploy.ease.entity.TenantEnv; +import com.qc.soft.deploy.ease.entity.TenantEnvJenkins; +import com.qc.soft.deploy.ease.repository.ISysJenkinsConfigRepository; +import com.qc.soft.deploy.ease.repository.ITenantEnvJenkinsRepository; +import com.qc.soft.deploy.ease.repository.ITenantEnvRepository; import com.qc.soft.deploy.ease.repository.ITenantRepository; -import com.qc.soft.deploy.ease.service.IK8sService; import com.qc.soft.deploy.ease.service.ITenantService; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import com.qc.soft.framework.basic.context.TenantContext; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.io.IOException; -import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -25,8 +25,35 @@ public class TenantServiceImpl implements ITenantService { @Resource private ITenantRepository tenantRepository; + + @Resource + private ITenantEnvRepository tenantEnvRepository; + + @Resource + private ITenantEnvJenkinsRepository tenantEnvJenkinsRepository; + + @Resource + private ISysJenkinsConfigRepository sysJenkinsConfigRepository; + @Override public List tenants() { return TenantConvert.INSTANCE.listToResponse(tenantRepository.findAll()); } + + + @Override + public TenantAdapterContextResponse getTenantAdapterContext() { + String currentTenant = TenantContext.getCurrentTenant(); + TenantAdapterContextResponse contextResponse = new TenantAdapterContextResponse(); + List tenantEnvs = tenantEnvRepository.findByTenantCode(currentTenant); + List tenantEnvCodes = tenantEnvs.stream().map(TenantEnv::getEnvCode).collect(Collectors.toList()); + List tenantEnvJenkins = tenantEnvJenkinsRepository.findByEnvCodeIn(tenantEnvCodes); + List jenkinsCodes = tenantEnvJenkins.stream().map(TenantEnvJenkins::getJenkinsCode).distinct().collect(Collectors.toList()); + List jenkinsConfigs = sysJenkinsConfigRepository.findByJenkinsCodeIn(jenkinsCodes); + List envList = new ArrayList<>(tenantEnvs.size()); + tenantEnvs.forEach(tenantEnv -> { + String envCode = tenantEnv.getEnvCode(); + }); + return null; + } } \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/UserServiceImpl.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/UserServiceImpl.java index ec6b46a..b2c00f6 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/UserServiceImpl.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/service/impl/UserServiceImpl.java @@ -1,6 +1,6 @@ package com.qc.soft.deploy.ease.service.impl; -import com.qc.soft.deploy.ease.entity.User; +import com.qc.soft.deploy.ease.entity.SysUser; import com.qc.soft.deploy.ease.repository.IUserRepository; import com.qc.soft.deploy.ease.service.IUserService; import org.springframework.stereotype.Service; @@ -15,7 +15,7 @@ public class UserServiceImpl implements IUserService { @Override public boolean login(String username, String password) { - User user = userRepository.findByUsernameAndPassword(username, password); + SysUser user = userRepository.findByUsernameAndPassword(username, password); return user != null; } } \ No newline at end of file diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/state/IBusinessState.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/state/IBusinessState.java new file mode 100644 index 0000000..f5b29a8 --- /dev/null +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/state/IBusinessState.java @@ -0,0 +1,20 @@ +package com.qc.soft.deploy.ease.state; + +import com.qc.soft.framework.basic.entity.BasicResponseState; +import com.qc.soft.framework.basic.enums.IBasicState; + +public interface IBusinessState extends IBasicState { + +// +// SUCCESS("操作成功"), +// FAILURE("操作失败"), +// TENANT_DOES_NOT_EXIST("租户不存在"), +// TENANT_NOT_ENABLED("%s租户未启用"); +// +// private final String message; +// +// BusinessErrorCode(String message) { +// this.message = message; +// } + +} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/statemachine/JenkinsJobStatemachineConfig.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/statemachine/JenkinsJobStatemachineConfig.java index 1dcceae..abd8582 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/statemachine/JenkinsJobStatemachineConfig.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/statemachine/JenkinsJobStatemachineConfig.java @@ -1,55 +1,55 @@ -package com.qc.soft.deploy.ease.statemachine; - -import com.qc.soft.deploy.ease.fegin.response.JenkinsJobResponse; -import com.qc.soft.deploy.ease.event.JenkinsJobChangeEvent; -import com.qc.soft.deploy.ease.enums.JenkinsJobStatus; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.statemachine.StateMachineContext; -import org.springframework.statemachine.StateMachinePersist; -import org.springframework.statemachine.config.EnableStateMachine; -import org.springframework.statemachine.config.StateMachineConfigurerAdapter; -import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; -import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; -import org.springframework.statemachine.persist.DefaultStateMachinePersister; -import org.springframework.statemachine.support.DefaultStateMachineContext; - -import java.util.EnumSet; - -@Configuration -@EnableStateMachine(name = "jenkinsStatemachine") -public class JenkinsJobStatemachineConfig extends StateMachineConfigurerAdapter { - - - @Override - public void configure(StateMachineStateConfigurer states) throws Exception { - states.withStates().initial(JenkinsJobStatus.WAITING_BUILD).states(EnumSet.allOf(JenkinsJobStatus.class)); - } - - - public void configure(StateMachineTransitionConfigurer transitions) throws Exception { - transitions - .withExternal().source(JenkinsJobStatus.WAITING_BUILD).target(JenkinsJobStatus.BUILDING).event(JenkinsJobChangeEvent.SUCCESS) - .and() - .withExternal().source(JenkinsJobStatus.WAITING_BUILD).target(JenkinsJobStatus.BUILDING).event(JenkinsJobChangeEvent.ABORTED) - .and() - .withExternal().source(JenkinsJobStatus.WAITING_BUILD).target(JenkinsJobStatus.BUILDING).event(JenkinsJobChangeEvent.FAILURE); - } - - @Bean - public DefaultStateMachinePersister persister() { - return new DefaultStateMachinePersister<>(new StateMachinePersist() { - @Override - public void write(StateMachineContext context, JenkinsJobResponse jenkinsJob) throws Exception { - jenkinsJob.setResult(JenkinsJobStatus.BUILD_END); - System.out.println("persister writer" + jenkinsJob.toString()); - } - - @Override - public StateMachineContext read(JenkinsJobResponse jenkinsJob) throws Exception { - System.out.println("persister read" + jenkinsJob.toString()); - return new DefaultStateMachineContext(jenkinsJob.getResult(), null, null, null); - } - }); - } -} +//package com.qc.soft.deploy.ease.statemachine; +// +//import com.qc.soft.deploy.ease.fegin.response.JenkinsJobResponse; +//import com.qc.soft.deploy.ease.event.JenkinsJobChangeEvent; +//import com.qc.soft.deploy.ease.enums.JenkinsJobStatus; +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.statemachine.StateMachineContext; +//import org.springframework.statemachine.StateMachinePersist; +//import org.springframework.statemachine.config.EnableStateMachine; +//import org.springframework.statemachine.config.StateMachineConfigurerAdapter; +//import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; +//import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; +//import org.springframework.statemachine.persist.DefaultStateMachinePersister; +//import org.springframework.statemachine.support.DefaultStateMachineContext; +// +//import java.util.EnumSet; +// +//@Configuration +//@EnableStateMachine(name = "jenkinsStatemachine") +//public class JenkinsJobStatemachineConfig extends StateMachineConfigurerAdapter { +// +// +// @Override +// public void configure(StateMachineStateConfigurer states) throws Exception { +// states.withStates().initial(JenkinsJobStatus.WAITING_BUILD).states(EnumSet.allOf(JenkinsJobStatus.class)); +// } +// +// +// public void configure(StateMachineTransitionConfigurer transitions) throws Exception { +// transitions +// .withExternal().source(JenkinsJobStatus.WAITING_BUILD).target(JenkinsJobStatus.BUILDING).event(JenkinsJobChangeEvent.SUCCESS) +// .and() +// .withExternal().source(JenkinsJobStatus.WAITING_BUILD).target(JenkinsJobStatus.BUILDING).event(JenkinsJobChangeEvent.ABORTED) +// .and() +// .withExternal().source(JenkinsJobStatus.WAITING_BUILD).target(JenkinsJobStatus.BUILDING).event(JenkinsJobChangeEvent.FAILURE); +// } +// +// @Bean +// public DefaultStateMachinePersister persister() { +// return new DefaultStateMachinePersister<>(new StateMachinePersist() { +// @Override +// public void write(StateMachineContext context, JenkinsJobResponse jenkinsJob) throws Exception { +// jenkinsJob.setResult(JenkinsJobStatus.BUILD_END); +// System.out.println("persister writer" + jenkinsJob.toString()); +// } +// +// @Override +// public StateMachineContext read(JenkinsJobResponse jenkinsJob) throws Exception { +// System.out.println("persister read" + jenkinsJob.toString()); +// return new DefaultStateMachineContext(jenkinsJob.getResult(), null, null, null); +// } +// }); +// } +//} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/statemachine/listener/JenkinsJobStatusListenerImpl.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/statemachine/listener/JenkinsJobStatusListenerImpl.java index aeb87af..d2371a5 100644 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/statemachine/listener/JenkinsJobStatusListenerImpl.java +++ b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/statemachine/listener/JenkinsJobStatusListenerImpl.java @@ -1,38 +1,38 @@ -package com.qc.soft.deploy.ease.statemachine.listener; - -import com.qc.soft.deploy.ease.fegin.response.JenkinsJobResponse; -import com.qc.soft.deploy.ease.event.JenkinsJobChangeEvent; -import org.springframework.messaging.Message; -import org.springframework.statemachine.annotation.OnTransition; -import org.springframework.statemachine.annotation.WithStateMachine; -import org.springframework.stereotype.Component; - -@Component("jenkinsJobStatusListener") -@WithStateMachine(name = "jenkinsStatemachine") -public class JenkinsJobStatusListenerImpl { - - @OnTransition(source = "WAITING_BUILD", target = "BUILDING") - public boolean jenkinsBuildingTransition(Message message) { - JenkinsJobResponse jenkinsJobResponse = (JenkinsJobResponse) message.getHeaders().get("jenkinsJobResponse"); - jenkinsJobResponse.setResult(jenkinsJobResponse.getResult()); - System.out.println("支付,状态机反馈信息:" + message.getHeaders().toString()); - return true; - } - - @OnTransition(source = "BUILDING", target = "BUILD_END") - public boolean jenkinsBuildEndTransition(Message message) { - JenkinsJobResponse jenkinsJobResponse = (JenkinsJobResponse) message.getHeaders().get("jenkinsJobResponse"); - jenkinsJobResponse.setResult(jenkinsJobResponse.getResult()); - System.out.println("支付,状态机反馈信息:" + message.getHeaders().toString()); - return true; - } - -// @OnTransition(source = "BUILDING", target = "BUILDING") -// public boolean jenkinsBuildingTransition(Message message) { +//package com.qc.soft.deploy.ease.statemachine.listener; +// +//import com.qc.soft.deploy.ease.fegin.response.JenkinsJobResponse; +//import com.qc.soft.deploy.ease.event.JenkinsJobChangeEvent; +//import org.springframework.messaging.Message; +//import org.springframework.statemachine.annotation.OnTransition; +//import org.springframework.statemachine.annotation.WithStateMachine; +//import org.springframework.stereotype.Component; +// +//@Component("jenkinsJobStatusListener") +//@WithStateMachine(name = "jenkinsStatemachine") +//public class JenkinsJobStatusListenerImpl { +// +// @OnTransition(source = "WAITING_BUILD", target = "BUILDING") +// public boolean jenkinsBuildingTransition(Message message) { // JenkinsJobResponse jenkinsJobResponse = (JenkinsJobResponse) message.getHeaders().get("jenkinsJobResponse"); -//// jenkinsJobResponse.setStatus(OrderStatus.WAIT_DELIVER); +// jenkinsJobResponse.setResult(jenkinsJobResponse.getResult()); // System.out.println("支付,状态机反馈信息:" + message.getHeaders().toString()); // return true; // } - -} +// +// @OnTransition(source = "BUILDING", target = "BUILD_END") +// public boolean jenkinsBuildEndTransition(Message message) { +// JenkinsJobResponse jenkinsJobResponse = (JenkinsJobResponse) message.getHeaders().get("jenkinsJobResponse"); +// jenkinsJobResponse.setResult(jenkinsJobResponse.getResult()); +// System.out.println("支付,状态机反馈信息:" + message.getHeaders().toString()); +// return true; +// } +// +//// @OnTransition(source = "BUILDING", target = "BUILDING") +//// public boolean jenkinsBuildingTransition(Message message) { +//// JenkinsJobResponse jenkinsJobResponse = (JenkinsJobResponse) message.getHeaders().get("jenkinsJobResponse"); +////// jenkinsJobResponse.setStatus(OrderStatus.WAIT_DELIVER); +//// System.out.println("支付,状态机反馈信息:" + message.getHeaders().toString()); +//// return true; +//// } +// +//} diff --git a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/K8sClientUtils.java b/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/K8sClientUtils.java deleted file mode 100644 index cf5a582..0000000 --- a/deploy-ease-core/src/main/java/com/qc/soft/deploy/ease/utils/K8sClientUtils.java +++ /dev/null @@ -1,263 +0,0 @@ -package com.qc.soft.deploy.ease.utils; - -import io.kubernetes.client.openapi.ApiClient; -import io.kubernetes.client.openapi.ApiException; -import io.kubernetes.client.openapi.apis.AppsV1Api; -import io.kubernetes.client.openapi.apis.CoreV1Api; -import io.kubernetes.client.openapi.models.V1DeploymentList; -import io.kubernetes.client.openapi.models.V1EndpointsList; -import io.kubernetes.client.openapi.models.V1NamespaceList; -import io.kubernetes.client.openapi.models.V1PodList; -import io.kubernetes.client.openapi.models.V1Scale; -import io.kubernetes.client.util.ClientBuilder; -import io.kubernetes.client.util.KubeConfig; -import lombok.extern.slf4j.Slf4j; - -import java.io.FileReader; -import java.io.IOException; - -@Slf4j -public class K8sClientUtils { - - private ApiClient apiClient; - - - /** - * 构建集群POD内通过SA访问的客户端 - * loading the in-cluster config2, including: - * 1. service-account CA - * 2. service-account bearer-token - * 3. service-account namespace - * 4. master endpoints(ip, port) from pre-set environment variables - */ - public K8sClientUtils() { - try { - this.apiClient = ClientBuilder.cluster().build(); - } catch (IOException e) { - log.error("构建K8s-Client异常", e); - throw new RuntimeException("构建K8s-Client异常"); - } - } - - - /** - * 构建集群外通过UA访问的客户端 - * loading the out-of-cluster config2, a kubeconfig from file-system - * - * @param kubeConfigPath kube连接配置文件 - */ - public K8sClientUtils(String kubeConfigPath) { - try { - this.apiClient = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build(); - } catch (IOException e) { - log.error("读取kubeConfigPath异常", e); - throw new RuntimeException("读取kubeConfigPath异常"); - } catch (Exception e) { - log.error("构建K8s-Client异常", e); - throw new RuntimeException("构建K8s-Client异常"); - } - } - - - /** - * 获取所有的Pod - * - * @return podList - */ - public V1PodList getAllPodList() { - // new a CoreV1Api - CoreV1Api api = new CoreV1Api(apiClient); - // invokes the CoreV1Api client - try { - V1PodList list = api.listPodForAllNamespaces(null, null, null, null, null, null, null, null, null, null, null); - return list; - } catch (ApiException e) { - log.error("获取podlist异常:" + e.getResponseBody(), e); - } - return null; - } - - public V1NamespaceList getAllNamespaceList() { - // new a CoreV1Api - CoreV1Api api = new CoreV1Api(apiClient); - // invokes the CoreV1Api client - try { - return api.listNamespace(null, null, null, null, null, null, null, null, null, null, null); - } catch (ApiException e) { - log.error("获取podlist异常:" + e.getResponseBody(), e); - } - return null; - } - - public V1DeploymentList getDeploymentList(String namespace) { - try { - AppsV1Api api = new AppsV1Api(apiClient); - return api.listNamespacedDeployment(namespace, null, null, null, null, null, null, null, null, null, null, null); - } catch (ApiException e) { - throw new RuntimeException(e); - } - } - - public V1EndpointsList getEndpointsList() { - // new a CoreV1Api - CoreV1Api api = new CoreV1Api(apiClient); - // invokes the CoreV1Api client - try { - return api.listEndpointsForAllNamespaces(null, null, null, null, null, null, null, null, null, null, null); - } catch (ApiException e) { - log.error("获取podlist异常:" + e.getResponseBody(), e); - } - return null; - } - - public V1Scale readNamespacedDeploymentScale(String namespace, String name) { - try { - AppsV1Api api = new AppsV1Api(apiClient); - return api.readNamespacedDeploymentScale(name, namespace, null); - } catch (ApiException e) { - throw new RuntimeException(e); - } - } - - public V1Scale replaceNamespacedDeploymentScale(String appName, String namespace, V1Scale v1Scale){ - try { - AppsV1Api api = new AppsV1Api(apiClient); - return api.replaceNamespacedDeploymentScale(appName, namespace, v1Scale, null, null, null, null); - } catch (ApiException e) { - throw new RuntimeException(e); - } - } - - - /** - * 创建k8s service - * - * @param namespace 命名空间 - * @param serviceName 服务名称 - * @param port 服务端口号(和目标pod的端口号一致) - * @param selector pod标签选择器 - * @return 创建成功的service对象 - */ -// public V1Service createService(String namespace, String serviceName, Integer port, Map selector) { -// //构建service的yaml对象 -// V1Service -// .withNewMetadata() -// .withName(serviceName) -// .endMetadata() -// .withNewSpec() -// .addNewPort() -// .withProtocol("TCP") -// .withPort(port) -// .withTargetPort(new IntOrString(port)) -// .endPort() -// .withSelector(selector) -// .endSpec() -// .build(); -// -// -// // Deployment and StatefulSet is defined in apps/v1, so you should use AppsV1Api instead of CoreV1API -// CoreV1Api api = new CoreV1Api(apiClient); -// V1Service v1Service = null; -// try { -// v1Service = api.createNamespacedService(namespace, svc, null, null, null); -// } catch (ApiException e) { -// log.error("创建service异常:" + e.getResponseBody(), e); -// } catch (Exception e) { -// log.error("创建service系统异常:", e); -// } -// return v1Service; -// } - - - /** - * 创建k8s V1Ingress - * - * @param namespace 命名空间 - * @param ingressName ingress名称 - * @param annotations ingress注解 - * @param path 匹配的路径 - * @param serviceName 路由到的服务名称 - * @param servicePort 路由到的服务端口 - * @return 创建成功的ingress对象 - */ -// public V1Ingress createV1Ingress(String namespace, String ingressName, Map annotations, String path, -// String serviceName, Integer servicePort) { -// //构建ingress的yaml对象 -// V1Ingress ingress = new V1IngressBuilder() -// .withNewMetadata() -// .withName(ingressName) -// .withAnnotations(annotations) -// .endMetadata() -// .withNewSpec() -// .addNewRule() -// .withHttp(new V1HTTPIngressRuleValueBuilder().addToPaths(new V1HTTPIngressPathBuilder() -// .withPath(path) -// .withPathType("Prefix") -// .withBackend(new V1IngressBackendBuilder() -// .withService(new V1IngressServiceBackendBuilder() -// .withName(serviceName) -// .withPort(new V1ServiceBackendPortBuilder() -// .withNumber(servicePort).build()).build()).build()).build()).build()) -// .endRule() -// .endSpec() -// .build(); -// -// -// //调用对应的API执行创建ingress的操作 -// NetworkingV1Api api = new NetworkingV1Api(apiClient); -// V1Ingress v1Ingress = null; -// try { -// v1Ingress = api.createNamespacedIngress(namespace, ingress, null, null, null); -// } catch (ApiException e) { -// log.error("创建ingress异常:" + e.getResponseBody(), e); -// } catch (Exception e) { -// log.error("创建ingress系统异常:", e); -// } -// return v1Ingress; -// } - - - /** - * 创建k8s ExtensionIngress - * - * @param namespace 命名空间 - * @param ingressName ingress名称 - * @param annotations ingress注解 - * @param path 匹配的路径 - * @param serviceName 路由到的服务名称 - * @param servicePort 路由到的服务端口 - * @return 创建成功的ingress对象 - */ -// public ExtensionsV1beta1Ingress createExtensionIngress(String namespace, String ingressName, Map annotations, String path, -// String serviceName, Integer servicePort) { -// //构建ingress的yaml对象 -// ExtensionsV1beta1Ingress ingress = new ExtensionsV1beta1IngressBuilder() -// .withNewMetadata() -// .withName(ingressName) -// .withAnnotations(annotations) -// .endMetadata() -// .withNewSpec() -// .addNewRule() -// .withHttp(new ExtensionsV1beta1HTTPIngressRuleValueBuilder().addToPaths(new ExtensionsV1beta1HTTPIngressPathBuilder() -// .withPath(path) -// .withBackend(new ExtensionsV1beta1IngressBackendBuilder() -// .withServiceName(serviceName) -// .withServicePort(new IntOrString(servicePort)).build()).build()).build()) -// .endRule() -// .endSpec() -// .build(); -// -// -// //调用对应的API执行创建ingress的操作 -// ExtensionsV1beta1Api api = new ExtensionsV1beta1Api(apiClient); -// ExtensionsV1beta1Ingress extensionsV1beta1Ingress = null; -// try { -// extensionsV1beta1Ingress = api.createNamespacedIngress(namespace, ingress, null, null, null); -// } catch (ApiException e) { -// log.error("创建ingress异常:" + e.getResponseBody(), e); -// } catch (Exception e) { -// log.error("创建ingress系统异常:", e); -// } -// return extensionsV1beta1Ingress; -// } -} \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/META-INF/spring.factories b/deploy-ease-core/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..8bf408c --- /dev/null +++ b/deploy-ease-core/src/main/resources/META-INF/spring.factories @@ -0,0 +1,3 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.qc.soft.framework.basic.config.GlobalWebConfigurer + diff --git a/deploy-ease-core/src/main/resources/sql/project_environment.sql b/deploy-ease-core/src/main/resources/sql/project_environment.sql deleted file mode 100644 index 8aab76d..0000000 --- a/deploy-ease-core/src/main/resources/sql/project_environment.sql +++ /dev/null @@ -1,20 +0,0 @@ -USE deploy_ease_dev; -DROP TABLE IF EXISTS project_environment; -CREATE TABLE project_environment -( - id INT AUTO_INCREMENT PRIMARY KEY, - environment_code VARCHAR(50) NOT NULL, - environment_name VARCHAR(50) NOT NULL, - environment_type TINYINT NOT NULL COMMENT '1、K8S 2、Docker 3、单点部署', - project_code VARCHAR(50) NOT NULL, - is_vpn TINYINT NOT NULL, - create_time DATETIME NOT NULL DEFAULT NOW(), - update_time DATETIME NOT NULL DEFAULT NOW(), - is_deleted TINYINT NOT NULL DEFAULT 0 -); -INSERT INTO project_environment (environment_code, environment_name, environment_type, is_vpn, project_code) -VALUES ('dev', '开发环境', 1, 1, 'scp'); -INSERT INTO project_environment (environment_code, environment_name, environment_type, is_vpn, project_code) -VALUES ('uat', '测试环境', 1, 1, 'scp'); -INSERT INTO project_environment (environment_code, environment_name, environment_type, is_vpn, project_code) -VALUES ('prod', '生产环境', 1, 1, 'scp'); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/dictionary.sql b/deploy-ease-core/src/main/resources/sql/sys_dict.sql similarity index 70% rename from deploy-ease-core/src/main/resources/sql/dictionary.sql rename to deploy-ease-core/src/main/resources/sql/sys_dict.sql index 0d22a82..8212ff8 100644 --- a/deploy-ease-core/src/main/resources/sql/dictionary.sql +++ b/deploy-ease-core/src/main/resources/sql/sys_dict.sql @@ -1,6 +1,6 @@ USE deploy_ease_dev; -DROP TABLE IF EXISTS dictionary; -CREATE TABLE dictionary +DROP TABLE IF EXISTS sys_dict; +CREATE TABLE sys_dict ( id INT AUTO_INCREMENT PRIMARY KEY, dictionary_code VARCHAR(50) NOT NULL, @@ -12,4 +12,4 @@ CREATE TABLE dictionary update_time DATETIME NOT NULL DEFAULT NOW(), is_deleted TINYINT NOT NULL DEFAULT 0 ); -INSERT INTO dictionary ( dictionary_code, dictionary_name, dictionary_value) VALUE ('JENKINS_BASE_API', 'Jenkins地址', 'http://jenkins-rd.longi.com:8080'); +INSERT INTO sys_dict ( dictionary_code, dictionary_name, dictionary_value) VALUE ('JENKINS_BASE_API', 'Jenkins地址', 'http://jenkins-rd.longi.com:8080'); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/sys_group.sql b/deploy-ease-core/src/main/resources/sql/sys_group.sql new file mode 100644 index 0000000..55dfb7c --- /dev/null +++ b/deploy-ease-core/src/main/resources/sql/sys_group.sql @@ -0,0 +1,12 @@ +USE deploy_ease_dev; +DROP TABLE IF EXISTS sys_group; +CREATE TABLE sys_group +( + id INT AUTO_INCREMENT PRIMARY KEY, + group_code VARCHAR(50) NOT NULL, + group_name VARCHAR(50) NOT NULL, + create_time DATETIME NOT NULL DEFAULT NOW(), + update_time DATETIME NOT NULL DEFAULT NOW(), + is_deleted TINYINT NOT NULL DEFAULT 0 +); +INSERT INTO sys_group(group_code, group_name)VALUES ('scp', '计划产品项目组'); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/sys_jenkins_config.sql b/deploy-ease-core/src/main/resources/sql/sys_jenkins_config.sql new file mode 100644 index 0000000..0d262e2 --- /dev/null +++ b/deploy-ease-core/src/main/resources/sql/sys_jenkins_config.sql @@ -0,0 +1,22 @@ +USE deploy_ease_dev; +DROP TABLE IF EXISTS sys_jenkins_config; +CREATE TABLE sys_jenkins_config +( + `id` BIGINT(20) AUTO_INCREMENT, + `jenkins_code` VARCHAR(100) NOT NULL, + `jenkins_name` VARCHAR(100) NOT NULL, + `username` VARCHAR(50) NOT NULL, + `password` VARCHAR(50) NOT NULL, + `url` VARCHAR(500) NOT NULL, + `create_time` DATETIME NOT NULL DEFAULT NOW(), + `update_time` DATETIME NOT NULL DEFAULT NOW(), + `is_deleted` TINYINT NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_code` (jenkins_code) USING BTREE +) ENGINE = InnoDB + AUTO_INCREMENT = 1 + CHARACTER SET = utf8 + COLLATE = utf8_bin COMMENT = 'jenkins' + ROW_FORMAT = DYNAMIC; +INSERT INTO sys_jenkins_config (jenkins_code, jenkins_name, username, password, url) +VALUES ('scp_dev_uat', '计划产品Dev&Uat Jenkins', 'admin', '3%(Lb5GN,M''Yk\,)Dy"*', 'http://192.168.2.200:9096'); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/project.sql b/deploy-ease-core/src/main/resources/sql/sys_project.sql similarity index 50% rename from deploy-ease-core/src/main/resources/sql/project.sql rename to deploy-ease-core/src/main/resources/sql/sys_project.sql index 419af2e..bb702d4 100644 --- a/deploy-ease-core/src/main/resources/sql/project.sql +++ b/deploy-ease-core/src/main/resources/sql/sys_project.sql @@ -1,16 +1,13 @@ USE deploy_ease_dev; -DROP TABLE IF EXISTS project; -CREATE TABLE project +DROP TABLE IF EXISTS sys_project; +CREATE TABLE sys_project ( id INT AUTO_INCREMENT PRIMARY KEY, project_code VARCHAR(50) NOT NULL, project_name VARCHAR(50) NOT NULL, - tenant_code VARCHAR(50) NOT NULL, + group_code VARCHAR(50) NOT NULL, create_time DATETIME NOT NULL DEFAULT NOW(), update_time DATETIME NOT NULL DEFAULT NOW(), is_deleted TINYINT NOT NULL DEFAULT 0 ); -INSERT INTO project (project_code, project_name, tenant_code) -VALUES ('scp', '计划产品', 'longi'); -INSERT INTO project (project_code, project_name, tenant_code) -VALUES ('oms', '订单', 'longi'); \ No newline at end of file +INSERT INTO sys_project (project_code, project_name, group_code) VALUE('scp-meta', '元数据项目', 'scp'); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/user.sql b/deploy-ease-core/src/main/resources/sql/sys_user.sql similarity index 69% rename from deploy-ease-core/src/main/resources/sql/user.sql rename to deploy-ease-core/src/main/resources/sql/sys_user.sql index 0a35ec4..b19921b 100644 --- a/deploy-ease-core/src/main/resources/sql/user.sql +++ b/deploy-ease-core/src/main/resources/sql/sys_user.sql @@ -1,6 +1,6 @@ USE deploy_ease_dev; -DROP TABLE IF EXISTS user; -CREATE TABLE user +DROP TABLE IF EXISTS sys_user; +CREATE TABLE sys_user ( id INT AUTO_INCREMENT PRIMARY KEY, user_name VARCHAR(50) NOT NULL, @@ -10,4 +10,4 @@ CREATE TABLE user update_time DATETIME NOT NULL DEFAULT NOW(), is_deleted TINYINT NOT NULL DEFAULT 0 ); -INSERT INTO user(user_name, password, real_name)VALUES ('admin', '123456', '管理员'); \ No newline at end of file +INSERT INTO sys_user(user_name, password, real_name)VALUES ('admin', '123456', '管理员'); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/user_online.sql b/deploy-ease-core/src/main/resources/sql/sys_user_online.sql similarity index 84% rename from deploy-ease-core/src/main/resources/sql/user_online.sql rename to deploy-ease-core/src/main/resources/sql/sys_user_online.sql index 848c55d..cf6b783 100644 --- a/deploy-ease-core/src/main/resources/sql/user_online.sql +++ b/deploy-ease-core/src/main/resources/sql/sys_user_online.sql @@ -1,6 +1,6 @@ USE deploy_ease_dev; -DROP TABLE IF EXISTS user_online; -CREATE TABLE user_online +DROP TABLE IF EXISTS sys_user_online; +CREATE TABLE sys_user_online ( id INT AUTO_INCREMENT PRIMARY KEY, user_code VARCHAR(50) NOT NULL, diff --git a/deploy-ease-core/src/main/resources/sql/user_tenant.sql b/deploy-ease-core/src/main/resources/sql/sys_user_tenant.sql similarity index 67% rename from deploy-ease-core/src/main/resources/sql/user_tenant.sql rename to deploy-ease-core/src/main/resources/sql/sys_user_tenant.sql index 6a1cb6a..7e51d8b 100644 --- a/deploy-ease-core/src/main/resources/sql/user_tenant.sql +++ b/deploy-ease-core/src/main/resources/sql/sys_user_tenant.sql @@ -1,6 +1,6 @@ USE deploy_ease_dev; -DROP TABLE IF EXISTS user_tenant; -CREATE TABLE user_tenant +DROP TABLE IF EXISTS sys_user_tenant; +CREATE TABLE sys_user_tenant ( id INT AUTO_INCREMENT PRIMARY KEY, user_id VARCHAR(50) NOT NULL, @@ -9,4 +9,4 @@ CREATE TABLE user_tenant update_time DATETIME NOT NULL DEFAULT NOW(), is_deleted TINYINT NOT NULL DEFAULT 0 ); -INSERT INTO user_tenant (user_id, tenant_code) VALUES ('1', 'longi') \ No newline at end of file +INSERT INTO sys_user_tenant (user_id, tenant_code) VALUES ('1', 'longi') \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/tenant.sql b/deploy-ease-core/src/main/resources/sql/tenant.sql index 94ee7af..5376955 100644 --- a/deploy-ease-core/src/main/resources/sql/tenant.sql +++ b/deploy-ease-core/src/main/resources/sql/tenant.sql @@ -10,4 +10,5 @@ CREATE TABLE tenant update_time DATETIME NOT NULL DEFAULT NOW(), is_deleted TINYINT NOT NULL DEFAULT 0 ); +INSERT INTO tenant (tenant_code, tenant_name, enabled) VALUES ('scp', '计划产品', 1); INSERT INTO tenant (tenant_code, tenant_name, enabled) VALUES ('longi', '隆基', 1); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/tenant_dictionary.sql b/deploy-ease-core/src/main/resources/sql/tenant_dict.sql similarity index 73% rename from deploy-ease-core/src/main/resources/sql/tenant_dictionary.sql rename to deploy-ease-core/src/main/resources/sql/tenant_dict.sql index 5653aa0..5858245 100644 --- a/deploy-ease-core/src/main/resources/sql/tenant_dictionary.sql +++ b/deploy-ease-core/src/main/resources/sql/tenant_dict.sql @@ -1,6 +1,6 @@ USE deploy_ease_dev; -DROP TABLE IF EXISTS tenant_dictionary; -CREATE TABLE tenant_dictionary +DROP TABLE IF EXISTS tenant_dict; +CREATE TABLE tenant_dict ( id INT AUTO_INCREMENT PRIMARY KEY, dictionary_code VARCHAR(50) NOT NULL, @@ -12,5 +12,5 @@ CREATE TABLE tenant_dictionary update_time DATETIME NOT NULL DEFAULT NOW(), is_deleted TINYINT NOT NULL DEFAULT 0 ); -INSERT INTO tenant_dictionary (dictionary_code, dictionary_name, dictionary_value, tenant_code) +INSERT INTO tenant_dict (dictionary_code, dictionary_name, dictionary_value, tenant_code) VALUES ('JENKINS_BASE_API', 'Jenkins地址', 'http://jenkins-rd.longi.com:8080', 'longi'); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/tenant_env.sql b/deploy-ease-core/src/main/resources/sql/tenant_env.sql new file mode 100644 index 0000000..d8b006f --- /dev/null +++ b/deploy-ease-core/src/main/resources/sql/tenant_env.sql @@ -0,0 +1,20 @@ +USE deploy_ease_dev; +DROP TABLE IF EXISTS tenant_env; +CREATE TABLE tenant_env +( + id INT AUTO_INCREMENT PRIMARY KEY, + code VARCHAR(50) NOT NULL, + name VARCHAR(50) NOT NULL, + type TINYINT NOT NULL COMMENT '1、K8S 2、Docker 3、单点部署', + tenant_code VARCHAR(50) NOT NULL, + is_vpn TINYINT NOT NULL, + create_time DATETIME NOT NULL DEFAULT NOW(), + update_time DATETIME NOT NULL DEFAULT NOW(), + is_deleted TINYINT NOT NULL DEFAULT 0 +); +INSERT INTO tenant_env (code, name, type, tenant_code, is_vpn) +VALUES ('scp_dev', '开发环境', 1, 'scp', 1); +INSERT INTO tenant_env (code, name, type, tenant_code, is_vpn) +VALUES ('scp_uat', '测试环境', 1, 'scp', 1); +INSERT INTO tenant_env (code, name, type, tenant_code, is_vpn) +VALUES ('scp_prod', '生产环境', 1, 'scp', 1); \ No newline at end of file diff --git a/deploy-ease-core/src/main/resources/sql/tenant_env_jenkinks.sql b/deploy-ease-core/src/main/resources/sql/tenant_env_jenkinks.sql new file mode 100644 index 0000000..8755704 --- /dev/null +++ b/deploy-ease-core/src/main/resources/sql/tenant_env_jenkinks.sql @@ -0,0 +1,15 @@ +USE deploy_ease_dev; +DROP TABLE IF EXISTS tenant_env_jenkins; +CREATE TABLE tenant_env_jenkins +( + id INT AUTO_INCREMENT PRIMARY KEY, + view_name VARCHAR(100) NOT NULL, + jenkins_code VARCHAR(50) NOT NULL, + env_code VARCHAR(50) NOT NULL, + tenant_code VARCHAR(50) NOT NULL, + create_time DATETIME NOT NULL DEFAULT NOW(), + update_time DATETIME NOT NULL DEFAULT NOW(), + is_deleted TINYINT NOT NULL DEFAULT 0 +); +INSERT INTO tenant_env_jenkins (view_name, jenkins_code, env_code, tenant_code) +VALUES ('iscmtech-dev', 'scp_dev_uat', 'scp_dev', 'scp'); \ No newline at end of file diff --git a/deploy-ease-tenant-adapter/pom.xml b/deploy-ease-tenant-adapter/pom.xml index e175a00..56440e9 100644 --- a/deploy-ease-tenant-adapter/pom.xml +++ b/deploy-ease-tenant-adapter/pom.xml @@ -84,10 +84,15 @@ mapstruct-jdk8 ${mapstruct.version} + + com.qc.soft + deploy-ease-basic + ${version} + com.qc.soft deploy-ease-api - 1.0-SNAPSHOT + ${version} com.alibaba.cloud @@ -101,6 +106,14 @@ com.alibaba.nacos nacos-client + + org.springframework.boot + spring-boot-starter-webflux + + + org.springframework.cloud + spring-cloud-starter-openfeign + @@ -121,7 +134,7 @@ com.qc.soft deploy-ease-parent - 1.0-SNAPSHOT + ${version} \ No newline at end of file diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/synchronizer/DeployEaseTenantAdapterApplication.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/DeployEaseTenantAdapterApplication.java similarity index 64% rename from deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/synchronizer/DeployEaseTenantAdapterApplication.java rename to deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/DeployEaseTenantAdapterApplication.java index 0ae0ffa..3ecd643 100644 --- a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/synchronizer/DeployEaseTenantAdapterApplication.java +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/DeployEaseTenantAdapterApplication.java @@ -1,15 +1,15 @@ -package com.qc.soft.deploy.ease.synchronizer; +package com.qc.soft.deploy.ease.adapter; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.ComponentScan; @SpringBootConfiguration @EnableAutoConfiguration -@EnableScheduling -@EnableAsync +@ComponentScan("com.qc.soft.deploy.ease.*") +@EnableFeignClients public class DeployEaseTenantAdapterApplication { public static void main(String[] args) { diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/internal/IDictionaryServiceApi.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/internal/IDictionaryServiceApi.java new file mode 100644 index 0000000..c5ded1c --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/internal/IDictionaryServiceApi.java @@ -0,0 +1,14 @@ +package com.qc.soft.deploy.ease.adapter.api.internal; + +import com.qc.soft.deploy.ease.api.response.TenantDictionaryResponse; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +import java.util.List; + +@FeignClient(name = "deploy-ease-core") +public interface IDictionaryServiceApi { + + @GetMapping("/mgmt/dict/tenant") + List tenantDicts(); +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/JenkinsClientApi.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/JenkinsClientApi.java new file mode 100644 index 0000000..f92c5eb --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/JenkinsClientApi.java @@ -0,0 +1,37 @@ +package com.qc.soft.deploy.ease.adapter.api.thirdparty; + +import com.alibaba.fastjson2.JSON; +import com.qc.soft.deploy.ease.adapter.api.thirdparty.response.JenkinsCrumbIssuerResponse; +import com.qc.soft.deploy.ease.adapter.enums.BusinessState; +import com.qc.soft.framework.basic.exception.BasicException; +import com.qc.soft.framework.basic.utils.BasicAuthUtils; +import com.qc.soft.framework.basic.utils.HttpUtils; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import java.util.IdentityHashMap; + +@Component +@Slf4j +public class JenkinsClientApi { + + + public JenkinsCrumbIssuerResponse getJenkinsCrumbIssue(String url, String username, String password) throws BasicException { + IdentityHashMap header = new IdentityHashMap<>(); + header.put("Authorization", BasicAuthUtils.encode(username, password)); + JenkinsCrumbIssuerResponse jenkinsCrumbIssuerResponse = HttpUtils.cookieGet(url, header, JenkinsCrumbIssuerResponse.class); + if (jenkinsCrumbIssuerResponse == null) { + log.error("Get jenkins crumb failed!"); + throw new BasicException(BusinessState.GET_JENKINS_CRUMB_FAILED); + } + if (StringUtils.isEmpty(jenkinsCrumbIssuerResponse.getCrumb()) || StringUtils.isEmpty(jenkinsCrumbIssuerResponse.getCookie())) { + log.error("Get jenkins crumb and cookie failed, response:{}!", JSON.toJSONString(jenkinsCrumbIssuerResponse)); + throw new BasicException(String.format("Get jenkins crumb and cookie failed, response %s!", JSON.toJSONString(jenkinsCrumbIssuerResponse))); + } + return jenkinsCrumbIssuerResponse; + } + + + +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsApiInfoDto.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsApiInfoDto.java new file mode 100644 index 0000000..0c0d226 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsApiInfoDto.java @@ -0,0 +1,17 @@ +package com.qc.soft.deploy.ease.adapter.api.thirdparty.response; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class JenkinsApiInfoDto { + + private String viewName; + + private String projectName; + + private String taskApi; + + private String taskDetailsApi; +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsCrumbIssuerResponse.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsCrumbIssuerResponse.java new file mode 100644 index 0000000..a05a894 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsCrumbIssuerResponse.java @@ -0,0 +1,12 @@ +package com.qc.soft.deploy.ease.adapter.api.thirdparty.response; + +import lombok.Data; + +@Data +public class JenkinsCrumbIssuerResponse { + + private String crumb; + + private String cookie; + +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailChangeSetDetailResponse.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailChangeSetDetailResponse.java new file mode 100644 index 0000000..824e7c0 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailChangeSetDetailResponse.java @@ -0,0 +1,29 @@ +package com.qc.soft.deploy.ease.adapter.api.thirdparty.response; + +import lombok.Data; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +@Data +public class JenkinsLastJobDetailChangeSetDetailResponse { + + private String commitId; + + private Date timestamp; + + private Map author; + + private String authorEmail; + + private String comment; + + private Date date; + + private String id; + + private String msg; + + private List> paths; +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailChangeSetResponse.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailChangeSetResponse.java new file mode 100644 index 0000000..dabc776 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailChangeSetResponse.java @@ -0,0 +1,12 @@ +package com.qc.soft.deploy.ease.adapter.api.thirdparty.response; + +import lombok.Data; + +import java.util.List; + +@Data +public class JenkinsLastJobDetailChangeSetResponse { + + private List items; + +} \ No newline at end of file diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailResponse.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailResponse.java new file mode 100644 index 0000000..1bd2053 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JenkinsLastJobDetailResponse.java @@ -0,0 +1,31 @@ +package com.qc.soft.deploy.ease.adapter.api.thirdparty.response; + +import lombok.Data; + +import java.util.Date; + +@Data +public class JenkinsLastJobDetailResponse { + + private String projectName; + + private int number; + + private boolean inProgress; + + private boolean building; + + private String result; + + private Date timestamp; + + private long duration; + + private int queueId; + + private JenkinsLastJobDetailChangeSetResponse changeSet; + +} + + + diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JobInfoDto.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JobInfoDto.java new file mode 100644 index 0000000..22fcadf --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/api/thirdparty/response/JobInfoDto.java @@ -0,0 +1,13 @@ +package com.qc.soft.deploy.ease.adapter.api.thirdparty.response; + +import lombok.Data; + +@Data +public class JobInfoDto { + + private String name; + + private String color; + + private String url; +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/config/FeignClientConfig.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/config/FeignClientConfig.java new file mode 100644 index 0000000..eb0256a --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/config/FeignClientConfig.java @@ -0,0 +1,17 @@ +package com.qc.soft.deploy.ease.adapter.config; + +import com.qc.soft.framework.basic.context.TenantContext; +import feign.RequestInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FeignClientConfig { + @Bean + public RequestInterceptor tenantHeaderInterceptor() { + return requestTemplate -> { + requestTemplate.header("Content-Type", "application/json;charset=UTF-8"); + requestTemplate.header("x-tenant-code", TenantContext.getCurrentTenant()); + }; + } +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/config/TenantProcessor.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/config/TenantProcessor.java new file mode 100644 index 0000000..f586b3f --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/config/TenantProcessor.java @@ -0,0 +1,47 @@ +package com.qc.soft.deploy.ease.adapter.config; + +import com.qc.soft.framework.basic.context.TenantContext; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.core.env.Environment; + +@Configuration +@Slf4j +@Order(value = 100) +public class TenantProcessor implements BeanDefinitionRegistryPostProcessor, InitializingBean, ApplicationContextAware { + + private ApplicationContext applicationContext; + + @Override + public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException { + } + + + @Override + public void afterPropertiesSet() { + Environment environment = applicationContext.getEnvironment(); + if (ObjectUtils.isEmpty(environment.getProperty("TENANT_CODE"))) { + throw new NullPointerException("Adapter project tenant code not found!!!"); + } + TenantContext.setCurrentTenant(environment.getProperty("TENANT_CODE")); + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + this.applicationContext = applicationContext; + } + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + + } +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/consts/Consts.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/consts/Consts.java new file mode 100644 index 0000000..e26eff4 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/consts/Consts.java @@ -0,0 +1,7 @@ +package com.qc.soft.deploy.ease.adapter.consts; + +public class Consts { + + + +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/consts/JenkinsConstants.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/consts/JenkinsConstants.java new file mode 100644 index 0000000..cf4ca53 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/consts/JenkinsConstants.java @@ -0,0 +1,28 @@ +package com.qc.soft.deploy.ease.adapter.consts; + +public class JenkinsConstants { + + + // viewApi: ${devops.jenkins.basePath}/view/%s/api/json?pretty=true +// projectApi: ${devops.jenkins.basePath}/view/%s/job/%s/api/json?pretty=true +// projectBuildApi: ${devops.jenkins.basePath}/job/%s/%s/api/json?pretty=true +// crumbIssuerApi: ${devops.jenkins.basePath}/crumbIssuer/api/json +// buildWithParamsApi: ${devops.jenkins.basePath}/job/%s/buildWithParameters +// cleanWorkspaceApi: ${devops.jenkins.basePath}/view/%s/job/%s/doWipeOutWorkspace +// buildFailedApi: ${devops.jenkins.basePath}/view/%s/job/%s/%s/consoleText + + public static final String JENKINS_CRUMB_IS_SUER_API = "%s/crumbIssuer/api/json"; + + public static final String JENKINS_VIEW_API = "%s/view/%s/api/json?pretty=true"; + + public static final String JENKINS_PROJECT_VIEW_API = "%s/view/%s/job/%s/api/json?pretty=true"; + + public static final String JENKINS_PROJECT_JOB_DETAIL_API = "%s/job/%s/%s/api/json?pretty=true"; + + public static final String JENKINS_PROJECT_EXEC_BUILD_API = "%s/job/%s/buildWithParameters"; + + public static final String JENKINS_PROJECT_CLEAN_WORKSPACE_API = "%s/view/%s/job/%s/doWipeOutWorkspace"; + + public static final String JENKINS_PROJECT_JOB_FAILED_API = "%s/view/%s/job/%s/%s/consoleText"; + +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/controller/JenkinsSSEController.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/controller/JenkinsSSEController.java new file mode 100644 index 0000000..3cc8949 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/controller/JenkinsSSEController.java @@ -0,0 +1,33 @@ +package com.qc.soft.deploy.ease.adapter.controller; + +import com.qc.soft.deploy.ease.adapter.api.internal.IDictionaryServiceApi; +import com.qc.soft.deploy.ease.adapter.service.IJenkinsService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Flux; + +import javax.annotation.Resource; +import java.time.Duration; + +@RestController +@RequestMapping("sse") +public class JenkinsSSEController { + + @Resource + private IDictionaryServiceApi dictionaryServiceApi; + + @Resource + private IJenkinsService jenkinsService; + +// @GetMapping(value = "/jenkins/views", produces = "text/event-stream;charset=UTF-8") +// public Flux jenkinsViews() { +// return Flux.interval(Duration.ofSeconds(5)).map(index -> jenkinsService); +// } + + + @GetMapping(value = "/jenkins/crumb") + public void getJenkinsCrumbIssue() { + jenkinsService.getJenkinsCrumbIssue(null, null, null); + } +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/enums/AdapterBusinessErrorCodeI.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/enums/AdapterBusinessErrorCodeI.java new file mode 100644 index 0000000..03340e8 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/enums/AdapterBusinessErrorCodeI.java @@ -0,0 +1,6 @@ +package com.qc.soft.deploy.ease.adapter.enums; + +import com.qc.soft.framework.basic.enums.IBasicState; + +public enum AdapterBusinessErrorCodeI implements IBasicState { +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/enums/BusinessState.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/enums/BusinessState.java new file mode 100644 index 0000000..1b735d8 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/enums/BusinessState.java @@ -0,0 +1,10 @@ +package com.qc.soft.deploy.ease.adapter.enums; + +import com.qc.soft.framework.basic.entity.BasicResponseState; +import com.qc.soft.framework.basic.enums.IBasicState; + +public interface BusinessState extends IBasicState { + + + BasicResponseState GET_JENKINS_CRUMB_FAILED = BasicResponseState.builder().code("GET_JENKINS_CRUMB_FAILED").message("获取Jenkins Crumb失败").build(); +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/service/IJenkinsService.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/service/IJenkinsService.java new file mode 100644 index 0000000..f844087 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/service/IJenkinsService.java @@ -0,0 +1,9 @@ +package com.qc.soft.deploy.ease.adapter.service; + +public interface IJenkinsService { + + + public void getJenkinsCrumbIssue(String url, String username, String password); + + +} diff --git a/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/service/impl/JenkinsServiceImpl.java b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/service/impl/JenkinsServiceImpl.java new file mode 100644 index 0000000..e687261 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/java/com/qc/soft/deploy/ease/adapter/service/impl/JenkinsServiceImpl.java @@ -0,0 +1,22 @@ +package com.qc.soft.deploy.ease.adapter.service.impl; + +import com.qc.soft.deploy.ease.adapter.api.thirdparty.JenkinsClientApi; +import com.qc.soft.deploy.ease.adapter.api.thirdparty.response.JenkinsCrumbIssuerResponse; +import com.qc.soft.deploy.ease.adapter.consts.JenkinsConstants; +import com.qc.soft.deploy.ease.adapter.service.IJenkinsService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class JenkinsServiceImpl implements IJenkinsService { + + @Resource + private JenkinsClientApi jenkinsClientApi; + + @Override + public void getJenkinsCrumbIssue(String url, String username, String password) { + JenkinsCrumbIssuerResponse admin = jenkinsClientApi.getJenkinsCrumbIssue(String.format(JenkinsConstants.JENKINS_CRUMB_IS_SUER_API, "http://192.168.2.200:9096"), "admin", "3%(Lb5GN,M'Yk\\,)Dy\"*"); + System.out.println(admin); + } +} diff --git a/deploy-ease-tenant-adapter/src/main/resources/META-INF/spring.factories b/deploy-ease-tenant-adapter/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000..e4f42f5 --- /dev/null +++ b/deploy-ease-tenant-adapter/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.qc.soft.framework.basic.config.GlobalWebConfigurer diff --git a/deploy-ease-tenant-adapter/src/main/resources/bootstrap.yml b/deploy-ease-tenant-adapter/src/main/resources/bootstrap.yml index 3ac7ca3..ace723d 100644 --- a/deploy-ease-tenant-adapter/src/main/resources/bootstrap.yml +++ b/deploy-ease-tenant-adapter/src/main/resources/bootstrap.yml @@ -12,12 +12,12 @@ spring: group: ${DEPLOY_ENV} namespace: ${DEPLOY_ENV} extension-configs[0]: - data-id: common.yml group: common + data-id: common.yml refresh: false extension-configs[1]: - data-id: deploy-ease-synchronizer.yml group: business + data-id: deploy-ease-tenant-adapter.yml refresh: false config: override-none: false diff --git a/deploy-ease-tenant-adapter/target/classes/META-INF/spring.factories b/deploy-ease-tenant-adapter/target/classes/META-INF/spring.factories new file mode 100644 index 0000000..e4f42f5 --- /dev/null +++ b/deploy-ease-tenant-adapter/target/classes/META-INF/spring.factories @@ -0,0 +1,2 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ +com.qc.soft.framework.basic.config.GlobalWebConfigurer diff --git a/deploy-ease-tenant-adapter/target/classes/bootstrap.yml b/deploy-ease-tenant-adapter/target/classes/bootstrap.yml index 3ac7ca3..ace723d 100644 --- a/deploy-ease-tenant-adapter/target/classes/bootstrap.yml +++ b/deploy-ease-tenant-adapter/target/classes/bootstrap.yml @@ -12,12 +12,12 @@ spring: group: ${DEPLOY_ENV} namespace: ${DEPLOY_ENV} extension-configs[0]: - data-id: common.yml group: common + data-id: common.yml refresh: false extension-configs[1]: - data-id: deploy-ease-synchronizer.yml group: business + data-id: deploy-ease-tenant-adapter.yml refresh: false config: override-none: false diff --git a/deploy-ease-tenant-adapter/target/deploy-ease-tenant-adapter-1.0.0.jar.original b/deploy-ease-tenant-adapter/target/deploy-ease-tenant-adapter-1.0.0.jar.original index 81dec15..f872e57 100644 Binary files a/deploy-ease-tenant-adapter/target/deploy-ease-tenant-adapter-1.0.0.jar.original and b/deploy-ease-tenant-adapter/target/deploy-ease-tenant-adapter-1.0.0.jar.original differ diff --git a/deploy-ease-tenant-adapter/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/deploy-ease-tenant-adapter/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 3bede11..8adb602 100644 --- a/deploy-ease-tenant-adapter/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/deploy-ease-tenant-adapter/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1 +1,19 @@ -com\qc\soft\deploy\ease\synchronizer\DeployEaseTenantAdapterApplication.class +com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsCrumbIssuerResponse.class +com\qc\soft\deploy\ease\adapter\enums\AdapterBusinessErrorCodeI.class +com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsLastJobDetailChangeSetResponse.class +com\qc\soft\deploy\ease\adapter\api\thirdparty\JenkinsClientApi.class +com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsApiInfoDto.class +com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsLastJobDetailChangeSetDetailResponse.class +com\qc\soft\deploy\ease\adapter\config\TenantProcessor.class +com\qc\soft\deploy\ease\adapter\consts\JenkinsConstants.class +com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsLastJobDetailResponse.class +com\qc\soft\deploy\ease\adapter\controller\JenkinsSSEController.class +com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsApiInfoDto$JenkinsApiInfoDtoBuilder.class +com\qc\soft\deploy\ease\adapter\config\FeignClientConfig.class +com\qc\soft\deploy\ease\adapter\enums\BusinessState.class +com\qc\soft\deploy\ease\adapter\consts\Consts.class +com\qc\soft\deploy\ease\adapter\api\internal\IDictionaryServiceApi.class +com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JobInfoDto.class +com\qc\soft\deploy\ease\adapter\DeployEaseTenantAdapterApplication.class +com\qc\soft\deploy\ease\adapter\service\IJenkinsService.class +com\qc\soft\deploy\ease\adapter\service\impl\JenkinsServiceImpl.class diff --git a/deploy-ease-tenant-adapter/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/deploy-ease-tenant-adapter/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index ac2bde5..c359edb 100644 --- a/deploy-ease-tenant-adapter/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/deploy-ease-tenant-adapter/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1 +1,18 @@ -D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\synchronizer\DeployEaseTenantAdapterApplication.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\api\internal\IDictionaryServiceApi.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsApiInfoDto.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\api\thirdparty\JenkinsClientApi.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\DeployEaseTenantAdapterApplication.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\consts\JenkinsConstants.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsLastJobDetailResponse.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\controller\JenkinsSSEController.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\enums\BusinessState.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsLastJobDetailChangeSetResponse.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\config\TenantProcessor.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\consts\Consts.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsLastJobDetailChangeSetDetailResponse.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JobInfoDto.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\config\FeignClientConfig.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\enums\AdapterBusinessErrorCodeI.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\api\thirdparty\response\JenkinsCrumbIssuerResponse.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\service\IJenkinsService.java +D:\work\github-workspace\deploy-ease-backend\deploy-ease-tenant-adapter\src\main\java\com\qc\soft\deploy\ease\adapter\service\impl\JenkinsServiceImpl.java diff --git a/pom.xml b/pom.xml index 933eeaf..639c277 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.qc.soft deploy-ease-parent - 1.0-SNAPSHOT + ${version} pom @@ -13,6 +13,7 @@ 8 8 UTF-8 + Hoxton.SR12 2.3.0.RELEASE 2.3.31 2.0.51 @@ -35,6 +36,13 @@ + + org.springframework.cloud + spring-cloud-dependencies + ${spring.cloud.version} + pom + import + org.springframework.boot spring-boot-dependencies @@ -68,19 +76,55 @@ deploy-ease-tenant-adapter ${deploy-ease-tenant-adapter.version} + + com.alibaba + transmittable-thread-local + ${transmittable-thread-local.version} + + + cn.hutool + hutool-all + ${hutool.version} + + + org.apache.httpcomponents.client5 + httpclient5 + ${http5.version} + + + com.alibaba.fastjson2 + fastjson2 + ${fastjson-version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - - - deploy-ease-api - deploy-ease-core - deploy-ease-tenant-adapter - + + + ${release.repository.id} + ${release.repository.name} + ${release.repository.url} + + + ${snapshot.repository.id} + ${snapshot.repository.name} + ${snapshot.repository.url} + + + + org.codehaus.mojo + flatten-maven-plugin + ${flatten-maven-plugin.version} + org.springframework.boot spring-boot-maven-plugin @@ -89,6 +133,36 @@ + + org.codehaus.mojo + flatten-maven-plugin + + true + resolveCiFriendliesOnly + + + + flatten + process-resources + + flatten + + + + flatten-clean + clean + + clean + + + + + + deploy-ease-basic + deploy-ease-api + deploy-ease-core + deploy-ease-tenant-adapter + \ No newline at end of file