From d59a69c3721737f6735a9cbdaa4c79152da8ae65 Mon Sep 17 00:00:00 2001 From: Odboy Date: Sun, 29 Jun 2025 08:54:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B5=81=E6=B0=B4=E7=BA=BF=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/pipeline/PipelineConst.java | 1 + .../pipeline/PipelineNodeBizCodeConst.java | 5 + .../constant/pipeline/PipelineTypeEnum.java | 34 +++ .../PipelineInstanceNodeDetailTb.java | 47 ++-- .../pipeline/PipelineInstanceTb.java | 4 +- .../pipeline/PipelineInstanceMapper.java | 3 + .../framework/pipeline/PipelineJobBean.java | 70 ------ .../pipeline/core/PipelineJobBean.java | 19 ++ .../{ => core}/PipelineJobManage.java | 11 +- .../{ => core}/PipelineNodeJobExecutor.java | 7 +- .../{ => core}/PipelineNodeJobRunnable.java | 11 +- .../model/PipelineNodeJobExecuteResult.java | 14 ++ .../model/PipelineNodeTemplateButtonVo.java | 21 +- .../model/PipelineNodeTemplateVo.java | 10 +- .../odboy/devops/job/PipelineNodeInitJob.java | 49 +++- .../job/app/PipelineNodeBuildGoJob.java | 48 +++- .../job/app/PipelineNodeBuildJavaJob.java | 48 +++- .../job/app/PipelineNodeBuildPythonJob.java | 48 +++- .../job/app/PipelineNodeDeployApproveJob.java | 48 +++- .../job/app/PipelineNodeDeployGoJob.java | 48 +++- .../job/app/PipelineNodeDeployJavaJob.java | 48 +++- .../job/app/PipelineNodeDeployPythonJob.java | 48 +++- .../job/app/PipelineNodeImageScanJob.java | 48 +++- .../job/app/PipelineNodeMergeBranchJob.java | 49 +++- .../job/app/PipelineNodeMergeConfirmJob.java | 45 ++++ .../job/app/PipelineNodeMergeMasterJob.java | 48 +++- .../PipelineInstanceNodeDetailService.java | 43 ++++ .../pipeline/PipelineInstanceService.java | 95 +++++++- .../pipeline/PipelineInstanceMapper.xml | 12 +- .../odboy/pipeline/PipelineReleaseTests.java | 16 +- doc/cutejava.sql | 228 ++++++++++++------ 31 files changed, 999 insertions(+), 227 deletions(-) create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineTypeEnum.java delete mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineJobBean.java create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineJobBean.java rename cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/{ => core}/PipelineJobManage.java (82%) rename cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/{ => core}/PipelineNodeJobExecutor.java (54%) rename cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/{ => core}/PipelineNodeJobRunnable.java (52%) create mode 100644 cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeConfirmJob.java diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineConst.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineConst.java index 4a5f07c3..0322b06b 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineConst.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineConst.java @@ -20,4 +20,5 @@ public interface PipelineConst { String INSTANCE_NODE_CODE_KEY = "pipelineInstanceNodeCode"; String INSTANCE_NODE_NAME_KEY = "pipelineInstanceNodeName"; String INSTANCE_NODE_TEMPLATE_ARGS_KEY = "pipelineInstanceNodeTemplateArgs"; + String INSTANCE_RETRY_NODE_INDEX_KEY = "pipelineInstanceRetryNodeIndex"; } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineNodeBizCodeConst.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineNodeBizCodeConst.java index 98827a4f..51f9e4d7 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineNodeBizCodeConst.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineNodeBizCodeConst.java @@ -26,6 +26,11 @@ public interface PipelineNodeBizCodeConst { */ String DEPLOY_APPROVE = PipelineConst.EXECUTOR_PREFIX + "node_deploy_approve"; + /** + * 合并确认 + */ + String MERGE_CONFIRM = PipelineConst.EXECUTOR_PREFIX + "node_merge_confirm"; + /** * 合并到Master */ diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineTypeEnum.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineTypeEnum.java new file mode 100644 index 00000000..af152334 --- /dev/null +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/constant/pipeline/PipelineTypeEnum.java @@ -0,0 +1,34 @@ +package cn.odboy.devops.constant.pipeline; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 流水线类型 + */ +@Getter +@AllArgsConstructor +public enum PipelineTypeEnum { + BACKEND("backend", "后端"), + FRONT("front", "前端"), + MOBILE("mobile", "移动端"), + ANDROID("pc", "PC端"), + UN_SUPPORT("un_support", "不支持的类型"); + /** + * 类型编码 + */ + private final String code; + /** + * 描述 + */ + private final String desc; + + public static PipelineTypeEnum getByCode(String code) { + for (PipelineTypeEnum value : PipelineTypeEnum.values()) { + if (value.getCode().equals(code)) { + return value; + } + } + return UN_SUPPORT; + } +} \ No newline at end of file diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/dataobject/pipeline/PipelineInstanceNodeDetailTb.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/dataobject/pipeline/PipelineInstanceNodeDetailTb.java index ca66bba1..0b6cd1d7 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/dataobject/pipeline/PipelineInstanceNodeDetailTb.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/dataobject/pipeline/PipelineInstanceNodeDetailTb.java @@ -1,7 +1,9 @@ package cn.odboy.devops.dal.dataobject.pipeline; import cn.odboy.base.CsObject; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -23,7 +25,13 @@ import java.util.Date; @TableName("pipeline_instance_node_detail") @ApiModel(value = "PipelineInstanceNodeDetail对象", description = "流水线实例节点明细") public class PipelineInstanceNodeDetailTb extends CsObject { + /** + * id + */ + @ApiModelProperty("id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; /** * 流水线实例id */ @@ -38,45 +46,36 @@ public class PipelineInstanceNodeDetailTb extends CsObject { @TableField("start_time") private Date startTime; - /** - * 结束时间 - */ - @ApiModelProperty("结束时间") - @TableField("finish_time") - private Date finishTime; - - /** - * 节点状态 - */ - @TableField("`status`") - @ApiModelProperty("节点状态") - private String status; - /** * 节点索引 */ @ApiModelProperty("节点索引") @TableField("node_index") private Integer nodeIndex; - /** * 节点编码 */ - @TableField("node_code") @ApiModelProperty("节点编码") + @TableField("node_code") private String nodeCode; + /** + * 步骤描述 + */ + @TableField("step_name") + @ApiModelProperty("步骤描述") + private String stepName; /** - * 节点描述 + * 步骤状态 */ - @ApiModelProperty("节点描述") - @TableField("node_description") - private String nodeDescription; + @ApiModelProperty("步骤状态") + @TableField("step_status") + private String stepStatus; /** - * 输入参数 + * 异常明细 */ - @TableField("`context`") - @ApiModelProperty("输入参数") - private String context; + @ApiModelProperty("异常明细") + @TableField("step_msg") + private String stepMsg; } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/dataobject/pipeline/PipelineInstanceTb.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/dataobject/pipeline/PipelineInstanceTb.java index 4aac671f..a2160c89 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/dataobject/pipeline/PipelineInstanceTb.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/dataobject/pipeline/PipelineInstanceTb.java @@ -22,7 +22,7 @@ import java.util.Date; @Setter @TableName("pipeline_instance") @ApiModel(value = "PipelineInstance对象", description = "流水线实例") -public class PipelineInstanceTb extends CsObject{ +public class PipelineInstanceTb extends CsObject { /** * 流水线模板id @@ -43,7 +43,7 @@ public class PipelineInstanceTb extends CsObject{ */ @ApiModelProperty("流水线实例id") @TableField("pipeline_instance_id") - private String pipelineInstanceId; + private Long pipelineInstanceId; /** * 创建时间 diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/mysql/pipeline/PipelineInstanceMapper.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/mysql/pipeline/PipelineInstanceMapper.java index 941803a3..90df7fa8 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/mysql/pipeline/PipelineInstanceMapper.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/dal/mysql/pipeline/PipelineInstanceMapper.java @@ -3,6 +3,7 @@ package cn.odboy.devops.dal.mysql.pipeline; import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** *

@@ -14,5 +15,7 @@ import org.apache.ibatis.annotations.Mapper; */ @Mapper public interface PipelineInstanceMapper extends BaseMapper { + void updateStatusByInstanceId(@Param("status") String status, @Param("pipelineInstanceId") long pipelineInstanceId); + void updateCurrentNodeByInstanceId(@Param("code") String code, @Param("status") String status, @Param("pipelineInstanceId") long pipelineInstanceId); } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineJobBean.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineJobBean.java deleted file mode 100644 index 98febce7..00000000 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineJobBean.java +++ /dev/null @@ -1,70 +0,0 @@ -package cn.odboy.devops.framework.pipeline; - -import cn.odboy.devops.constant.pipeline.PipelineConst; -import cn.odboy.framework.context.SpringBeanHolder; -import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; -import cn.odboy.devops.framework.pipeline.model.PipelineNodeTemplateVo; -import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; -import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; -import cn.odboy.devops.service.pipeline.PipelineInstanceService; -import cn.odboy.util.CsJsonUtil; -import com.alibaba.fastjson2.JSON; -import lombok.extern.slf4j.Slf4j; -import org.quartz.JobDataMap; -import org.quartz.JobExecutionContext; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.scheduling.quartz.QuartzJobBean; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.Future; - -@Slf4j -public class PipelineJobBean extends QuartzJobBean { - private final ThreadPoolTaskExecutor executor = SpringBeanHolder.getBean("pipelineAsync"); - - @Override - public void executeInternal(JobExecutionContext context) { - JobDataMap mergedJobDataMap = context.getMergedJobDataMap(); - // 实例、节点明细 - PipelineInstanceService pipelineInstanceService = SpringBeanHolder.getBean(PipelineInstanceService.class); - PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService = SpringBeanHolder.getBean(PipelineInstanceNodeDetailService.class); - // 获取流水线实例 - String pipelineInstanceId = mergedJobDataMap.getString(PipelineConst.INSTANCE_ID_KEY); - PipelineInstanceTb pipelineInstance = pipelineInstanceService.getPipelineInstance(pipelineInstanceId); - if (pipelineInstance == null) { - log.info("流水线实例不存在, instanceId={}", pipelineInstanceId); - return; - } - String pipelineTemplate = pipelineInstance.getPipelineTemplate(); - // 流水线节点模板 - List pipelineNodeTemplateVos = JSON.parseArray(pipelineTemplate, PipelineNodeTemplateVo.class); - // 流水线上下文参数 - Map contextArgs = CsJsonUtil.toMap(pipelineInstance.getContext(), String.class, Object.class); - // 放置额外的参数 - contextArgs.put(PipelineConst.INSTANCE_KEY, pipelineInstance); - // 执行节点任务 - for (int i = 0; i < pipelineNodeTemplateVos.size(); i++) { - PipelineNodeTemplateVo pipelineNodeTemplateVo = pipelineNodeTemplateVos.get(i); - String code = pipelineNodeTemplateVo.getCode(); - contextArgs.put(PipelineConst.INSTANCE_NODE_INDEX_KEY, i); - contextArgs.put(PipelineConst.INSTANCE_NODE_CODE_KEY, code); - contextArgs.put(PipelineConst.INSTANCE_NODE_NAME_KEY, pipelineNodeTemplateVo.getName()); - contextArgs.put(PipelineConst.INSTANCE_NODE_TEMPLATE_ARGS_KEY, pipelineNodeTemplateVo.getParameters()); - try { - List allServiceBeanName = SpringBeanHolder.getAllServiceBeanName(); - System.err.println(allServiceBeanName); - PipelineNodeJobRunnable pipelineNodeJobRunnable = new PipelineNodeJobRunnable( - PipelineConst.EXECUTOR_PREFIX + code, - contextArgs, - pipelineInstanceNodeDetailService - ); - Future future = executor.submit(pipelineNodeJobRunnable); - PipelineNodeJobExecuteResult executeResult = (PipelineNodeJobExecuteResult) future.get(); - System.err.println(executeResult); - } catch (Exception e) { - log.error("流水线节点任务执行失败", e); - } - } - } -} diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineJobBean.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineJobBean.java new file mode 100644 index 00000000..091ed9ae --- /dev/null +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineJobBean.java @@ -0,0 +1,19 @@ +package cn.odboy.devops.framework.pipeline.core; + +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.framework.context.SpringBeanHolder; +import lombok.extern.slf4j.Slf4j; +import org.quartz.JobExecutionContext; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.scheduling.quartz.QuartzJobBean; + +@Slf4j +public class PipelineJobBean extends QuartzJobBean { + private final ThreadPoolTaskExecutor executor = SpringBeanHolder.getBean("pipelineAsync"); + private final PipelineInstanceService pipelineInstanceService = SpringBeanHolder.getBean(PipelineInstanceService.class); + + @Override + public void executeInternal(JobExecutionContext context) { + pipelineInstanceService.startPipeline(executor, context); + } +} diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineJobManage.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineJobManage.java similarity index 82% rename from cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineJobManage.java rename to cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineJobManage.java index 34e0b9cd..0e7cffc6 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineJobManage.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineJobManage.java @@ -1,8 +1,8 @@ -package cn.odboy.devops.framework.pipeline; +package cn.odboy.devops.framework.pipeline.core; import cn.odboy.devops.constant.pipeline.PipelineConst; -import cn.odboy.framework.exception.BadRequestException; import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.framework.exception.BadRequestException; import lombok.extern.slf4j.Slf4j; import org.quartz.*; import org.springframework.stereotype.Component; @@ -12,6 +12,7 @@ import javax.annotation.Resource; @Slf4j @Component public class PipelineJobManage { + private static final String JOB_KEY = "PIPELINE_JOB_"; @Resource private Scheduler scheduler; @@ -23,11 +24,11 @@ public class PipelineJobManage { // 构建 JobDetail JobDetail jobDetail = JobBuilder .newJob(PipelineJobBean.class) - .withIdentity(pipelineInstance.getPipelineInstanceId()) + .withIdentity(JOB_KEY + pipelineInstance.getPipelineInstanceId()) .build(); // 构建Trigger Trigger cronTrigger = TriggerBuilder.newTrigger() - .withIdentity(pipelineInstance.getPipelineInstanceId()) + .withIdentity(JOB_KEY + pipelineInstance.getPipelineInstanceId()) .startNow() .build(); // 添加流水线实例 @@ -48,7 +49,7 @@ public class PipelineJobManage { */ public void deleteJob(PipelineInstanceTb pipelineInstance) { try { - JobKey jobKey = JobKey.jobKey(pipelineInstance.getPipelineInstanceId()); + JobKey jobKey = JobKey.jobKey(JOB_KEY + pipelineInstance.getPipelineInstanceId()); scheduler.pauseJob(jobKey); scheduler.deleteJob(jobKey); } catch (Exception e) { diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineNodeJobExecutor.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineNodeJobExecutor.java similarity index 54% rename from cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineNodeJobExecutor.java rename to cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineNodeJobExecutor.java index f1a37274..ea965a7f 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineNodeJobExecutor.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineNodeJobExecutor.java @@ -1,11 +1,10 @@ -package cn.odboy.devops.framework.pipeline; +package cn.odboy.devops.framework.pipeline.core; -import cn.odboy.framework.exception.BadRequestException; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; -import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.framework.exception.BadRequestException; import java.util.Map; public interface PipelineNodeJobExecutor { - PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException; + PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException; } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineNodeJobRunnable.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineNodeJobRunnable.java similarity index 52% rename from cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineNodeJobRunnable.java rename to cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineNodeJobRunnable.java index 7247ac83..df02138e 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/PipelineNodeJobRunnable.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/core/PipelineNodeJobRunnable.java @@ -1,7 +1,6 @@ -package cn.odboy.devops.framework.pipeline; +package cn.odboy.devops.framework.pipeline.core; import cn.odboy.framework.context.SpringBeanHolder; -import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; import java.util.HashMap; import java.util.Map; @@ -10,20 +9,18 @@ import java.util.concurrent.Callable; public class PipelineNodeJobRunnable implements Callable { private final PipelineNodeJobExecutor target; private final Map params; - private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; - public PipelineNodeJobRunnable(String beanName, Map params, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) { + public PipelineNodeJobRunnable(String beanName, Map params) { this.target = SpringBeanHolder.getBean(beanName); this.params = params; - this.pipelineInstanceNodeDetailService = pipelineInstanceNodeDetailService; } @Override @SuppressWarnings({"unchecked", "all"}) public Object call() throws Exception { if (this.params == null) { - return this.target.execute(new HashMap<>(1), this.pipelineInstanceNodeDetailService); + return this.target.execute(new HashMap<>(1)); } - return this.target.execute(this.params, this.pipelineInstanceNodeDetailService); + return this.target.execute(this.params); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeJobExecuteResult.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeJobExecuteResult.java index 13cd832a..f7d7e61f 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeJobExecuteResult.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeJobExecuteResult.java @@ -18,10 +18,24 @@ public class PipelineNodeJobExecuteResult extends CsObject { return result; } + public static PipelineNodeJobExecuteResult success(String message) { + PipelineNodeJobExecuteResult result = new PipelineNodeJobExecuteResult(); + result.setStatus(PipelineStatusEnum.SUCCESS); + result.setMessage(message); + return result; + } + public static PipelineNodeJobExecuteResult fail() { PipelineNodeJobExecuteResult result = new PipelineNodeJobExecuteResult(); result.setStatus(PipelineStatusEnum.FAIL); result.setMessage(PipelineStatusEnum.FAIL.getDesc()); return result; } + + public static PipelineNodeJobExecuteResult fail(String message) { + PipelineNodeJobExecuteResult result = new PipelineNodeJobExecuteResult(); + result.setStatus(PipelineStatusEnum.FAIL); + result.setMessage(message); + return result; + } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeTemplateButtonVo.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeTemplateButtonVo.java index 16ec7f34..c5019e15 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeTemplateButtonVo.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeTemplateButtonVo.java @@ -4,6 +4,9 @@ import cn.odboy.base.CsObject; import lombok.Getter; import lombok.Setter; +import java.util.HashMap; +import java.util.Map; + /** * 流水线节点控制按钮 * @@ -21,19 +24,11 @@ public class PipelineNodeTemplateButtonVo extends CsObject { */ private String title; /** - * 出现的条件,根据node节点的状态判断 - */ - private String condition; - /** - * link: 按钮跳转的url - */ - private String linkUrl; - /** - * link: 是否新窗口打开 - */ - private boolean isBlank = true; - /** - * service: 服务编码 + * 按钮传递的参数 */ private String code; + /** + * 按钮样式参数 + */ + private Map parameters = new HashMap<>(); } \ No newline at end of file diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeTemplateVo.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeTemplateVo.java index 21384d89..be9fe79b 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeTemplateVo.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/framework/pipeline/model/PipelineNodeTemplateVo.java @@ -21,6 +21,10 @@ public class PipelineNodeTemplateVo extends CsObject { * 业务编码 */ private String code; + /** + * 业务类型(service:系统内置服务 rpc:远程调用) + */ + private String type; /** * 业务名称 */ @@ -28,15 +32,15 @@ public class PipelineNodeTemplateVo extends CsObject { /** * 是否可点击 */ - private Boolean click; + private Boolean click = false; /** * 是否可重试 */ - private Boolean retry; + private Boolean retry = false; /** * 是否可点击:点击展示详情,详情内容类型 */ - private String detailType; + private String detailType = ""; /** * 默认参数 */ diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeInitJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeInitJob.java index d6213c0c..63916f82 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeInitJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/PipelineNodeInitJob.java @@ -1,19 +1,64 @@ package cn.odboy.devops.job; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.INIT) public class PipelineNodeInitJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); + pipelineInstanceNodeDetailService.addLog(pipelineInstanceId, contextArgs, "release分支名称: xxxxxx", PipelineStatusEnum.SUCCESS, ""); + pipelineInstanceNodeDetailService.addLog(pipelineInstanceId, contextArgs, "master分支合并到release分支成功: xxxxxx", PipelineStatusEnum.SUCCESS, ""); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildGoJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildGoJob.java index cdb972f4..89a38a34 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildGoJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildGoJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.AppGo.BUILD) public class PipelineNodeBuildGoJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildJavaJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildJavaJob.java index fd1daab0..0725ec90 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildJavaJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildJavaJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.AppJava.BUILD) public class PipelineNodeBuildJavaJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildPythonJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildPythonJob.java index 0c023e84..5372d240 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildPythonJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeBuildPythonJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.AppPython.BUILD) public class PipelineNodeBuildPythonJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployApproveJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployApproveJob.java index 9e75d632..34319057 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployApproveJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployApproveJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.DEPLOY_APPROVE) public class PipelineNodeDeployApproveJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployGoJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployGoJob.java index d0fe85dd..4efda29d 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployGoJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployGoJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.AppGo.DEPLOY) public class PipelineNodeDeployGoJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployJavaJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployJavaJob.java index 02761608..32294ae6 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployJavaJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployJavaJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.AppJava.DEPLOY) public class PipelineNodeDeployJavaJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployPythonJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployPythonJob.java index 58d38a34..ab15e85a 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployPythonJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeDeployPythonJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.AppPython.DEPLOY) public class PipelineNodeDeployPythonJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeImageScanJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeImageScanJob.java index f0b25b15..e794b47c 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeImageScanJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeImageScanJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.IMAGE_SCAN) public class PipelineNodeImageScanJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeBranchJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeBranchJob.java index 83cc9085..37dee93b 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeBranchJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeBranchJob.java @@ -1,18 +1,63 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.MERGE_BRANCH) public class PipelineNodeMergeBranchJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); + pipelineInstanceNodeDetailService.addLog(pipelineInstanceId, contextArgs, "集成区分支 xxxxxx 合并到release分支成功", PipelineStatusEnum.SUCCESS, ""); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeConfirmJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeConfirmJob.java new file mode 100644 index 00000000..4dda72c0 --- /dev/null +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeConfirmJob.java @@ -0,0 +1,45 @@ +package cn.odboy.devops.job.app; + +import cn.odboy.devops.constant.pipeline.PipelineConst; +import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; +import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; +import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; +import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Map; + +@RequiredArgsConstructor +@Service(value = PipelineNodeBizCodeConst.MERGE_CONFIRM) +public class PipelineNodeMergeConfirmJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + + @Override + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult = new PipelineNodeJobExecuteResult(); + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } +} diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeMasterJob.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeMasterJob.java index 7e6f2302..a3a4b2bb 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeMasterJob.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/job/app/PipelineNodeMergeMasterJob.java @@ -1,18 +1,62 @@ package cn.odboy.devops.job.app; +import cn.odboy.devops.constant.pipeline.PipelineConst; import cn.odboy.devops.constant.pipeline.PipelineNodeBizCodeConst; -import cn.odboy.devops.framework.pipeline.PipelineNodeJobExecutor; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.constant.pipeline.PipelineTypeEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobExecutor; import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; import cn.odboy.devops.service.pipeline.PipelineInstanceNodeDetailService; +import cn.odboy.devops.service.pipeline.PipelineInstanceService; +import cn.odboy.devops.service.pipeline.PipelineTemplateService; import cn.odboy.framework.exception.BadRequestException; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.Map; +@RequiredArgsConstructor @Service(value = PipelineNodeBizCodeConst.MERGE_MASTER) public class PipelineNodeMergeMasterJob implements PipelineNodeJobExecutor { + private final PipelineTemplateService pipelineTemplateService; + private final PipelineInstanceService pipelineInstanceService; + private final PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService; + @Override - public PipelineNodeJobExecuteResult execute(Map contextArgs, PipelineInstanceNodeDetailService pipelineInstanceNodeDetailService) throws BadRequestException { + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult execute(Map contextArgs) throws BadRequestException { + String nodeName = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_NAME_KEY, ""); + PipelineInstanceTb pipelineInstance = (PipelineInstanceTb) contextArgs.get(PipelineConst.INSTANCE_KEY); + PipelineNodeJobExecuteResult executeResult; + try { + PipelineTemplateTb pipelineTemplate = pipelineTemplateService.getPipelineTemplateById(pipelineInstance.getPipelineTemplateId()); + PipelineTypeEnum pipelineType = PipelineTypeEnum.getByCode(pipelineInstance.getType()); + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s开始", nodeName), PipelineStatusEnum.SUCCESS, ""); + switch (pipelineType) { + case BACKEND: + executeResult = handleBackend(pipelineTemplate, pipelineInstance, contextArgs); + break; + default: + executeResult = PipelineNodeJobExecuteResult.success(); + break; + } + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s成功", nodeName), PipelineStatusEnum.SUCCESS, ""); + return executeResult; + } catch (Exception e) { + pipelineInstanceNodeDetailService.addLog(pipelineInstance.getPipelineInstanceId(), contextArgs, String.format("%s失败", nodeName), PipelineStatusEnum.FAIL, e.getMessage()); + throw e; + } + } + + @Transactional(rollbackFor = Exception.class) + public PipelineNodeJobExecuteResult handleBackend(PipelineTemplateTb pipelineTemplate, PipelineInstanceTb pipelineInstance, Map contextArgs) { + Long pipelineInstanceId = pipelineInstance.getPipelineInstanceId(); + String language = pipelineTemplate.getLanguage(); + String env = pipelineInstance.getEnv(); + String appName = pipelineInstance.getAppName(); return PipelineNodeJobExecuteResult.success(); } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/service/pipeline/PipelineInstanceNodeDetailService.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/service/pipeline/PipelineInstanceNodeDetailService.java index 22ac41b8..43c19775 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/service/pipeline/PipelineInstanceNodeDetailService.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/service/pipeline/PipelineInstanceNodeDetailService.java @@ -1,6 +1,17 @@ package cn.odboy.devops.service.pipeline; +import cn.odboy.devops.constant.pipeline.PipelineConst; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; +import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceNodeDetailTb; +import cn.odboy.devops.dal.mysql.pipeline.PipelineInstanceNodeDetailMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.Map; /** *

@@ -11,6 +22,38 @@ import org.springframework.stereotype.Service; * @since 2025-06-26 */ @Service +@RequiredArgsConstructor public class PipelineInstanceNodeDetailService { + private final PipelineInstanceNodeDetailMapper pipelineInstanceNodeDetailMapper; + + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) + public void addLog(Long pipelineInstanceId, Map contextArgs, String stepName, PipelineStatusEnum status, String stepMsg) { + Integer nodeIndex = (Integer) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_INDEX_KEY, null); + String nodeCode = (String) contextArgs.getOrDefault(PipelineConst.INSTANCE_NODE_CODE_KEY, null); + PipelineInstanceNodeDetailTb record = getPipelineInstanceNodeDetailByArgs(pipelineInstanceId, nodeCode, stepName); + if (record == null) { + record = new PipelineInstanceNodeDetailTb(); + record.setPipelineInstanceId(pipelineInstanceId); + record.setStartTime(new Date()); + record.setNodeIndex(nodeIndex); + record.setNodeCode(nodeCode); + record.setStepName(stepName); + record.setStepStatus(status.getCode()); + pipelineInstanceNodeDetailMapper.insert(record); + } else { + PipelineInstanceNodeDetailTb updRecord = new PipelineInstanceNodeDetailTb(); + updRecord.setId(record.getId()); + updRecord.setStepStatus(status.getCode()); + pipelineInstanceNodeDetailMapper.updateById(updRecord); + } + } + + private PipelineInstanceNodeDetailTb getPipelineInstanceNodeDetailByArgs(Long pipelineInstanceId, String nodeCode, String stepName) { + return pipelineInstanceNodeDetailMapper.selectOne(new LambdaQueryWrapper() + .eq(PipelineInstanceNodeDetailTb::getPipelineInstanceId, pipelineInstanceId) + .eq(PipelineInstanceNodeDetailTb::getNodeCode, nodeCode) + .eq(PipelineInstanceNodeDetailTb::getStepName, stepName) + ); + } } diff --git a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/service/pipeline/PipelineInstanceService.java b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/service/pipeline/PipelineInstanceService.java index 5c058969..1f411c23 100644 --- a/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/service/pipeline/PipelineInstanceService.java +++ b/cutejava/cutejava-module-devops/src/main/java/cn/odboy/devops/service/pipeline/PipelineInstanceService.java @@ -1,10 +1,29 @@ package cn.odboy.devops.service.pipeline; +import cn.odboy.devops.constant.pipeline.PipelineConst; +import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; import cn.odboy.devops.dal.mysql.pipeline.PipelineInstanceMapper; +import cn.odboy.devops.framework.pipeline.core.PipelineNodeJobRunnable; +import cn.odboy.devops.framework.pipeline.model.PipelineNodeJobExecuteResult; +import cn.odboy.devops.framework.pipeline.model.PipelineNodeTemplateVo; +import cn.odboy.framework.exception.BadRequestException; +import cn.odboy.util.CsJsonUtil; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.springframework.context.annotation.Lazy; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.Future; /** *

@@ -14,17 +33,89 @@ import org.springframework.stereotype.Service; * @author codegen * @since 2025-06-26 */ +@Slf4j @Service -@RequiredArgsConstructor +@RequiredArgsConstructor(onConstructor_ = @Lazy) public class PipelineInstanceService { private final PipelineInstanceMapper pipelineInstanceMapper; - public PipelineInstanceTb getPipelineInstance(String pipelineInstanceId) { + + public PipelineInstanceTb getPipelineInstance(long pipelineInstanceId) { return pipelineInstanceMapper.selectOne(new LambdaQueryWrapper() .eq(PipelineInstanceTb::getPipelineInstanceId, pipelineInstanceId) ); } + @Transactional(rollbackFor = Exception.class) public void createPipelineInstance(PipelineInstanceTb pipelineInstanceTb) { pipelineInstanceMapper.insert(pipelineInstanceTb); } + + /** + * 新事务中执行,就算抛出异常,也不会丢失执行状态 + */ + @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) + public void updateStatusByInstanceId(PipelineStatusEnum status, long pipelineInstanceId) { + pipelineInstanceMapper.updateStatusByInstanceId(status.getCode(), pipelineInstanceId); + } + + @Transactional(rollbackFor = Exception.class) + public void startPipeline(ThreadPoolTaskExecutor executor, JobExecutionContext context) { + JobDataMap mergedJobDataMap = context.getMergedJobDataMap(); + // 获取流水线实例 + long pipelineInstanceId = mergedJobDataMap.getLong(PipelineConst.INSTANCE_ID_KEY); + PipelineInstanceTb pipelineInstance = getPipelineInstance(pipelineInstanceId); + if (pipelineInstance == null) { + log.info("流水线实例不存在, instanceId={}", pipelineInstanceId); + return; + } + String pipelineTemplate = pipelineInstance.getPipelineTemplate(); + // 流水线节点模板 + List pipelineNodeTemplateVos = JSON.parseArray(pipelineTemplate, PipelineNodeTemplateVo.class); + // 流水线上下文参数 + Map contextArgs = CsJsonUtil.toMap(pipelineInstance.getContext(), String.class, Object.class); + // 放置额外的参数 + contextArgs.put(PipelineConst.INSTANCE_KEY, pipelineInstance); + // 任务重试标记 + Object retryNodeIndexObj = mergedJobDataMap.getOrDefault(PipelineConst.INSTANCE_RETRY_NODE_INDEX_KEY, null); + Integer retryNodeIndexValue = null; + if (retryNodeIndexObj != null) { + retryNodeIndexValue = (Integer) retryNodeIndexObj; + } + // 初始化节点明细 + boolean isExecuteSuccess = true; + updateStatusByInstanceId(PipelineStatusEnum.RUNNING, pipelineInstanceId); + for (int i = 0; i < pipelineNodeTemplateVos.size(); i++) { + if (retryNodeIndexValue != null && i < retryNodeIndexValue) { + // 跳过非重试节点 + continue; + } + try { + PipelineNodeTemplateVo pipelineNodeTemplateVo = pipelineNodeTemplateVos.get(i); + String code = pipelineNodeTemplateVo.getCode(); + contextArgs.put(PipelineConst.INSTANCE_NODE_INDEX_KEY, i); + contextArgs.put(PipelineConst.INSTANCE_NODE_CODE_KEY, code); + contextArgs.put(PipelineConst.INSTANCE_NODE_NAME_KEY, pipelineNodeTemplateVo.getName()); + contextArgs.put(PipelineConst.INSTANCE_NODE_TEMPLATE_ARGS_KEY, pipelineNodeTemplateVo.getParameters()); + // 执行任务 + PipelineNodeJobRunnable pipelineNodeJobRunnable = new PipelineNodeJobRunnable(PipelineConst.EXECUTOR_PREFIX + code, contextArgs); + Future future = executor.submit(pipelineNodeJobRunnable); + PipelineNodeJobExecuteResult executeResult = (PipelineNodeJobExecuteResult) future.get(); + updateCurrentNodeByInstanceId(code, executeResult.getStatus(), pipelineInstanceId); + if (!PipelineStatusEnum.SUCCESS.equals(executeResult.getStatus())) { + throw new BadRequestException(executeResult.getMessage()); + } + } catch (Exception e) { + log.error("流水线节点任务执行失败", e); + isExecuteSuccess = false; + break; + } + } + // 任务执行结果 + updateStatusByInstanceId(isExecuteSuccess ? PipelineStatusEnum.SUCCESS : PipelineStatusEnum.FAIL, pipelineInstanceId); + } + + @Transactional(rollbackFor = Exception.class) + public void updateCurrentNodeByInstanceId(String code, PipelineStatusEnum status, long pipelineInstanceId) { + pipelineInstanceMapper.updateCurrentNodeByInstanceId(code, status.getCode(), pipelineInstanceId); + } } diff --git a/cutejava/cutejava-module-devops/src/main/resources/mapper/pipeline/PipelineInstanceMapper.xml b/cutejava/cutejava-module-devops/src/main/resources/mapper/pipeline/PipelineInstanceMapper.xml index 2af07cae..7b10e050 100644 --- a/cutejava/cutejava-module-devops/src/main/resources/mapper/pipeline/PipelineInstanceMapper.xml +++ b/cutejava/cutejava-module-devops/src/main/resources/mapper/pipeline/PipelineInstanceMapper.xml @@ -1,5 +1,15 @@ - + + UPDATE pipeline_instance + SET `status` = #{status} + WHERE pipeline_instance_id = #{pipelineInstanceId} + + + UPDATE pipeline_instance + SET `current_node` = #{code}, + current_node_status=#{status} + WHERE pipeline_instance_id = #{pipelineInstanceId} + diff --git a/cutejava/cutejava-starter/src/test/java/cn/odboy/pipeline/PipelineReleaseTests.java b/cutejava/cutejava-starter/src/test/java/cn/odboy/pipeline/PipelineReleaseTests.java index 29e9a67a..151f5276 100644 --- a/cutejava/cutejava-starter/src/test/java/cn/odboy/pipeline/PipelineReleaseTests.java +++ b/cutejava/cutejava-starter/src/test/java/cn/odboy/pipeline/PipelineReleaseTests.java @@ -5,7 +5,7 @@ import cn.hutool.core.util.IdUtil; import cn.odboy.devops.constant.pipeline.PipelineStatusEnum; import cn.odboy.devops.dal.dataobject.pipeline.PipelineInstanceTb; import cn.odboy.devops.dal.dataobject.pipeline.PipelineTemplateTb; -import cn.odboy.devops.framework.pipeline.PipelineJobManage; +import cn.odboy.devops.framework.pipeline.core.PipelineJobManage; import cn.odboy.devops.service.pipeline.PipelineInstanceService; import cn.odboy.devops.service.pipeline.PipelineTemplateService; import com.alibaba.fastjson2.JSON; @@ -44,15 +44,13 @@ public class PipelineReleaseTests { String envCode = "daily"; Map context = new HashMap<>(); context.put("createBy", createBy); - context.put("appName", appName); - context.put("envCode", envCode); // 获取模板 - PipelineTemplateTb pipelineTemplateTb = pipelineTemplateService.getPipelineTemplateById(1L); + PipelineTemplateTb pipelineTemplateTb = pipelineTemplateService.getPipelineTemplateById(4L); // 创建流水线实例 PipelineInstanceTb pipelineInstanceTb = new PipelineInstanceTb(); pipelineInstanceTb.setPipelineTemplateId(pipelineTemplateTb.getId()); pipelineInstanceTb.setPipelineInstanceName("流水线测试"); - pipelineInstanceTb.setPipelineInstanceId(IdUtil.nanoId()); + pipelineInstanceTb.setPipelineInstanceId(IdUtil.getSnowflakeNextId()); pipelineInstanceTb.setCreateTime(nowTime); pipelineInstanceTb.setCreateBy(createBy); pipelineInstanceTb.setUpdateTime(nowTime); @@ -68,5 +66,13 @@ public class PipelineReleaseTests { pipelineJobManage.startJob(pipelineInstanceTb); ThreadUtil.safeSleep(1000 * 60 * 60 * 24); } + + public static void main(String[] args) { + System.err.println("nanoId=" + IdUtil.nanoId()); + System.err.println("objectId=" + IdUtil.objectId()); + System.err.println("snowflakeNextId=" + IdUtil.getSnowflakeNextIdStr()); + System.err.println("fastUUID=" + IdUtil.fastUUID()); + System.err.println("fastSimpleUUID=" + IdUtil.fastSimpleUUID()); + } } diff --git a/doc/cutejava.sql b/doc/cutejava.sql index 385e2448..88223548 100644 --- a/doc/cutejava.sql +++ b/doc/cutejava.sql @@ -11,51 +11,12 @@ Target Server Version : 80025 (8.0.25) File Encoding : 65001 - Date: 27/06/2025 00:47:59 + Date: 27/06/2025 18:08:43 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; --- ---------------------------- --- Table structure for demo_logic_table --- ---------------------------- -DROP TABLE IF EXISTS `demo_logic_table`; -CREATE TABLE `demo_logic_table` ( - `id` bigint NOT NULL COMMENT 'id', - `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', - `create_time` datetime NOT NULL COMMENT '创建时间', - `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '修改人', - `update_time` datetime NOT NULL COMMENT '修改时间', - `available` tinyint(1) NOT NULL DEFAULT '1' COMMENT '数据有效性', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; - --- ---------------------------- --- Records of demo_logic_table --- ---------------------------- -BEGIN; -COMMIT; - --- ---------------------------- --- Table structure for demo_table --- ---------------------------- -DROP TABLE IF EXISTS `demo_table`; -CREATE TABLE `demo_table` ( - `id` bigint NOT NULL COMMENT 'id', - `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', - `create_time` datetime NOT NULL COMMENT '创建时间', - `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '修改人', - `update_time` datetime NOT NULL COMMENT '修改时间', - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; - --- ---------------------------- --- Records of demo_table --- ---------------------------- -BEGIN; -COMMIT; - -- ---------------------------- -- Table structure for demo_time_table -- ---------------------------- @@ -73,6 +34,102 @@ CREATE TABLE `demo_time_table` ( BEGIN; COMMIT; +-- ---------------------------- +-- Table structure for demo_user_time_logic_table +-- ---------------------------- +DROP TABLE IF EXISTS `demo_user_time_logic_table`; +CREATE TABLE `demo_user_time_logic_table` ( + `id` bigint NOT NULL COMMENT 'id', + `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '修改人', + `update_time` datetime NOT NULL COMMENT '修改时间', + `available` tinyint(1) NOT NULL DEFAULT '1' COMMENT '数据有效性', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of demo_user_time_logic_table +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for demo_user_time_table +-- ---------------------------- +DROP TABLE IF EXISTS `demo_user_time_table`; +CREATE TABLE `demo_user_time_table` ( + `id` bigint NOT NULL COMMENT 'id', + `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '修改人', + `update_time` datetime NOT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; + +-- ---------------------------- +-- Records of demo_user_time_table +-- ---------------------------- +BEGIN; +COMMIT; + +-- ---------------------------- +-- Table structure for devops_ci_git_repo +-- ---------------------------- +DROP TABLE IF EXISTS `devops_ci_git_repo`; +CREATE TABLE `devops_ci_git_repo` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', + `create_time` datetime NOT NULL COMMENT '创建时间', + `update_time` datetime NOT NULL COMMENT '更新时间', + `app_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '应用名称', + `ssh_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'ssh地址', + `http_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'http地址', + `namespace` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '命名空间(组、用户)', + `project_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '项目名称', + `project_id` varchar(255) NOT NULL COMMENT '项目id', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `uk_app` (`app_name`) USING BTREE, + KEY `uk_git` (`ssh_url`,`namespace`,`project_name`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=825 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='devops git仓库'; + +-- ---------------------------- +-- Records of devops_ci_git_repo +-- ---------------------------- +BEGIN; +INSERT INTO `devops_ci_git_repo` (`id`, `create_time`, `update_time`, `app_name`, `ssh_url`, `http_url`, `namespace`, `project_name`, `project_id`) VALUES (1, '2021-03-12 00:00:00', '2021-03-12 00:00:00', 'cutejava', 'git@local.gitlab.cn.cn:root/cutejava.git', 'http://local.gitlab.cn/root/cutejava.git', 'root', 'cutejava', '1'); +COMMIT; + +-- ---------------------------- +-- Table structure for devops_kubernetes_cluster_config +-- ---------------------------- +DROP TABLE IF EXISTS `devops_kubernetes_cluster_config`; +CREATE TABLE `devops_kubernetes_cluster_config` ( + `id` int NOT NULL AUTO_INCREMENT COMMENT '主键', + `cluster_code` varchar(150) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '集群code', + `env` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '环境daily、stage、online', + `enabled` int DEFAULT '1' COMMENT '启用状态 1 启用 0 未启用', + `cluster_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '集群类型(cpaas\\edge\\自建)', + `cluster_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '集群名称', + `cluster_server_api` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '集群服务地址', + `cluster_config` blob COMMENT '集群服务SecretsConfig', + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '备注', + `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建人', + `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '修改人', + `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `available` tinyint(1) NOT NULL DEFAULT '1' COMMENT '数据有效性', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='devops kubernetes集群配置'; + +-- ---------------------------- +-- Records of devops_kubernetes_cluster_config +-- ---------------------------- +BEGIN; +INSERT INTO `devops_kubernetes_cluster_config` (`id`, `cluster_code`, `env`, `enabled`, `cluster_type`, `cluster_name`, `cluster_server_api`, `cluster_config`, `remark`, `create_by`, `update_by`, `create_time`, `update_time`, `available`) VALUES (1, 'daily', 'daily', 1, 'alicloud', '阿里云日常环境集群', 'https://192.168.1.105:6443', '', NULL, 'admin', 'admin', '2021-03-12 00:00:00', '2021-03-12 00:00:00', 1); +INSERT INTO `devops_kubernetes_cluster_config` (`id`, `cluster_code`, `env`, `enabled`, `cluster_type`, `cluster_name`, `cluster_server_api`, `cluster_config`, `remark`, `create_by`, `update_by`, `create_time`, `update_time`, `available`) VALUES (2, 'stage', 'stage', 1, 'alicloud', '阿里云预发环境集群', 'https://192.168.1.105:6443', '', NULL, 'admin', 'admin', '2021-03-12 00:00:00', '2021-03-12 00:00:00', 1); +INSERT INTO `devops_kubernetes_cluster_config` (`id`, `cluster_code`, `env`, `enabled`, `cluster_type`, `cluster_name`, `cluster_server_api`, `cluster_config`, `remark`, `create_by`, `update_by`, `create_time`, `update_time`, `available`) VALUES (3, 'online', 'online', 1, 'alicloud', '阿里云生产环境集群', 'https://192.168.1.105:6443', '', NULL, 'admin', 'admin', '2021-03-12 00:00:00', '2021-03-12 00:00:00', 1); +COMMIT; + -- ---------------------------- -- Table structure for pipeline_instance -- ---------------------------- @@ -80,7 +137,7 @@ DROP TABLE IF EXISTS `pipeline_instance`; CREATE TABLE `pipeline_instance` ( `pipeline_template_id` bigint NOT NULL COMMENT '流水线模板id', `pipeline_instance_name` varchar(300) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '流水线实例名称', - `pipeline_instance_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '流水线实例id', + `pipeline_instance_id` bigint NOT NULL COMMENT '流水线实例id', `create_time` datetime NOT NULL COMMENT '创建时间', `create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '创建人', `update_time` datetime NOT NULL COMMENT '更新时间', @@ -99,26 +156,6 @@ CREATE TABLE `pipeline_instance` ( -- Records of pipeline_instance -- ---------------------------- BEGIN; -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', '8omvZEM792bbH8GaFVgLF', '2025-06-27 00:05:12', 'admin', '2025-06-27 00:05:12', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'DWEVcCB0b1A43LjP2SCcV', '2025-06-26 23:47:57', 'admin', '2025-06-26 23:47:57', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'gl4EJWZCikyKuLeW0Gzrq', '2025-06-27 00:13:37', 'admin', '2025-06-27 00:13:37', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'gnZ3oYi_bfVkL0Me6QKwh', '2025-06-26 23:53:07', 'admin', '2025-06-26 23:53:07', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'gqmbUcLG7hgKE40EYkCZz', '2025-06-26 23:55:32', 'admin', '2025-06-26 23:55:32', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'HbIwazuQj6s24Ero08rIw', '2025-06-26 23:57:53', 'admin', '2025-06-26 23:57:53', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'jRq5unyzWhbSSwj6noGrk', '2025-06-26 23:32:04', 'admin', '2025-06-26 23:32:04', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'Kum4R4e_hby0P7DXtV3RV', '2025-06-27 00:03:47', 'admin', '2025-06-27 00:03:47', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'l35eX80-zuYS1h6OfLtIp', '2025-06-26 23:54:28', 'admin', '2025-06-26 23:54:28', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'nN_xqed_XmfENYFk5mrji', '2025-06-27 00:08:25', 'admin', '2025-06-27 00:08:25', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'OZEBc8wLvbGLk6ZtrWx4c', '2025-06-26 23:29:54', 'admin', '2025-06-26 23:29:54', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'piC4lv7Xw7AaAluvqDzUw', '2025-06-26 23:37:44', 'admin', '2025-06-26 23:37:44', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'qBOPGj9lCnWsxdGmvLaiu', '2025-06-27 00:16:59', 'admin', '2025-06-27 00:16:59', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'r9x4rGQskuOXckyKX7exz', '2025-06-27 00:45:08', 'admin', '2025-06-27 00:45:08', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'sGgYbHzvBOBl_bAZ-rigz', '2025-06-26 23:25:54', 'admin', '2025-06-26 23:25:54', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'SMamFqVOtkfbFuBz-rFjd', '2025-06-26 23:28:48', 'admin', '2025-06-26 23:28:48', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'U8lhSSIBvHZYxikX2J9vM', '2025-06-26 23:41:47', 'admin', '2025-06-26 23:41:47', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'XWh1Cfh2Ipe0_KCmicWd2', '2025-06-26 23:28:11', 'admin', '2025-06-26 23:28:11', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'YrrVkKiLVHAFf9WWKkAwm', '2025-06-27 00:00:39', 'admin', '2025-06-27 00:00:39', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); -INSERT INTO `pipeline_instance` (`pipeline_template_id`, `pipeline_instance_name`, `pipeline_instance_id`, `create_time`, `create_by`, `update_time`, `type`, `app_name`, `env`, `status`, `current_node`, `current_node_status`, `context`, `pipeline_template`) VALUES (1, '流水线测试', 'ZPHF6zTcCfZIwoG23aKu5', '2025-06-26 23:44:32', 'admin', '2025-06-26 23:44:32', 'app_backend', 'test', 'daily', 'wait', '', '', '{\"createBy\":\"admin\",\"envCode\":\"daily\",\"appName\":\"test\"}', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); COMMIT; -- ---------------------------- @@ -126,14 +163,15 @@ COMMIT; -- ---------------------------- DROP TABLE IF EXISTS `pipeline_instance_node_detail`; CREATE TABLE `pipeline_instance_node_detail` ( + `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id', `pipeline_instance_id` bigint NOT NULL COMMENT '流水线实例id', `start_time` datetime NOT NULL COMMENT '开始时间', - `finish_time` datetime NOT NULL COMMENT '结束时间', - `status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '节点状态', `node_index` int NOT NULL COMMENT '节点索引', `node_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '节点编码', - `node_description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '节点描述', - `context` varchar(255) NOT NULL COMMENT '输入参数' + `step_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '步骤说明', + `step_status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '步骤状态', + `step_msg` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '异常明细', + PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='流水线实例节点明细'; -- ---------------------------- @@ -153,21 +191,73 @@ CREATE TABLE `pipeline_template` ( `update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '修改人', `update_time` datetime NOT NULL COMMENT '修改时间', `available` tinyint(1) NOT NULL DEFAULT '1' COMMENT '数据有效性', - `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '流水线类型', - `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '语言', + `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '模板类型(应用发布流程等)', `env` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '环境编码', + `language` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '语言', `code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '流水线编码', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '流水线名称', `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '流水线描述', `template` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '流水线模板内容', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='流水线模板'; +) ENGINE=InnoDB AUTO_INCREMENT=128 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='流水线模板,类型和环境确定可以使用的范围'; -- ---------------------------- -- Records of pipeline_template -- ---------------------------- BEGIN; -INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `language`, `env`, `code`, `name`, `description`, `template`) VALUES (1, 'admin', '2025-06-19 18:50:18', 'admin', '2025-06-19 18:50:26', 1, 'app_backend', 'java', 'daily', 'dailyBackendJavaApp', '日常环境流水线', '日常环境流水线(JAVA)', '[{\n \"code\": \"node_init\",\n \"name\": \"初始化\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_merge_branch\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": []\n },\n {\n \"code\": \"node_build_java\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"backend-pipeline\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"condition\": \"success|fail\",\n \"isBlank\": \"true\"\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (1, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'front', 'daily', 'javascript', 'daily_front_javascript', '前端日常流水线', '前端日常流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-front-test\",\n \"npm\": \"npm\",\n \"nodeVersion\": \"v14.21.3\",\n \"mirrors\": \"https://registry.npmmirror.com\"\n }\n },\n {\n \"code\": \"node_deploy_api\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"部署成功,查看详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (2, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'front', 'stage', 'javascript', 'stage_front_javascript', '前端预发流水线', '前端预发流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-front-test\",\n \"npm\": \"npm\",\n \"nodeVersion\": \"v14.21.3\",\n \"mirrors\": \"https://registry.npmmirror.com\"\n }\n },\n {\n \"code\": \"node_deploy_api\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"部署成功,查看详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (3, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'front', 'online', 'javascript', 'online_front_javascript', '前端生产流水线', '前端生产流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-front-test\",\n \"npm\": \"npm\",\n \"nodeVersion\": \"v14.21.3\",\n \"mirrors\": \"https://registry.npmmirror.com\"\n }\n },\n {\n \"code\": \"node_approve_deploy\",\n \"type\": \"service\",\n \"name\": \"部署审批\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"同意\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n },\n {\n \"type\": \"execute\",\n \"title\": \"拒绝\",\n \"code\": \"refuse\",\n \"parameters\": {\n\n }\n }\n ]\n },\n {\n \"code\": \"node_deploy_api\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"部署成功,查看详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (4, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'daily', 'java', 'daily_backend_java', '日常环境流水线', '日常环境流水线(JAVA)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (5, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'stage', 'java', 'stage_backend_java', '预发环境流水线', '预发环境流水线(JAVA)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\",\n \"jdkVersion\": \"jdk11\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (6, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'online', 'java', 'online_backend_java', '生产环境流水线', '生产环境流水线(JAVA)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\"\n }\n },\n {\n \"code\": \"node_image_scan\",\n \"type\": \"service\",\n \"name\": \"镜像扫描\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-image-scan\"\n }\n },\n {\n \"code\": \"node_approve_deploy\",\n \"type\": \"service\",\n \"name\": \"部署审批\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"同意\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n },\n {\n \"type\": \"execute\",\n \"title\": \"拒绝\",\n \"code\": \"refuse\",\n \"parameters\": {\n\n }\n }\n ]\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (9, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'online', 'python', 'online_backend_python', '生产环境流水线', '生产环境流水线(Python)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n}, {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n}, {\n \"code\": \"node_http_post_plugin-stc_upload\",\n \"type\": \"service\",\n \"name\": \"STC代码上传\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/describe\"\n },\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"STC扫描结束,查看结果\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n}, {\n \"code\": \"node_http_post_plugin-stc_result\",\n \"type\": \"service\",\n \"name\": \"STC结果扫描\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/describe\"\n },\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"STC扫描结束,查看结果\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n}, {\n \"code\": \"node_build_python\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-python\"\n }\n}, {\n \"code\": \"node_deploy_python\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n}, {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {}\n }]\n}, {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n}]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (10, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'stage', 'python', 'stage_backend_python', '预发环境流水线', '预发环境流水线(Python)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_python\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-python\"\n }\n },\n {\n \"code\": \"node_deploy_python\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (11, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'daily', 'python', 'daily_backend_python', '日常环境流水线', '日常环境流水线(Python)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_python\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-python\"\n }\n },\n {\n \"code\": \"node_deploy_python\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (13, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'front', 'daily', 'javascript', 'daily_front_npm', 'alpha发布流水线', 'alpha发布流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_npm\",\n \"type\": \"service\",\n \"name\": \"NPM构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-front-test\",\n \"npm\": \"npm\",\n \"nodeVersion\": \"v14.21.3\",\n \"mirrors\": \"https://registry.npmmirror.com\"\n }\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (14, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'front', 'stage', 'javascript', 'stage_front_npm', 'beta发布流水线', 'beta发布流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_npm\",\n \"type\": \"service\",\n \"name\": \"NPM构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-front-test\",\n \"npm\": \"npm\",\n \"nodeVersion\": \"v14.21.3\",\n \"mirrors\": \"https://registry.npmmirror.com\"\n }\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (15, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'front', 'online', 'javascript', 'online_front_npm', '正式发布流水线', '正式发布流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_npm\",\n \"type\": \"service\",\n \"name\": \"NPM构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-front-test\",\n \"npm\": \"npm\",\n \"nodeVersion\": \"v14.21.3\",\n \"mirrors\": \"https://registry.npmmirror.com\"\n }\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (16, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'daily', 'node', 'daily_backend_node', 'Node日常环境流水线', 'Node日常环境流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_node\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-nodejs-server-test\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (17, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'stage', 'node', 'stage_backend_node', 'Node预发环境流水线', 'Node预发环境流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_node\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-nodejs-server-test\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (18, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'online', 'node', 'online_backend_node', 'Node生产环境流水线', 'Node生产环境流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_http_post_plugin-stc_upload\",\n \"type\": \"service\",\n \"name\": \"STC代码上传\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/describe\"\n },\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"STC扫描结束,查看结果\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_http_post_plugin-stc_result\",\n \"type\": \"service\",\n \"name\": \"STC结果扫描\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/describe\"\n },\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"STC扫描结束,查看结果\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_build_node\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-nodejs-server-test\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (19, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'daily', 'android', 'daily_mobile_android', 'Android流水线测试阶段', 'Android流水线测试阶段', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\",\n \"jdkVersion\": \"v11\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"UI自动化\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/appUiAutoTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/appUiAutoTest/describe\",\n \"envType\": \"online\"\n }\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (20, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'daily', 'android', 'daily_mobile_android_no_ui', 'Android流水线测试阶段(不包含UI测试)', 'Android流水线测试阶段(不包含UI测试)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\",\n \"jdkVersion\": \"v11\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (21, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'android', 'online_mobile_android', 'Android流水线发版阶段', 'Android流水线发版阶段', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_mpaas_upload_android\",\n \"type\": \"service\",\n \"name\": \"APK上传mPaas\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_mpaas_start_android\",\n \"type\": \"service\",\n \"name\": \"加固\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_apk_sign_android\",\n \"type\": \"service\",\n \"name\": \"签名\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"专项测试节点\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/specialTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/specialTest/describe\",\n \"envType\": \"online\"\n }\n }, {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {}\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (22, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'android', 'online_mobile_android_no_firm', 'Android流水线发版阶段(不加固)', 'Android流水线发版阶段(不加固)', '[{\n \"code\": \"node_release_android\",\n \"type\": \"service\",\n \"name\": \"合并到Release分支\"\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_apk_sign_android\",\n \"type\": \"service\",\n \"name\": \"签名\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"专项测试节点\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/specialTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/specialTest/describe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (23, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'daily', 'ios', 'daily_mobile_ios', 'IOS流水线测试阶段', 'IOS流水线测试阶段', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_ios\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-ios-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (24, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'ios', 'online_mobile_ios', 'IOS流水线发版阶段', 'IOS流水线发版阶段', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_ios\",\n \"type\": \"service\",\n \"name\": \"IOS构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-ios-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"专项测试节点\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/specialTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/specialTest/describe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (25, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'front', 'online', 'javascript', 'online_front_javascript_approve_master', '前端生产流水线(合并Master确认)', '前端生产流水线(合并Master确认)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-front-test\",\n \"npm\": \"npm\",\n \"nodeVersion\": \"v14.21.3\",\n \"mirrors\": \"https://registry.npmmirror.com\"\n }\n },\n {\n \"code\": \"node_approve_deploy\",\n \"type\": \"service\",\n \"name\": \"部署审批\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"同意\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n },\n {\n \"type\": \"execute\",\n \"title\": \"拒绝\",\n \"code\": \"refuse\",\n \"parameters\": {\n\n }\n }\n ]\n },\n {\n \"code\": \"node_deploy_api\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"部署成功,查看详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (28, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'devopsonline', 'java', 'devopsonline_backend_java', '运维生产环境流水线(Java)', '运维生产环境流水线(Java)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\"\n }\n },\n {\n \"code\": \"node_approve_deploy\",\n \"type\": \"service\",\n \"name\": \"部署审批\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"同意\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n },\n {\n \"type\": \"execute\",\n \"title\": \"拒绝\",\n \"code\": \"refuse\",\n \"parameters\": {\n\n }\n }\n ]\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (29, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'devopstest', 'java', 'devopstest_backend_java', '运维测试环境流水线(Java)', '运维测试环境流水线(Java)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (30, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'front', 'online', 'javascript', 'online_front_javascript_qa', '前端生产流水线-发布准入', '前端生产流水线-发布准入', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-front-test\",\n \"npm\": \"npm\",\n \"nodeVersion\": \"v14.21.3\",\n \"mirrors\": \"https://registry.npmmirror.com\" }\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"发布准入\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/releaseAdmissionExecute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/releaseAdmissionDescribe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_deploy_api\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"部署成功,查看详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (31, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alitest', 'java', 'alitest_backend_java', '阿里云测试环境流水线', '阿里云测试环境流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\",\n \"jdkVersion\": \"jdk8\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (32, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alionline', 'java', 'alionline_backend_java', '阿里云生产环境流水线', '阿里云生产环境流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\",\n \"jdkVersion\": \"jdk8\"\n }\n },\n {\n \"code\": \"node_image_scan\",\n \"type\": \"service\",\n \"name\": \"镜像扫描\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-image-scan\"\n }\n },\n {\n \"code\": \"node_approve_deploy\",\n \"type\": \"service\",\n \"name\": \"部署审批\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"同意\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n },\n {\n \"type\": \"execute\",\n \"title\": \"拒绝\",\n \"code\": \"refuse\",\n \"parameters\": {\n\n }\n }\n ]\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (33, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'daily', 'android', 'daily_mobile_android', 'Android流水线ECS部署测试阶段', 'Android流水线ECS部署测试阶段', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\",\n \"jdkVersion\": \"v11\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"UI自动化\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/appAutoUiTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/appAutoUiTest/describe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_approve_test_android\",\n \"type\": \"service\",\n \"name\": \"测试确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"测试通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (34, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'android', 'online_mobile_android', 'Android流水线ECS部署发版阶段', 'Android流水线ECS部署发版阶段', '[{\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_release_android\",\n \"type\": \"service\",\n \"name\": \"合并到Release分支\"\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_mpaas_upload_android\",\n \"type\": \"service\",\n \"name\": \"APK上传mPaas\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_mpaas_start_android\",\n \"type\": \"service\",\n \"name\": \"加固\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_apk_sign_android\",\n \"type\": \"service\",\n \"name\": \"签名\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"专项测试节点\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/specialTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/specialTest/describe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (38, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'android', 'online_mobile_android_no_test', 'Android流水线去除测试部署生产阶段', 'Android流水线去除测试部署发版阶段', '[{\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_release_android\",\n \"type\": \"service\",\n \"name\": \"合并到Release分支\"\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"name\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_mpaas_upload_android\",\n \"type\": \"service\",\n \"name\": \"APK上传mPaas\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_mpaas_start_android\",\n \"type\": \"service\",\n \"name\": \"加固\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_apk_sign_android\",\n \"type\": \"service\",\n \"name\": \"签名\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (39, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'daily', 'none', 'daily', '空白流水线', '空白流水线', '空白流水线'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (40, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'stage', 'none', 'stage', '空白流水线', '空白流水线', '空白流水线'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (41, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'online', 'none', 'online', '空白流水线', '空白流水线', '空白流水线'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (42, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alistage', 'java', 'alistage_backend_java', '阿里云预发环境流水线', '阿里云预发环境流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\",\n \"jdkVersion\": \"jdk8\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (48, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alitest', 'cpp', 'alitest_backend_cpp', 'C++流水线(自定义构建)', 'C++流水线(自定义构建)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_cplus_out\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/visualplatform/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/visualplatform/describe\",\n \"envType\": \"daily\"\n }\n },\n {\n \"code\": \"node_approve_cplus_out\",\n \"type\": \"service\",\n \"name\": \"审批\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/visualplatform/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/visualplatform/describe\",\n \"envType\": \"daily\"\n }\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (49, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alitest', 'python', 'alitest_backend_python', '阿里云测试环境Python流水线', '阿里云测试环境Python流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_python\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"python-pipeline\"\n }\n },\n {\n \"code\": \"node_deploy_python\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (50, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alistage', 'python', 'alistage_backend_python', '阿里云预发环境Python流水线', '阿里云预发环境Python流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_python\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"python-pipeline\"\n }\n },\n {\n \"code\": \"node_deploy_python\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (51, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alionline', 'python', 'alionline_backend_python', '阿里云生产环境Python流水线', '阿里云生产环境Python流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n}, {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n}, {\n \"code\": \"node_http_post_plugin-stc_upload\",\n \"type\": \"service\",\n \"name\": \"STC代码上传\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/describe\"\n },\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"STC扫描结束,查看结果\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n}, {\n \"code\": \"node_http_post_plugin-stc_result\",\n \"type\": \"service\",\n \"name\": \"STC结果扫描\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/describe\"\n },\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"STC扫描结束,查看结果\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n}, {\n \"code\": \"node_build_python\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"python-pipeline\"\n }\n}, {\n \"code\": \"node_deploy_python\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n}, {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {}\n }]\n}, {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n}]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (52, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alitest', 'node', 'alitest_backend_node', '阿里云测试环境Node流水线', '阿里云测试环境Node流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_node\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-nodejs-server-test\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (53, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alistage', 'node', 'alistage_backend_node', '阿里云预发环境Node流水线', '阿里云预发环境Node流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_node\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-nodejs-server-test\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (54, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alionline', 'node', 'alionline_backend_node', '阿里云生产环境Node流水线', '阿里云生产环境Node流水线', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_http_post_plugin-stc_upload\",\n \"type\": \"service\",\n \"name\": \"STC代码上传\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/describe\"\n },\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"STC扫描结束,查看结果\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_http_post_plugin-stc_result\",\n \"type\": \"service\",\n \"name\": \"STC结果扫描\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/describe\"\n },\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"STC扫描结束,查看结果\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_build_node\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-nodejs-server-test\"\n }\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"name\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (55, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alionline', 'java', 'alionline_backend_java_test', '阿里云生产环境流水线(Beta)', '生产环境流水线(test)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (56, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alionline', 'java', 'alionline_backend_java', '阿里云生产环境流水线', '阿里云生产环境流水线—发布准入&TB卡点&镜像扫描', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_tb_check_devops\",\n \"type\": \"service\",\n \"name\": \"TB任务检测\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_java\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-backend\",\n \"jdkVersion\": \"jdk8\"\n }\n },\n {\n \"code\": \"node_image_scan\",\n \"type\": \"service\",\n \"name\": \"镜像扫描\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-image-scan\"\n }\n },\n {\n \"code\": \"node_backend_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"发布准入\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/qa/releaseAdmissionExecute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/qa/releaseAdmissionDescribe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_approve_deploy\",\n \"type\": \"service\",\n \"name\": \"部署审批\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"同意\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n },\n {\n \"type\": \"execute\",\n \"title\": \"拒绝\",\n \"code\": \"refuse\",\n \"parameters\": {\n\n }\n }\n ]\n },\n {\n \"code\": \"node_deploy_java\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (60, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'daily', 'android', 'daily_mobile_android_flutter', 'Android流水线测试阶段(Flutter版本检测)', 'Android流水线测试阶段(Flutter版本检测)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\",\n \"jdkVersion\": \"v11\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"UI自动化\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/appAutoUiTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/appAutoUiTest/describe\",\n \"envType\": \"online\"\n }\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (61, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'daily', 'android', 'daily_mobile_android_no_ui_flutter', 'Android流水线测试阶段(不包含UI测试&Flutter)', 'Android流水线测试阶段(不包含UI测试&Flutter)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\",\n \"jdkVersion\": \"v11\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (62, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'android', 'online_mobile_android_flutter', 'Android流水线发版阶段(Flutter版本)', 'Android流水线发版阶段(Flutter版本)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_mpaas_upload_android\",\n \"type\": \"service\",\n \"name\": \"APK上传mPaas\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_mpaas_start_android\",\n \"type\": \"service\",\n \"name\": \"加固\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_apk_sign_android\",\n \"type\": \"service\",\n \"name\": \"签名\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"专项测试节点\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/specialTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/specialTest/describe\",\n \"envType\": \"online\"\n }\n }, {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {}\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (63, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'android', 'online_mobile_android_no_firm_flutter', 'Android流水线发版阶段(不加固&Flutter)', 'Android流水线发版阶段(不加固&Flutter)', '[{\n \"code\": \"node_release_android\",\n \"type\": \"service\",\n \"name\": \"合并到Release分支\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_apk_sign_android\",\n \"type\": \"service\",\n \"name\": \"签名\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"专项测试节点\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/specialTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/specialTest/describe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (64, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'daily', 'android', 'daily_mobile_android_ecs_flutter', 'Android流水线ECS部署测试阶段(Flutter版本)', 'Android流水线ECS部署测试阶段(Flutter版本)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\",\n \"jdkVersion\": \"v11\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"UI自动化\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/appAutoUiTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/appAutoUiTest/describe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_approve_test_android\",\n \"type\": \"service\",\n \"name\": \"测试确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"测试通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (65, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'android', 'online_mobile_android_ecs_flutter', 'Android流水线ECS部署发版阶段(Flutter版本)', 'Android流水线ECS部署发版阶段(Flutter版本)', '[{\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_release_android\",\n \"type\": \"service\",\n \"name\": \"合并到Release分支\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_mpaas_upload_android\",\n \"type\": \"service\",\n \"name\": \"APK上传mPaas\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_mpaas_start_android\",\n \"type\": \"service\",\n \"name\": \"加固\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_apk_sign_android\",\n \"type\": \"service\",\n \"name\": \"签名\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"专项测试节点\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/specialTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/specialTest/describe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (66, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'android', 'online_mobile_android_no_test_flutter', 'Android流水线去除测试部署生产阶段(Flutter版本)', 'Android流水线去除测试部署生产阶段(Flutter版本)', '[{\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_release_android\",\n \"type\": \"service\",\n \"name\": \"合并到Release分支\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_android\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"pipeline-android-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_mpaas_upload_android\",\n \"type\": \"service\",\n \"name\": \"APK上传mPaas\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_mpaas_start_android\",\n \"type\": \"service\",\n \"name\": \"加固\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_apk_sign_android\",\n \"type\": \"service\",\n \"name\": \"签名\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (67, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'daily', 'ios', 'daily_mobile_ios_flutter', 'IOS流水线测试阶段(Flutter版本)', 'IOS流水线测试阶段(Flutter版本)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_ios\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"ios-pipeline-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (68, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'mobile', 'online', 'ios', 'online_mobile_ios_flutter', 'IOS流水线发版阶段(Flutter版本)', 'IOS流水线发版阶段(Flutter版本)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n }, {\n \"code\": \"flutter_branch_node_check\",\n \"type\": \"service\",\n \"name\": \"检查Flutter版本\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"showFlutterMsg\",\n \"parameters\": {},\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_build_ios\",\n \"type\": \"service\",\n \"name\": \"IOS构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"ios-pipeline-test\"\n },\n \"buttons\": [{\n \"type\": \"qrCodeDialog\",\n \"title\": \"查看APK二维码\",\n \"code\": \"openQrCode\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_http_get_plugin\",\n \"type\": \"service\",\n \"name\": \"专项测试节点\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"parameters\": {\n \"execute\": \"https://cutejava-api.odboy.cn/api/specialTest/execute\",\n \"describe\": \"https://cutejava-api.odboy.cn/api/specialTest/describe\",\n \"envType\": \"online\"\n }\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); +INSERT INTO `pipeline_template` (`id`, `create_by`, `create_time`, `update_by`, `update_time`, `available`, `type`, `env`, `language`, `code`, `name`, `description`, `template`) VALUES (69, 'admin', '2021-03-12 00:00:00', 'admin', '2021-03-12 00:00:00', 1, 'backend', 'alionline', 'python', 'alionline_backend_python_nostc', '阿里云生产环境Python流水线(No STC)', '阿里云生产环境Python流水线(No STC)', '[{\n \"code\": \"node_init\",\n \"type\": \"service\",\n \"name\": \"初始化\"\n },\n {\n \"code\": \"node_merge_branch\",\n \"type\": \"service\",\n \"name\": \"合并代码\",\n \"click\": \"true\",\n \"retry\": \"true\"\n },\n {\n \"code\": \"node_build_python\",\n \"type\": \"service\",\n \"name\": \"构建\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"detailType\": \"gitlab\",\n \"parameters\": {\n \"pipeline\": \"python-pipeline\"\n }\n },\n {\n \"code\": \"node_approve_deploy\",\n \"type\": \"service\",\n \"name\": \"部署审批\",\n \"click\": \"false\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"同意\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n },\n {\n \"type\": \"execute\",\n \"title\": \"拒绝\",\n \"code\": \"refuse\",\n \"parameters\": {\n\n }\n }\n ]\n },\n {\n \"code\": \"node_deploy_python\",\n \"type\": \"service\",\n \"name\": \"部署\",\n \"click\": \"true\",\n \"retry\": \"true\",\n \"buttons\": [{\n \"type\": \"link\",\n \"title\": \"查看部署详情\",\n \"code\": \"success\",\n \"parameters\": {\n \"isBlank\": \"true\"\n }\n }]\n },\n {\n \"code\": \"node_merge_confirm\",\n \"type\": \"service\",\n \"name\": \"合并确认\",\n \"click\": \"false\",\n \"retry\": \"false\",\n \"buttons\": [{\n \"type\": \"execute\",\n \"title\": \"通过\",\n \"code\": \"agree\",\n \"parameters\": {\n\n }\n }]\n },\n {\n \"code\": \"node_merge_master\",\n \"type\": \"service\",\n \"name\": \"合并回Master\",\n \"click\": \"false\",\n \"retry\": \"true\"\n }\n]'); COMMIT; -- ----------------------------