From f33d14fc77333b0f9527325b71a23f58ddf101d3 Mon Sep 17 00:00:00 2001 From: Odboy Date: Tue, 22 Jul 2025 23:18:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(devops):=20=E5=AE=9E=E7=8E=B0=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E7=BA=BF=E8=8A=82=E7=82=B9=E6=89=A7=E8=A1=8C=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 PipelineJobBean 类作为流水线任务载体 - 重构 PipelineJobManage 类,支持节点级任务管理 - 新增 PipelineNodeJobManage 类用于管理节点任务 - 实现节点任务的启动、中断和删除功能 - 新增节点日志切面和切面类 --- cutejava-front/src/api/devops/pipeline.js | 25 +++ cutejava-front/src/utils/myUtil.js | 16 +- .../views/components/dev/CutePipelineNode.vue | 116 +++++----- .../componentsDemo/CutePipelineNodeDemo.vue | 191 +++------------- .../constant/pipeline/PipelineConst.java | 3 + .../controller/DevopsPipelineController.java | 46 +++- .../PipelineInstanceNodeDetailTb.java | 7 +- .../dataobject/PipelineInstanceNodeTb.java | 7 +- .../DevOpsQueryLastPipelineDetailArgs.java | 14 ++ .../devops/dal/redis/PipelineInstanceDAO.java | 4 +- .../AbstractPipelineNodeJobService.java | 30 +++ .../pipeline/core/PipelineJobBean.java | 205 ++++++++++++++++++ .../pipeline/core/PipelineJobManage.java | 70 +++--- .../pipeline/core/PipelineNodeJobBean.java | 38 +++- .../core/PipelineNodeJobExecutor.java | 3 +- .../pipeline/core/PipelineNodeJobManage.java | 89 ++++++++ .../pipeline/log/PipelineNodeStepLog.java | 18 ++ .../log/PipelineNodeStepLogAspect.java | 63 ++++++ .../pipeline/model/PipelineNodeDataVo.java | 44 ++++ .../model/PipelineNodeJobExecuteResult.java | 13 +- .../model/PipelineNodeTemplateVo.java | 16 +- .../devops/job/PipelineNodeBuildJava.java | 34 --- .../devops/job/PipelineNodeBuildJavaJob.java | 41 ++++ .../devops/job/PipelineNodeDeployJava.java | 34 --- .../devops/job/PipelineNodeDeployJavaJob.java | 41 ++++ .../odboy/devops/job/PipelineNodeInitJob.java | 38 ++-- .../devops/job/PipelineNodeMergeBranch.java | 34 --- .../job/PipelineNodeMergeBranchJob.java | 41 ++++ .../job/biz/PipelineNodeBuildJavaBiz.java | 35 +++ .../job/biz/PipelineNodeDeployJavaBiz.java | 35 +++ .../devops/job/biz/PipelineNodeInitBiz.java | 35 +++ .../job/biz/PipelineNodeMergeBranchBiz.java | 35 +++ .../PipelineInstanceNodeDetailService.java | 11 + .../service/PipelineInstanceNodeService.java | 11 + .../service/PipelineInstanceService.java | 7 +- ...PipelineInstanceNodeDetailServiceImpl.java | 60 ++++- .../impl/PipelineInstanceNodeServiceImpl.java | 59 +++++ .../impl/PipelineInstanceServiceImpl.java | 124 +++++------ .../dal/mysql/SystemOssStorageMapper.java | 1 + .../system/service/SystemDeptService.java | 12 +- .../system/service/SystemMenuService.java | 12 +- .../dockerenv/minio/docker-compose-minio.yml | 6 +- .../mongodb/docker-compose-mongodb.yml | 34 +-- cutejava/dockerenv/mysql/docker-compose.yml | 8 +- .../dockerenv/redis/docker-compose-redis.yml | 6 +- cutejava/pom.xml | 2 +- 46 files changed, 1261 insertions(+), 513 deletions(-) create mode 100644 cutejava-front/src/api/devops/pipeline.js create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/model/DevOpsQueryLastPipelineDetailArgs.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/AbstractPipelineNodeJobService.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineJobBean.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineNodeJobManage.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/log/PipelineNodeStepLog.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/log/PipelineNodeStepLogAspect.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeDataVo.java delete mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeBuildJava.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeBuildJavaJob.java delete mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeDeployJava.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeDeployJavaJob.java delete mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeMergeBranch.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeMergeBranchJob.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/biz/PipelineNodeBuildJavaBiz.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/biz/PipelineNodeDeployJavaBiz.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/biz/PipelineNodeInitBiz.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/biz/PipelineNodeMergeBranchBiz.java diff --git a/cutejava-front/src/api/devops/pipeline.js b/cutejava-front/src/api/devops/pipeline.js new file mode 100644 index 00000000..980c7d61 --- /dev/null +++ b/cutejava-front/src/api/devops/pipeline.js @@ -0,0 +1,25 @@ +import request from '@/utils/request' + +export function startPipeline() { + return request({ + url: 'api/devops/pipeline/start', + method: 'post' + }) +} + +export function restartPipeline() { + return request({ + url: 'api/devops/pipeline/restart', + method: 'post' + }) +} + +export function queryLastPipelineDetail(instanceId) { + return request({ + url: 'api/devops/pipeline/last', + method: 'post', + data: { + instanceId + } + }) +} diff --git a/cutejava-front/src/utils/myUtil.js b/cutejava-front/src/utils/myUtil.js index 972aa3cf..9f4b1ee0 100644 --- a/cutejava-front/src/utils/myUtil.js +++ b/cutejava-front/src/utils/myUtil.js @@ -75,6 +75,19 @@ const LabelUtil = { } } +const SizeUtil = { + formatBytes: function(value) { + if (typeof value !== 'number' || isNaN(value) || value <= 0) { + return '0 Bytes' + } + const units = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] + const index = Math.floor(Math.log(value) / Math.log(1024)) + const unit = units[Math.min(index, units.length - 1)] + const result = (value / Math.pow(1024, index)).toFixed(2) + return `${result} ${unit}` + } +} + const DateUtil = { formatDate: function(originVal) { if (originVal === undefined) { @@ -119,5 +132,6 @@ export { StringUtil, ObjectUtil, LabelUtil, - DateUtil + DateUtil, + SizeUtil } diff --git a/cutejava-front/src/views/components/dev/CutePipelineNode.vue b/cutejava-front/src/views/components/dev/CutePipelineNode.vue index 55fcc1de..dec42925 100644 --- a/cutejava-front/src/views/components/dev/CutePipelineNode.vue +++ b/cutejava-front/src/views/components/dev/CutePipelineNode.vue @@ -4,13 +4,13 @@ :style="{ borderTopWidth: '5px', borderTopStyle: 'solid', - borderTopColor: statusColorConst[templateData.status].color + borderTopColor: statusColorConst[pipelineData.currentNodeStatus ? pipelineData.currentNodeStatus : statusColorConst.pending.code].color }" >
-
{{ templateData.name }}
+
{{ pipelineData.name }}
-
+
- -
-
- - {{ buttonItem.title }} - -
-
-
+
+ {{ buttonItem.title }} + +
+
+ +
+
+ @@ -128,7 +132,7 @@
- +
这里是明细
@@ -155,28 +159,26 @@ export default { data() { return { statusColorConst: { - pending: { label: '未开始', color: '#C0C4CC' }, - running: { label: '运行中', color: '#67C23A' }, - success: { label: '执行成功', color: '#67C23A' }, - fail: { label: '执行失败', color: '#F56C6C' } + pending: { code: 'pending', label: '未开始', color: '#C0C4CC' }, + running: { code: 'running', label: '运行中', color: '#67C23A' }, + success: { code: 'success', label: '执行成功', color: '#67C23A' }, + fail: { code: 'fail', label: '执行失败', color: '#F56C6C' } }, - executeTimeStr: '' + executeTimeStr: '', + pipelineData: {} } }, watch: { templateData: { handler(newVal, oldVal) { + this.pipelineData = { ...newVal } this.executeTimeStr = this.renderDateTimeStr(newVal) }, deep: true } }, - // computed: { - // formatExecuteTimeStr() { - // return this.renderDateTimeStr(this.templateData) - // } - // }, mounted() { + this.pipelineData = this.templateData this.executeTimeStr = this.renderDateTimeStr(this.templateData) }, methods: { @@ -189,7 +191,20 @@ export default { case 'running': case 'success': case 'fail': - executeTimeStr = this.formatTimeDifference(newVal.startTime, newVal.updateTime) + if (newVal.currentNodeStatus !== this.statusColorConst.pending.code) { + if (newVal.startTime && newVal.finishTime) { + executeTimeStr = this.formatTimeDifference(newVal.startTime, newVal.finishTime) + return executeTimeStr + } + if (newVal.startTime) { + executeTimeStr = this.formatTimeDifference(newVal.startTime, new Date()) + return executeTimeStr + } + if (newVal.createTime) { + executeTimeStr = this.formatTimeDifference(newVal.createTime, new Date()) + return executeTimeStr + } + } break default: executeTimeStr = '' @@ -223,10 +238,11 @@ export default { if (seconds >= 0) { return `${seconds} 秒` } + return `${diffInMilliseconds} 毫秒` }, onCurrentNodeClick() { - const templateData = this.templateData || { click: false } - if (!templateData.click) { + const pipelineData = this.pipelineData || { click: false } + if (!pipelineData.click) { console.warn('当前流水线节点不支持查看明细') return } @@ -234,12 +250,12 @@ export default { this.$refs.detailDrawer.show() }, onNodeRetryClick() { - const templateData = this.templateData || { retry: false } - if (!templateData.retry) { + const pipelineData = this.pipelineData || { retry: false } + if (!pipelineData.retry) { console.warn('当前流水线节点不支持重试') return } - console.error('templateData', this.templateData) + console.error('pipelineData', this.pipelineData) }, onNodeOperationClick(buttonInfo) { console.error('buttonInfo', buttonInfo) @@ -277,7 +293,7 @@ export default { overflow: hidden; text-overflow: ellipsis; text-wrap: nowrap; - font-size: 18px; + font-size: 15px; text-align: center; } diff --git a/cutejava-front/src/views/componentsDemo/CutePipelineNodeDemo.vue b/cutejava-front/src/views/componentsDemo/CutePipelineNodeDemo.vue index fedafb7a..c38f6cc8 100644 --- a/cutejava-front/src/views/componentsDemo/CutePipelineNodeDemo.vue +++ b/cutejava-front/src/views/componentsDemo/CutePipelineNodeDemo.vue @@ -1,19 +1,19 @@