更新时间:2025-11-26 GMT+08:00
通过流水线自定义插件把控发版时间
方案概述
自定义插件是流水线中用于实现特定业务逻辑的模块,通过定义输入、脚本、输出,将处理业务逻辑的过程封装为插件,方便在流水线内复用。流水线提供了许多官方插件供用户使用,同时也允许用户配置满足个性化新需求场景的自定义插件。本文介绍如何创建一个图形化自定义插件,用于把控发版时间,并介绍自定义插件内如何使用参数、如何定义和使用输入与输出,结合规则与策略将输出结果用于流水线准出条件。
流水线门禁是指在流水线执行过程中设置的检查点,用于确保只有满足特定条件的情况下,流水线才能继续执行。本文中创建的自定义插件通过与流水线门禁结合,实现对发版时间的控制,即如果手动执行本插件的时间早于安全发版时间,则门禁不通过。
准备工作
- 已开通并授权使用CodeArts Pipeline。
- 已通过统一身份认证服务配置“CloudPipeline Tenant Rules FullAccess”、“CloudPipeline Tenant Rule Templates FullAccess”和“CloudPipeline Tenant Extensions FullAccess”系统策略。配置操作可参考委托其他云服务管理资源。
- 新建项目(选择“Scrum”模板,命名为“Project_Test”)。
- 新建代码仓库(选择“Java Maven Demo”模板,命名为“Repo_Test”)。
- 基于已创建的代码仓库新建流水线(模板选择“空模板”,命名为“Pipeline-Test”)。
步骤1:创建自定义插件
- 登录华为云控制台页面。
- 单击页面左上角
,在服务列表中选择“开发与运维 > 流水线 CodeArts Pipeline”。 - 单击“立即使用”,进入流水线服务首页。
- 单击顶部导航栏“服务”,在下拉框中选择“扩展插件”,单击进入“扩展插件”页面。
- 单击
,进入“基本信息”页面,参考表1填写基本信息。
- 配置完基本信息后,单击“下一步”,进入“版本信息”页面,使用默认版本号。
- 单击“下一步”,进入“输入配置”页面。从左侧组件库拖拽“单行输入”组件到画布中,参考表2配置组件信息。
- 单击“下一步”,进入“插件编排”页面,将鼠标移至“执行shell”插件,单击“添加”。根据以下示例,输入shell命令,生成标签名称。
# 提取安全时间的小时、分钟、秒 safe_hour="${safe_release_time:0:2}" safe_minute="${safe_release_time:2:2}" safe_second="${safe_release_time:4:2}" # 验证时间有效性 if [[ "$safe_hour" -gt 23 || "$safe_minute" -gt 59 || "$safe_second" -gt 59 ]]; then echo "错误:safe_time 包含无效的时间值" echo "ALLOW_RELEASE=false" exit 1 fi # 获取当前时间(24小时制) current_time=$(date +%H%M%S) current_hour=$(date +%H) current_minute=$(date +%M) current_second=$(date +%S) echo "当前时间: $current_time" echo "安全时间: $safe_time" # PIPELINE_TRIGGER_TYPE 为系统预定义变量 echo "流水线触发类型: $PIPELINE_TRIGGER_TYPE" # 判断逻辑 if [[ "$PIPELINE_TRIGGER_TYPE" != "Manual" ]]; then # 自动触发 - 直接允许发版 echo "自动触发模式,允许发版" ALLOW_RELEASE="true" else echo "手动触发模式,检查当前时间是否在安全发版时间之后..." # 将时间转换为秒数进行比较 current_total_seconds=$((10#$current_hour * 3600 + 10#$current_minute * 60 + 10#$current_second)) safe_total_seconds=$((10#$safe_hour * 3600 + 10#$safe_minute * 60 + 10#$safe_second)) if [[ $current_total_seconds -ge $safe_total_seconds ]]; then echo "检查通过:当前时间已到达安全发版时间,允许发版" ALLOW_RELEASE="true" else echo "检查不通过:当前时间未到达安全发版时间,禁止发版" ALLOW_RELEASE="false" fi fi echo "ALLOW_RELEASE=$ALLOW_RELEASE" #将结果输出到插件的任务门禁输出 echo ::set-metrics var=ALLOW_RELEASE:$ALLOW_RELEASE - 单击“下一步”,进入“输出信息”页面。单击“新增配置”,参考表3填写基本信息。
- 单击右上角“发布草稿”,弹出“插件发布草稿信息确认”弹窗,单击“发布草稿”。
- 跳转至所创建插件的“版本管理”页面,单击
,将草稿正式发布。
步骤2:创建自定义插件对应的规则与策略
- 单击右上角头像图标,在下拉菜单中选择“租户设置”,进入租户设置页面。
- 在左侧导航栏选择“策略管理 > 规则”,进入规则管理页面。
- 单击“新建规则”,进入“新建规则”页面,参考下图填写规则配置信息。

- 单击“确定”,弹出“创建规则成功”提示,完成规则的创建。
- 单击左侧导航栏“策略管理 > 策略”,进入策略列表页面。
- 单击“新建策略”,进入“新建策略”页面,参考下图填写策略配置信息。

- 单击“确定”,弹出“创建策略成功”提示,完成策略的创建。
步骤3:在流水线内使用自定义插件与准出策略
- 单击顶部导航栏“首页”,返回软件开发生产线首页。
- 找到准备工作中已创建的项目,单击项目名称,进入项目。
- 在左侧导航栏中单击“持续交付 > 流水线”,进入项目下流水线列表页面。
- 找到准备工作中已创建好的流水线,单击
,单击“编辑”,进入“任务编排”页面。 - 单击“阶段_1”的“新建任务”,搜索并选择步骤1所创建的“Release Time Control”插件,填写插件信息,单击“确定”。

- 单击“阶段_1”下的“准出条件”,弹出“准出条件”侧滑框,将鼠标移动到标准策略准出条件卡片,单击“添加”。
- 选择步骤3所创建的策略,单击“确定”。
- 单击“保存并执行”,弹出“执行配置”弹窗,保持默认配置,单击“执行”。
- 完成对自定义插件与策略的执行结果的验证。
