DevOps DevOps
产品简介
产品安装
快速入门
使用指南
开发指南
FAQ
6.7更新说明
  • 提测流程配置
  • 提测演示流程加载到示例项目中的配置流程
  • 提测演示流程内容说明
  • 制品晋级流程配置
  • 制品晋级演示流程加载到示例项目中的配置流程
  • 制品晋级演示流程内容说明
  • 其他场景配置
  • 创建工作项时,添加工作项关联工作项能力

# 提测流程配置

# 提测演示流程加载到示例项目中的配置流程

本文中所用到的材料如需获取请发邮件到cservice@primeton.com邮箱申请。邮件申请格式: 1.项目编号: 2.项目名称: 3.最终客户: 4.普元销售: 5.合同内部编号: 6.申请产品名称及原由:

一、通过postman导入提测流程工作流模板

将【postman-模板导入导出接口】文件夹内的【devops-config-export-import.postman_collection.json】导入postman软件
使用postman调用import-platform-data接口

importType参数一定要传part。(传all将会覆盖原有工作项配置!)
postman导入接口1 body》form-data》选择【提测流程json模板】文件夹内json文件(如DevOpsPlatformData_20231031154700.json)
postman导入接口2

二、配置项目模板选用该提测流程工作项方案

平台管理》模板管理》项目模板
克隆一个默认项目模板,将工作项方案改为【带提测流程的工作项方案】
创建项目模板 在项目管理中新建一个项目,选用新建的项目模板。
项目选择模板

# 提测演示流程内容说明

此处仅对工作流注意事项额外说明,详情流程参考【提测流程.xlsx】提测流程设计表格。

一、工作流部分说明

故事工作流中 【待测试,测试中,验证通过】状态可以根据对应提测工作流状态变化而同步流转。
提测工作流中 提测选取的故事工作项范围为【待测试,测试中,验证通过】状态的工作项。

提测工作项展示

规划的测试用例范围为选取的故事关联的测试用例范围,为了能正常选取,请完成测试用例的创建。
完成测试用例的规划时,会自动创建一个对应的测试计划。
开始测试时,会将测试计划置为进行中。

提测创建的测试计划

二、其他说明

故事和提测类型工作项的创建编辑添加了角色权限限制,请查看工作流配置按需修改。
该模板不包含泳道的配置,请自行配置泳道。

# 制品晋级流程配置

# 制品晋级演示流程加载到示例项目中的配置流程

本文中所用到的材料如需获取请发邮件到cservice@primeton.com邮箱申请。邮件申请格式: 1.项目编号: 2.项目名称: 3.最终客户: 4.普元销售: 5.合同内部编号: 6.申请产品名称及原由:

一、通过postman导入制品晋级工作流模板

将【postman-模板导入导出接口】文件夹内的【devops-config-export-import.postman_collection.json】导入postman软件
使用postman调用import-platform-data接口

importType参数一定要传part。(传all将会覆盖原有工作项配置!)
body》form-data》选择【制品晋级json模板】文件夹内json文件(如DevOpsPlatformData_20231122163245.json)

二、配置项目模板选用该制品晋级工作项方案

平台管理》模板管理》项目模板
克隆一个默认项目模板,将工作项方案改为【带制品晋级的工作项方案】
创建项目模板 在项目管理中新建一个项目,选用新建的项目模板。
项目选择模板

三、关联介质库

制品晋级工作项流程需要保证项目关联了一个测试库,一个投产库。
关联介质库

四、配置制品晋级流水线

执行本章结尾的sql,可以生成一个平台级制品晋级nexus库模板。
创建一个流水线,选择该模板即可获得一个制品晋级流水线,需要确保流水线命名中带有制品晋级,才能保证制品晋级任务可以选择到该流水线。 配置制品晋级流水线

# 制品晋级演示流程内容说明

详情流程参考【制品晋级.xlsx】制品晋级设计表格。

一、制品晋级工作项流程说明

创建制品晋级类型工作项
创建制品晋级类型工作项

选择需要制品晋级的源介质库
选择需要制品晋级的源介质库

保证库中有介质
保证库中有介质

选择投产库执行晋级,并选择需要执行的制品晋级流水线
选择投产库执行晋级

在工作项流转时会自动调用该流水线并传入对应参数
选择投产库执行晋级

根据流水线执行结果,自行完成制品晋级工作项的确认或回退。
选择投产库执行晋级

制品晋级nexus库模板sql

INSERT INTO dps_template(TEMPLATE_ID, TEMPLATE_TYPE, TEMPLATE_SCOPE, SCOPE_TARGET_ID, TEMPLATE_NAME, DESCRIPTION, TEMPLATE_CONTENT, VIEW_INFO, DEL_FLAG, CREATE_USER, CREATE_TIME, UPDATE_USER, UPDATE_TIME, ARTIFACT_TYPE, TECHNOLOGY_TYPE, BUILD_TYPE, COMPONENT_TYPE) 
VALUES ('product-promotion-nexus-export', 'build-definition', 'PLATFORM', NULL, '制品晋级-nexus-export', NULL, '{\"definitionId\":\"2481\",\"definitionName\":\"demojar制品晋级-nexus\",\"pipelineId\":\"4321\",\"projectId\":\"1121\",\"templateId\":null,\"description\":null,\"retention\":\"{\\\"maxSuccessCount\\\":10,\\\"maxFailCount\\\":5}\",\"variableDefine\":\"[{\\\"value\\\":\\\"983\\\",\\\"description\\\":\\\"源制品仓库\\\",\\\"asParameter\\\":1,\\\"name\\\":\\\"sourceArtifactRepositoryId\\\",\\\"type\\\":\\\"artifactRepo\\\",\\\"label\\\":null,\\\"enumSetting\\\":{\\\"data\\\":[{\\\"label\\\":\\\"男\\\",\\\"value\\\":\\\"man\\\"},{\\\"value\\\":\\\"woman\\\"},\\\"girl\\\"],\\\"multiSelect\\\":false},\\\"isEdit\\\":false,\\\"dataIndex\\\":0},{\\\"value\\\":\\\"/20231024\\\",\\\"description\\\":\\\"源路径\\\",\\\"asParameter\\\":1,\\\"name\\\":\\\"sourcePath\\\",\\\"type\\\":\\\"variable\\\",\\\"label\\\":null,\\\"enumSetting\\\":{\\\"data\\\":[{\\\"label\\\":\\\"男\\\",\\\"value\\\":\\\"man\\\"},{\\\"value\\\":\\\"woman\\\"},\\\"girl\\\"],\\\"multiSelect\\\":false},\\\"isEdit\\\":false,\\\"dataIndex\\\":1},{\\\"value\\\":null,\\\"description\\\":\\\"includes\\\",\\\"asParameter\\\":1,\\\"name\\\":\\\"includes\\\",\\\"type\\\":\\\"variable\\\",\\\"label\\\":null,\\\"enumSetting\\\":{\\\"data\\\":[{\\\"label\\\":\\\"男\\\",\\\"value\\\":\\\"man\\\"},{\\\"value\\\":\\\"woman\\\"},\\\"girl\\\"],\\\"multiSelect\\\":false},\\\"isEdit\\\":false,\\\"dataIndex\\\":2},{\\\"value\\\":null,\\\"description\\\":\\\"excludes\\\",\\\"asParameter\\\":1,\\\"name\\\":\\\"excludes\\\",\\\"type\\\":\\\"variable\\\",\\\"label\\\":null,\\\"enumSetting\\\":{\\\"data\\\":[{\\\"label\\\":\\\"男\\\",\\\"value\\\":\\\"man\\\"},{\\\"value\\\":\\\"woman\\\"},\\\"girl\\\"],\\\"multiSelect\\\":false},\\\"isEdit\\\":false,\\\"dataIndex\\\":3},{\\\"value\\\":\\\"941\\\",\\\"description\\\":\\\"目标制品仓库\\\",\\\"asParameter\\\":1,\\\"name\\\":\\\"targetArtifactRepositoryId\\\",\\\"type\\\":\\\"artifactRepo\\\",\\\"label\\\":null,\\\"enumSetting\\\":{\\\"data\\\":[{\\\"label\\\":\\\"男\\\",\\\"value\\\":\\\"man\\\"},{\\\"value\\\":\\\"woman\\\"},\\\"girl\\\"],\\\"multiSelect\\\":false},\\\"isEdit\\\":false,\\\"dataIndex\\\":4}]\",\"timeoutScope\":0,\"successCallback\":null,\"failCallback\":null,\"successCallbackScript\":null,\"failCallbackScript\":null,\"delFlag\":\"0\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-17 10:17:45\",\"updateUser\":\"yanggy\",\"updateTime\":\"2023-10-19 18:12:35\",\"enginePipeline\":{\"pipelineId\":\"4321\",\"pipelineName\":\"demojar制品晋级-nexus-1121\",\"projectId\":\"1121\",\"description\":null,\"stageIds\":\"4721\",\"engineId\":null,\"engineNode\":null,\"envType\":null,\"everyNewJob\":null,\"autoDeleteJob\":null,\"customGroovyTemplateIds\":null,\"estimatedDuration\":10939,\"extension\":\"{\\\"notifyOnlyIfFailed\\\":false}\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-17 10:17:45\",\"updateUser\":\"yanggy\",\"updateTime\":\"2023-10-24 11:37:23\",\"engineContainer\":null,\"targetRunInfo\":{\"runInfoId\":\"engine-pipeline:4321\",\"targetType\":\"engine-pipeline\",\"targetId\":\"4321\",\"latestInstanceId\":\"9281\",\"theState\":null,\"theTime\":null,\"theCount\":0,\"theDetails\":null,\"extend\":null,\"latestInstance\":{\"pipelineInstanceId\":\"9281\",\"projectId\":\"1121\",\"pipelineId\":\"4321\",\"pipelineName\":\"demojar制品晋级-nexus-1121\",\"everyNewJob\":\"true\",\"autoDeleteJob\":\"true\",\"instanceStatus\":\"success\",\"systemType\":\"3\",\"pipelineType\":\"build\",\"engineId\":\"2\",\"engineJobName\":\"build-1121-DEMOPROJECT1016-demojar制品晋级-nexus-4321-9281\",\"engineBuildNumber\":1,\"pipelineParams\":null,\"pipelineHandlers\":null,\"beginTime\":\"2023-10-24 12:12:08\",\"endTime\":\"2023-10-24 12:12:18\",\"estimatedDuration\":10939,\"pipelineDuration\":10939,\"globalData\":null,\"approvalRegex\":null,\"detailsDelFlag\":\"0\",\"delFlag\":\"0\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-24 11:36:55\",\"updateUser\":\"yanggy\",\"updateTime\":\"2023-10-24 11:37:18\",\"pipelineProgress\":1,\"enginePipeline\":null,\"enginePipelineInstanceDetails\":null,\"engineStageInstances\":[{\"stageInstanceId\":\"12141\",\"stageName\":\"1:Nexus制品晋级\",\"projectId\":\"1121\",\"pipelineInstanceId\":\"9281\",\"pipelineId\":\"4321\",\"stageTpId\":\"119\",\"stageTpIcon\":\"/static/images/component_logo/nexus-artifacts-promotion.svg\",\"stageId\":\"4721\",\"stageRunMode\":\"serial\",\"beginTime\":\"2023-10-24 12:12:08\",\"endTime\":\"2023-10-24 12:12:18\",\"instanceStatus\":\"success\",\"estimatedDuration\":10887,\"stageDuration\":10887,\"stageResult\":null,\"sort\":1,\"delFlag\":\"0\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-24 11:36:55\",\"updateUser\":\"yanggy\",\"updateTime\":\"2023-10-24 11:37:18\",\"stageProgress\":1,\"nodeName\":\"master\",\"stageDisable\":\"\",\"engineStage\":null,\"stageResultObj\":null}],\"pipelineResultObj\":null}},\"engineStages\":[{\"stageId\":\"4721\",\"stageName\":\"Nexus制品晋级\",\"projectId\":\"1121\",\"pipelineId\":\"4321\",\"estimatedDuration\":10887,\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":\"yanggy\",\"updateTime\":\"2023-10-24 11:37:23\",\"stageRunMode\":\"serial\",\"stageDisable\":\"\",\"engineStageAttributes\":[{\"attrId\":\"136210\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"disable\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"01\",\"attrDefName\":\"disable\",\"attrDefLabel\":\"禁用\",\"stageTpId\":\"all-common\",\"sort\":1,\"category\":\"10:高级\",\"isRequired\":false,\"tip\":\"设置为true则跳过此步骤\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136220\",\"stageId\":\"4721\",\"attrValue\":null,\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"failedContinue\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"02\",\"attrDefName\":\"failedContinue\",\"attrDefLabel\":\"失败后继续运行\",\"stageTpId\":\"all-common\",\"sort\":1,\"category\":\"11:高级(失败)\",\"isRequired\":false,\"tip\":\"该任务失败任然执行后续任务,不会中断\",\"defaultValue\":null,\"controlType\":\"checkbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136221\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"failedCallback\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"021\",\"attrDefName\":\"failedCallback\",\"attrDefLabel\":\"失败回调\",\"stageTpId\":\"all-common\",\"sort\":2,\"category\":\"11:高级(失败)\",\"isRequired\":false,\"tip\":\"任务失败后调用其它构建定义\",\"defaultValue\":null,\"controlType\":\"combobox\",\"valueProvider\":\"{\\\"url\\\":\\\"api/ci/builddefs?projectId=:projectId\\\",\\\"textField\\\":\\\"definitionName\\\",\\\"valueField\\\":\\\"definitionId\\\",\\\"value\\\":\\\"\\\", \\\"multiSelect\\\":false}\",\"options\":\"{\\\"needClean\\\": \\\"true\\\"}\",\"checkPolicy\":null}},{\"attrId\":\"136212\",\"stageId\":\"4721\",\"attrValue\":\"serial\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"runMode\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"03\",\"attrDefName\":\"runMode\",\"attrDefLabel\":\"运行模式\",\"stageTpId\":\"all-common\",\"sort\":3,\"category\":\"10:高级\",\"isRequired\":false,\"tip\":\"流水线任务运行模式,有串行,并行,异步三种模式\",\"defaultValue\":\"serial\",\"controlType\":\"dict\",\"valueProvider\":\"{\\\"type\\\":\\\"dictcombobox\\\",\\\"dictTypeId\\\":\\\"DPS_ENGINE_STAGE_RUN_MODE\\\"}\",\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136213\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"nodeLabel\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"04\",\"attrDefName\":\"nodeLabel\",\"attrDefLabel\":\"节点\",\"stageTpId\":\"all-common\",\"sort\":4,\"category\":\"10:高级\",\"isRequired\":false,\"tip\":\"指定引擎中的执行节点,配置为节点名称或label\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136215\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"exportGlobal\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"05\",\"attrDefName\":\"exportGlobal\",\"attrDefLabel\":\"属性导出\",\"stageTpId\":\"all-common\",\"sort\":6,\"category\":\"10:高级\",\"isRequired\":false,\"tip\":\"把属性导出到global数据区,{属性名}|{变量名},多个逗号分隔\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136211\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"stageTimeout\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"07\",\"attrDefName\":\"stageTimeout\",\"attrDefLabel\":\"超时时间(秒)\",\"stageTpId\":\"all-common\",\"sort\":2,\"category\":\"10:高级\",\"isRequired\":false,\"tip\":\"该步骤执行时间超过设置时间则失败\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136222\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"cycleExpression\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"08\",\"attrDefName\":\"cycleExpression\",\"attrDefLabel\":\"循环执行表达式\",\"stageTpId\":\"all-common\",\"sort\":1,\"category\":\"15:高级(循环)\",\"isRequired\":false,\"tip\":\"循环执行表达式值为true时循环执行\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136223\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"maxCycleExecuteCount\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"09\",\"attrDefName\":\"maxCycleExecuteCount\",\"attrDefLabel\":\"最大循环执行次数\",\"stageTpId\":\"all-common\",\"sort\":2,\"category\":\"15:高级(循环)\",\"isRequired\":false,\"tip\":\"循环执行表达式不为空时有用,默认100\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136224\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"cycleInterval\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"10\",\"attrDefName\":\"cycleInterval\",\"attrDefLabel\":\"循环执行间隔(秒)\",\"stageTpId\":\"all-common\",\"sort\":3,\"category\":\"15:高级(循环)\",\"isRequired\":false,\"tip\":null,\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136225\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"cycleItems\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"11\",\"attrDefName\":\"cycleItems\",\"attrDefLabel\":\"循环对象\",\"stageTpId\":\"all-common\",\"sort\":4,\"category\":\"15:高级(循环)\",\"isRequired\":false,\"tip\":\"循环对象必须是一个数组、collection或者Map类型的值,可以使用${cycleItem}获取循环单个元素\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136205\",\"stageId\":\"4721\",\"attrValue\":\"${sourceArtifactRepositoryId}\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"sourceArtifactRepositoryId\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"119001\",\"attrDefName\":\"sourceArtifactRepositoryId\",\"attrDefLabel\":\"源制品仓库\",\"stageTpId\":\"119\",\"sort\":1,\"category\":\"1:基本信息\",\"isRequired\":true,\"tip\":null,\"defaultValue\":null,\"controlType\":\"combobox\",\"valueProvider\":\"{\\\"url\\\":\\\"api/ci/artifact-repos?projectId=:projectId&envType=:envType&systemCategory=nexus\\\",\\\"textField\\\":\\\"repoName,repoUrl\\\",\\\"valueField\\\":\\\"repoId\\\",\\\"value\\\":\\\"\\\", \\\"multiSelect\\\":false}\",\"options\":\"{\\\"needClean\\\": \\\"true\\\"}\",\"checkPolicy\":null}},{\"attrId\":\"136206\",\"stageId\":\"4721\",\"attrValue\":\"${sourcePath}\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"sourcePath\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"119002\",\"attrDefName\":\"sourcePath\",\"attrDefLabel\":\"源路径\",\"stageTpId\":\"119\",\"sort\":2,\"category\":\"1:基本信息\",\"isRequired\":false,\"tip\":\"同步的是源路径下的制品,如果不配置,默认是根路径\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136207\",\"stageId\":\"4721\",\"attrValue\":\"${includes}\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"includes\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"119003\",\"attrDefName\":\"includes\",\"attrDefLabel\":\"includes\",\"stageTpId\":\"119\",\"sort\":3,\"category\":\"1:基本信息\",\"isRequired\":false,\"tip\":\"包含的匹配策略,多个用逗号分隔\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136208\",\"stageId\":\"4721\",\"attrValue\":\"${excludes}\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"excludes\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"119004\",\"attrDefName\":\"excludes\",\"attrDefLabel\":\"excludes\",\"stageTpId\":\"119\",\"sort\":4,\"category\":\"1:基本信息\",\"isRequired\":false,\"tip\":\"排除的匹配策略,多个用逗号分隔\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136209\",\"stageId\":\"4721\",\"attrValue\":\"${targetArtifactRepositoryId}\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"targetArtifactRepositoryId\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"119005\",\"attrDefName\":\"targetArtifactRepositoryId\",\"attrDefLabel\":\"目标制品仓库\",\"stageTpId\":\"119\",\"sort\":5,\"category\":\"1:基本信息\",\"isRequired\":true,\"tip\":null,\"defaultValue\":null,\"controlType\":\"combobox\",\"valueProvider\":\"{\\\"url\\\":\\\"api/ci/artifact-repos?projectId=:projectId&envType=:envType&systemCategory=nexus\\\",\\\"textField\\\":\\\"repoName,repoUrl\\\",\\\"valueField\\\":\\\"repoId\\\",\\\"value\\\":\\\"\\\", \\\"multiSelect\\\":false}\",\"options\":\"{\\\"needClean\\\": \\\"true\\\"}\",\"checkPolicy\":null}},{\"attrId\":\"136216\",\"stageId\":\"4721\",\"attrValue\":null,\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"stageBeforeScript\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"14\",\"attrDefName\":\"stageBeforeScript\",\"attrDefLabel\":\"前置脚本\",\"stageTpId\":\"all-common\",\"sort\":7,\"category\":\"10:高级(前后置脚本)\",\"isRequired\":false,\"tip\":\"任务执行前置脚本\",\"defaultValue\":null,\"controlType\":\"editor\",\"valueProvider\":\"{\\\"type\\\":\\\"groovy\\\"}\",\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136217\",\"stageId\":\"4721\",\"attrValue\":null,\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"stageAfterScript\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"15\",\"attrDefName\":\"stageAfterScript\",\"attrDefLabel\":\"后置脚本\",\"stageTpId\":\"all-common\",\"sort\":8,\"category\":\"10:高级(前后置脚本)\",\"isRequired\":false,\"tip\":\"任务执行后置脚本\",\"defaultValue\":null,\"controlType\":\"editor\",\"valueProvider\":\"{\\\"type\\\":\\\"groovy\\\"}\",\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136218\",\"stageId\":\"4721\",\"attrValue\":null,\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"stageExceptionScript\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"16\",\"attrDefName\":\"stageExceptionScript\",\"attrDefLabel\":\"异常脚本\",\"stageTpId\":\"all-common\",\"sort\":9,\"category\":\"10:高级(前后置脚本)\",\"isRequired\":false,\"tip\":\"任务执行异常脚本\",\"defaultValue\":null,\"controlType\":\"editor\",\"valueProvider\":\"{\\\"type\\\":\\\"groovy\\\"}\",\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136214\",\"stageId\":\"4721\",\"attrValue\":\"\",\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"container\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"17\",\"attrDefName\":\"container\",\"attrDefLabel\":\"容器\",\"stageTpId\":\"all-common\",\"sort\":5,\"category\":\"10:高级\",\"isRequired\":false,\"tip\":\"指定Pod Template中的容器名称\",\"defaultValue\":null,\"controlType\":\"textbox\",\"valueProvider\":null,\"options\":null,\"checkPolicy\":null}},{\"attrId\":\"136219\",\"stageId\":\"4721\",\"attrValue\":null,\"createUser\":\"yanggy\",\"createTime\":\"2023-10-19 18:12:35\",\"updateUser\":null,\"updateTime\":null,\"attrDefName\":\"stageGroovyDefineScript\",\"engineStageAttributeDefinition\":{\"attrDefId\":\"18\",\"attrDefName\":\"stageGroovyDefineScript\",\"attrDefLabel\":\"定义脚本\",\"stageTpId\":\"all-common\",\"sort\":10,\"category\":\"10:高级(前后置脚本)\",\"isRequired\":false,\"tip\":\"任务相关的定义脚本\",\"defaultValue\":null,\"controlType\":\"editor\",\"valueProvider\":\"{\\\"type\\\":\\\"groovy\\\"}\",\"options\":null,\"checkPolicy\":null}}],\"engineStageTemplate\":{\"stageTpId\":\"119\",\"stageTpName\":\"nexus-artifacts-promotion\",\"stageTpLabel\":\"Nexus制品晋级\",\"stageTpType\":\"tool\",\"stageTpTypeLabel\":\"工具\",\"stageTags\":\"build,deploy\",\"stageTpIcon\":\"/static/images/component_logo/nexus-artifacts-promotion.svg\",\"commonStageTps\":\"all-common\",\"stageHandler\":\"com.primeton.devops.ci.helper.CiResourceStageHandler\",\"estimatedDuration\":60000,\"description\":\"把Nexus一个仓库的制品晋级到另一个仓库中\",\"isHidden\":false,\"engineStageAttributeDefinitions\":[]},\"stageIndex\":1}],\"latestStatus\":\"success\",\"latestExecuteTime\":\"2023-10-24 11:36:55\",\"latestExecutor\":\"yanggy\"},\"latestStatus\":\"success\",\"latestExecuteTime\":\"2023-10-24 11:36:55\",\"latestExecutor\":\"yanggy\",\"latestBuildId\":\"6141\",\"latestBuildNumber\":\"202310241136-9281-1\",\"latestExecutorEmpName\":\"杨桂焱\",\"latestExecutorAvatar\":\"\",\"latestExecutorStatus\":\"on\",\"componentIds\":\"DEMOPROJECT1016-demoJar\",\"componentNames\":\"demoJar\",\"labels\":[{\"labelType\":\"build-definition\",\"projectId\":\"1121\",\"targetId\":\"2481\",\"labelName\":\"制品晋级\",\"labelCategory\":null,\"labelCount\":0,\"sortno\":0}],\"delayTriggerTime\":null}', NULL, '0', 'sysadmin', '2023-11-22 15:50:09', NULL, NULL, NULL, NULL, NULL, NULL);

# 其他场景配置

# 创建工作项时,添加工作项关联工作项能力

目的是在创建工作项时,可以关联单个工作项,通过创建工作项页面配置特定组件实现。
下文以默认创建工作项页面为例,加上关联工作项能力
关联工作项页面

页面json内容可以直接复制如下脚本。

{
  "list": [
    {
      "type": "grid",
      "layout": true,
      "icon": "icon-grid",
      "attrDefLabel": "布局器",
      "columns": [
        {
          "span": 12,
          "list": [
            {
              "type": "WorkitemIteration",
              "icon": "el-icon-set-up",
              "attrDefLabel": "所属迭代",
              "attrDefName": "iterationId",
              "options": {
                "class": "w-100p",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "placeholder": "--",
                "showLabel": true,
                "labelWidth": "",
                "filterable": true,
                "disabled": false,
                "clearable": true
              },
              "key": "1693298853000_28513",
              "model": "WorkitemIteration_1693298853000_28513",
              "rules": []
            },
            {
              "type": "WorkitemVersion",
              "icon": "el-icon-share",
              "attrDefLabel": "所属版本",
              "attrDefName": "versionId",
              "options": {
                "class": "w-100p",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "placeholder": "--",
                "showLabel": true,
                "labelWidth": "",
                "clearable": true,
                "filterable": true,
                "multiple": false,
                "show-not-in-version": false
              },
              "key": "1693298901000_71288",
              "model": "WorkitemVersion_1693298901000_71288",
              "rules": []
            }
          ]
        },
        {
          "span": 12,
          "list": [
            {
              "type": "WorkitemModule",
              "icon": "el-icon-menu",
              "attrDefLabel": "所属模块",
              "attrDefName": "moduleId",
              "options": {
                "class": "w-100p",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "placeholder": "--",
                "showLabel": true,
                "labelWidth": "",
                "disabled": false,
                "clearable": true,
                "filterable": true,
                "visible": ""
              },
              "key": "1693298881000_68784",
              "model": "WorkitemModule_1693298881000_68784",
              "rules": []
            }
          ]
        }
      ],
      "options": {
        "gutter": 10,
        "justify": "start",
        "align": "top",
        "class": ""
      },
      "key": "1600407380000_45493",
      "model": "grid_1600407380000_45493",
      "rules": []
    },
    {
      "type": "parentWorkitem",
      "icon": "el-icon-s-help",
      "attrDefLabel": "父工作项",
      "attrDefName": "parentWorkitemId",
      "options": {
        "class": "w-100p",
        "style": "",
        "event": "",
        "required": false,
        "readonly": null,
        "tip": null,
        "placeholder": "--",
        "showLabel": true,
        "labelWidth": "",
        "disabled": false,
        "clearable": true,
        "valueProvider": {
          "workitemTypeIds": ""
        }
      },
      "key": "1693365048000_73845",
      "model": "parentWorkitem_1693365048000_73845",
      "rules": []
    },
    {
      "type": "WorkitemRelation",
      "icon": "el-icon-s-help",
      "attrDefLabel": "前置工作项",
      "attrDefName": "preWorkitemId",
      "options": {
        "class": "",
        "style": "",
        "event": "",
        "required": false,
        "readonly": null,
        "tip": null,
        "placeholder": "--",
        "showLabel": true,
        "labelWidth": "",
        "disabled": false,
        "clearable": true,
        "valueProvider": {
          "workitemTypeIds": ""
        }
      },
      "key": "1709625186000_62588",
      "model": "WorkitemRelation_1691486926000_23820",
      "rules": []
    },
    {
      "type": "input",
      "icon": "icon-input",
      "attrDefLabel": "标题",
      "attrDefName": "title",
      "defaultValue": "",
      "options": {
        "size": "mini",
        "labelWidth": "",
        "showLabel": true,
        "width": "100%",
        "placeholder": "",
        "pattern": "",
        "disabled": false,
        "clearable": true,
        "checkRules": [],
        "customCheckRules": [],
        "class": "",
        "style": "",
        "event": "",
        "required": true,
        "readonly": null,
        "tip": null,
        "maxlength": 0,
        "type": "input",
        "showWordLimit": true,
        "prefixIcon": "",
        "suffixIcon": "",
        "prepend": "",
        "append": "",
        "limit": null,
        "dataType": "string"
      },
      "key": "1693298971000_32756",
      "model": "input_1693298971000_32756",
      "rules": []
    },
    {
      "type": "WorkitemVersion",
      "icon": "el-icon-share",
      "attrDefLabel": "影响版本",
      "attrDefName": "affectVersionIds",
      "options": {
        "class": "w-100p",
        "style": "",
        "event": "",
        "required": false,
        "readonly": null,
        "tip": null,
        "placeholder": "--",
        "showLabel": true,
        "labelWidth": "",
        "clearable": true,
        "filterable": true,
        "multiple": true,
        "show-not-in-version": false
      },
      "key": "1693299022000_21556",
      "model": "WorkitemVersion_1693299022000_21556",
      "rules": []
    },
    {
      "type": "grid",
      "layout": true,
      "icon": "icon-grid",
      "attrDefLabel": "布局器",
      "columns": [
        {
          "span": 12,
          "list": [
            {
              "type": "WorkitemAssignee",
              "icon": "el-icon-user",
              "attrDefLabel": "责任人",
              "attrDefName": "assignee",
              "options": {
                "class": "",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "showLabel": true,
                "labelWidth": "",
                "placeholder": "--",
                "disabled": false,
                "clearable": true
              },
              "key": "1693299038000_60649",
              "model": "WorkitemAssignee_1693299038000_60649",
              "rules": []
            },
            {
              "type": "WorkitemEnvType",
              "icon": "el-icon-s-data",
              "attrDefLabel": "环境类型",
              "attrDefName": "envType",
              "options": {
                "class": "w-100p",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "placeholder": "--",
                "showLabel": true,
                "labelWidth": "",
                "disabled": false,
                "clearable": true,
                "visible": ""
              },
              "key": "1693299049000_44099",
              "model": "WorkitemEnvType_1693299049000_44099",
              "rules": []
            },
            {
              "type": "WorkitemPriority",
              "icon": "el-icon-s-opportunity",
              "attrDefLabel": "优先级",
              "attrDefName": "priority",
              "options": {
                "class": "",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "placeholder": "--",
                "showLabel": true,
                "labelWidth": "",
                "size": "large",
                "visible": "this.form.workitemType.workitemTypeId === '4' || this.form.workitemType.workitemTypeId != '5' "
              },
              "key": "1693299064000_60309",
              "model": "WorkitemPriority_1693299064000_60309",
              "rules": []
            },
            {
              "type": "timeEstimate",
              "icon": "el-icon-time",
              "attrDefLabel": "预估时间",
              "attrDefName": "timeEstimate",
              "options": {
                "class": "w-100p",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": "ex: 3w 4d 12h",
                "showLabel": true,
                "labelWidth": "",
                "disabled": false,
                "clearable": true,
                "visible": ""
              },
              "key": "1693365065000_81091",
              "model": "timeEstimate_1693365065000_81091",
              "rules": []
            },
            {
              "type": "WorkitemDatePicker",
              "icon": "el-icon-time",
              "attrDefLabel": "开始时间",
              "attrDefName": "beginTime",
              "options": {
                "class": "w-100p",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "showLabel": true,
                "labelWidth": "",
                "disabled": false,
                "showDiffDays": false,
                "clearable": true
              },
              "key": "1693299090000_43090",
              "model": "WorkitemDatePicker_1693299090000_43090",
              "rules": []
            },
            {
              "type": "dueTime",
              "icon": "el-icon-time",
              "attrDefLabel": "到期时间",
              "attrDefName": "dueTime",
              "options": {
                "class": "w-100p",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "showLabel": true,
                "labelWidth": "",
                "disabled": false,
                "clearable": true
              },
              "key": "1693365074000_68036",
              "model": "dueTime_1693365074000_68036",
              "rules": []
            }
          ]
        },
        {
          "span": 12,
          "list": [
            {
              "type": "WorkitemLevel",
              "icon": "el-icon-warning",
              "attrDefLabel": "严重等级",
              "attrDefName": "bugLevel",
              "options": {
                "class": "",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "placeholder": "--",
                "showLabel": true,
                "labelWidth": "",
                "size": "large",
                "visible": "this.form.workitemType.workitemTypeId === '4' || this.form.workitemType.workitemTypeId === '5' "
              },
              "key": "1693299120000_10118",
              "model": "WorkitemLevel_1693299120000_10118",
              "rules": []
            },
            {
              "type": "WorkitemStoryDegree",
              "icon": "el-icon-s-data",
              "attrDefLabel": "故事点",
              "attrDefName": "storyDegree",
              "options": {
                "class": "w-100p",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "placeholder": "--",
                "showLabel": true,
                "labelWidth": "",
                "disabled": false,
                "clearable": true,
                "visible": "this.form.workitemType.workitemTypeId === '2'"
              },
              "key": "1693299192000_30878",
              "model": "WorkitemStoryDegree_1693299192000_30878",
              "rules": []
            },
            {
              "type": "select",
              "icon": "icon-select",
              "attrDefLabel": "关联类型",
              "attrDefName": "associationType",
              "defaultValue": "",
              "options": {
                "size": "mini",
                "labelWidth": "",
                "showLabel": true,
                "width": "100%",
                "placeholder": "",
                "pattern": "",
                "disabled": false,
                "clearable": true,
                "checkRules": [],
                "customCheckRules": [],
                "class": "",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": null,
                "valueProvider": {
                  "dictTypeId": "",
                  "dataSource": "remote",
                  "method": "get",
                  "params": [
                    {
                      "label": "",
                      "key": "allContent",
                      "value": "true"
                    }
                  ],
                  "tableColumnFields": [],
                  "dataField": "",
                  "bodyParams": null,
                  "labelField": "sourceTypeLabel,associationTypeLabel",
                  "valueField": "sourceTypeLabel",
                  "dataFilters": [],
                  "url": "/api/pm/workitem-association-type",
                  "enumData": []
                },
                "multiple": false
              },
              "key": "1709624025000_18771",
              "model": "select_1709624025000_18771",
              "rules": []
            },
            {
              "type": "WorkitemTarget",
              "icon": "el-icon-s-help",
              "attrDefLabel": "关联工作项",
              "attrDefName": "targetWorkitemId",
              "options": {
                "required": false,
                "placeholder": "--",
                "class": "auto-hide-border w-100p",
                "showLabel": true,
                "labelWidth": "",
                "clearable": true,
                "valueProvider": {
                  "workitemTypeIds": ""
                },
                "targetworkitemRanage": "only"
              },
              "key": "1710914249000_52641",
              "model": "WorkitemTarget_1710914249000_52641",
              "rules": []
            },
            {
              "type": "switch",
              "icon": "icon-switch",
              "attrDefLabel": "创建双向链接",
              "attrDefName": "createReverse",
              "defaultValue": true,
              "options": {
                "size": "mini",
                "labelWidth": "",
                "showLabel": true,
                "width": "100%",
                "placeholder": "",
                "pattern": "",
                "disabled": false,
                "clearable": true,
                "checkRules": [],
                "customCheckRules": [],
                "class": "",
                "style": "",
                "event": "",
                "required": false,
                "readonly": null,
                "tip": "开启创建反向关联"
              },
              "key": "1709625392000_19458",
              "model": "switch_1709625392000_19458",
              "rules": []
            }
          ]
        }
      ],
      "options": {
        "gutter": 10,
        "justify": "start",
        "align": "top",
        "class": "",
        "visible": ""
      },
      "key": "1602234554000_51594",
      "model": "grid_1602234554000_51594",
      "rules": []
    },
    {
      "type": "WorkitemUpload",
      "icon": "icon-upload",
      "attrDefLabel": "附件",
      "attrDefName": "attachments",
      "options": {
        "special": true,
        "showLabel": false,
        "labelWidth": "",
        "readonly": false,
        "required": false,
        "showVersionSelect": true,
        "class": ""
      },
      "key": "1693299242000_36489",
      "model": "WorkitemUpload_1693299242000_36489",
      "rules": []
    },
    {
      "type": "editor",
      "icon": "icon-fuwenbenkuang",
      "attrDefLabel": "描述",
      "attrDefName": "description",
      "options": {
        "showLabel": true,
        "labelWidth": "",
        "defaultValue": "",
        "required": false,
        "readonly": false,
        "width": ""
      },
      "key": "1693299257000_67511",
      "model": "editor_1693299257000_67511",
      "rules": []
    },
    {
      "type": "editor",
      "icon": "icon-fuwenbenkuang",
      "attrDefLabel": "环境描述",
      "attrDefName": "envDesc",
      "options": {
        "showLabel": true,
        "labelWidth": "",
        "defaultValue": "",
        "required": false,
        "readonly": false,
        "width": ""
      },
      "key": "1705287386000_46354",
      "model": "editor_1705287386000_46354",
      "rules": []
    }
  ],
  "options": {
    "labelWidth": "100px",
    "labelPosition": "right",
    "labelSuffix": ""
  }
}

加上页面后需要通过工作项方案新建页面选择该页面,并在新建的后处理实现关联工作项信息的入库。

配置工作项方案

新建的后处理groovy脚本示例如下:

try {
    // 创建工作项关联工作项信息
    if (formData.targetWorkitemId != null && formData.associationType != null) {
        def rWorkitemWorkitem = com.primeton.devops.specs.model.pm.RWorkitemWorkitem.FACTORY.create()
        rWorkitemWorkitem.sourceWorkitemId = workitem.workitemId
        rWorkitemWorkitem.associationType = formData.associationType
        rWorkitemWorkitem.targetWorkitemId = formData.targetWorkitemId
        rWorkitemWorkitem.createReverse = formData.createReverse==true?true:false
        helper.getSpringBean("com.primeton.devops.pm.service.RWorkitemWorkitemService").createRWorkitemWorkitem(rWorkitemWorkitem)
    }
} catch(Exception ex){
    throw new Exception("关联工作项报错", ex)
}

← 历史数据清理说明 raw类型库dt扫描配置 →