文档首页/ 流水线 CodeArts Pipeline/ 最佳实践/ 通过流水线自定义插件把控发版时间
更新时间: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:创建自定义插件

  1. 登录华为云控制台页面
  2. 单击页面左上角,在服务列表中选择“开发与运维 > 流水线 CodeArts Pipeline”。
  3. 单击“立即使用”,进入流水线服务首页。
  4. 单击顶部导航栏“服务”,在下拉框中选择“扩展插件”,单击进入“扩展插件”页面。
  5. 单击,进入“基本信息”页面,参考表1填写基本信息。

    表1 自定义插件基本信息

    配置项

    取值样例

    参数说明

    图标

    -

    插件封面图,不上传将会自动生成系统图标。支持PNG、JPEG、JPG格式,文件大小不超过512KB,建议128*128px。

    名称

    Release Time Control

    插件在插件市场和流水线显示的名称。仅支持空格、中文、大小写英文字母、数字、“-”、“_”、“.”,长度不超过50字符。

    唯一标识

    ReleaseTimeControl

    插件的唯一标识,设置后不可修改。

    插件类型

    通用

    插件的类型。支持构建、代码检查、测试、部署、通用共5种类型,设置后不可修改。

    插件描述

    -

    描述插件使用方法。

  6. 配置完基本信息后,单击“下一步”,进入“版本信息”页面,使用默认版本号。
  7. 单击“下一步”,进入“输入配置”页面。从左侧组件库拖拽“单行输入”组件到画布中,参考表2配置组件信息。

    表2 组件信息

    配置项类别

    配置项

    说明

    基本

    唯一标识

    输入“safe_release_time”。

    组件标题

    输入“安全发版时间”。

    提示信息

    输入“24小时制,最早可发版的时间,例如193000,表示最早可发版的时间为19:30:00”。

    预设提示语

    输入“24小时制,最早可发版的时间,例如193000”。

    校验

    必填

    开启。

    正则校验

    输入“^\d{6}$”。

  8. 单击“下一步”,进入“插件编排”页面,将鼠标移至“执行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

  9. 单击“下一步”,进入“输出信息”页面。单击“新增配置”,参考表3填写基本信息。

    表3 输出配置信息

    配置项

    取值样例

    参数说明

    标识

    ALLOW_RELEASE

    对应脚本里的输出,通过标识解析输出变量。

    类型

    metric

    metric类型的输出在任务结果页面的“其他”卡片展示,可用于输出指标解析,输出信息可以在规则中通过该插件进行引用,并最终应用到流水线。

    描述

    是否可以发版

    描述会在配置规则时,展示在阈值配置的检查项。

    分组名称

    发版时间

    类别名称。

  10. 单击右上角“发布草稿”,弹出“插件发布草稿信息确认”弹窗,单击“发布草稿”。
  11. 跳转至所创建插件的“版本管理”页面,单击,将草稿正式发布。

步骤2:创建自定义插件对应的规则与策略

  1. 单击右上角头像图标,在下拉菜单中选择“租户设置”,进入租户设置页面。
  2. 在左侧导航栏选择“策略管理 > 规则”,进入规则管理页面。
  3. 单击“新建规则”,进入“新建规则”页面,参考下图填写规则配置信息。

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

  7. 单击“确定”,弹出“创建策略成功”提示,完成策略的创建。

步骤3:在流水线内使用自定义插件与准出策略

  1. 单击顶部导航栏“首页”,返回软件开发生产线首页。
  2. 找到准备工作中已创建的项目,单击项目名称,进入项目。
  3. 在左侧导航栏中单击“持续交付 > 流水线”,进入项目下流水线列表页面。
  4. 找到准备工作中已创建好的流水线,单击,单击“编辑”,进入“任务编排”页面。
  5. 单击“阶段_1”的“新建任务”,搜索并选择步骤1所创建的“Release Time Control”插件,填写插件信息,单击“确定”。

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