前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这是一份关于流水线的需求说明书

这是一份关于流水线的需求说明书

作者头像
Antony
发布2024-05-15 17:42:08
550
发布2024-05-15 17:42:08
举报

本文概述了流水线在软件交付过程中的关键作用,包括其能力、类别和自动化操作。流水线将代码变更自动转换为交付物,如制品包和镜像,并内嵌质量控制和合规性检查。文章还强调了流水线编排的重要性,包括可视化、原子化操作、参数管理、模板化和多种触发方式,以及环境管理和性能优化,确保高效、有序的交付流程和高质量的软件交付。

流水线作为软件交付过程中的关键工具,其作用是确保交付流程的高效和有序和交付结果的质量。通过流水线的自动化功能,可以将开发过程中的变更内容转换成最终的交付成果。此外,流水线内嵌了组织的质量控制标准和合规性要求,通过数字化手段对整个流程进行严格管控。

变更内容和交付物

这是流水线的输入和产出。

变更内容

1.待编译的代码:这是流水线的起点,通常包括新编写或修改的源代码。这些代码可能是由开发者提交到版本控制系统(如Git)的分支中。

2.数据库脚本:在软件开发过程中,数据库的变更也是常见的变更内容。这可能包括创建、修改或删除数据库表的SQL脚本。

3.配置项:软件的配置,如环境变量、配置文件等,也是变更的一部分。这些配置项通常用于定义软件在不同环境(如开发、测试、生产)中的运行参数。

4.第二/三方依赖:软件可能依赖于外部库或服务,这些依赖也需要作为变更内容的一部分进行管理。

5.文档:软件的文档,包括用户手册、API文档等,也是变更的一部分,需要与代码同步更新。

交付物

1.制品包和镜像:源代码经过编译和打包,生成可部署的制品包或容器镜像。

2.配置文件:生成或更新用于定义软件在不同环境(如开发、测试、生产)中运行参数的配置文件。

3.部署脚本:创建用于自动化部署软件到目标环境的脚本。

4.测试报告:生成详细的测试报告,记录自动化测试的结果,包括成功和失败的测试用例。

5.文档:更新和生成用户手册、API文档等,以支持软件的使用和维护。

6.监控数据:收集和生成软件运行时的监控数据,用于分析软件的性能和稳定性。

7.质量门禁和合规性报告:内嵌质量控制和合规性检查,生成相应的报告,确保软件交付符合组织的标准和法规要求。

流水线类别

在一次交付过程中,流水线可能存在一条或者多条。

1.代码提交/合并流水线

目的:评估增量代码的质量,为代码评审、准入提供决策支持。

触发器:代码提交或合并请求事件。

主要步骤:代码审查、静态代码分析、编译、单元测试、代码扫描、质量门禁报告,并能按需阻断未达标提交/合并请求的后续流转。通常情况下,除非质量门禁中包含了对制品部署、冒烟测试、回归测试等环节的要求,否则制品生成、上传的环节是可选的。此处要考虑到3个问题

1)防绕过,用户团队可以通过不设置自动触发webhook,或者是mvn skipSonar等方式规避检查。流水线需要通过管理或者技术的手段达到强制触发的要求。

2)门禁的统一性和强制性,也就是说组织级别可以有一个或者多个的门禁要求,如增量代码覆盖率可以根据业务重要性分几个级别,但是处于同一级别内的应用,其增量覆盖率要求只能高于,不能低于组织级的要求。

3)并发扫描问题,如果一个代码提交中包含了多个组件(可能是前后端数据库均有),流水线需要考虑并发进行扫描的问题以提高反馈速度。

2.持续集成流水线

目的:评估增量代码的质量,为代码评审、准入提供决策支持。

触发器:代码提交或合并请求被批准后的事件。

主要步骤:同上+制品构建+ 冒烟测试(可选)

经典的如每日持续集成采用的是此类的流水线。请注意和前一个流水线在触发器上的细节差异。

3.测试流水线

o触发器:开发人员提测。

o主要步骤:部署到测试环境,按需执行集成测试、性能测试、安全扫描扥质量保障活动。

4.发布流水线

o触发器:测试通过并批准发布。

o主要步骤:代码打包、版本控制、构建容器镜像、部署预演、性能监控配置。

5.部署流水线

o触发器:发布审批通过或自动部署设置。

o主要步骤:配置管理、生产环境部署、滚动更新、监控和日志配置、反馈收集。

流水线原子操作能力

流水线的原子操作可以根据软件开发生命周期的不同阶段进行划分。以下是按照开发、测试、发布、交付等阶段分类的原子操作:

开发阶段:代码检出编译代码扫描单元测试质量门禁、制品打包容器镜像构建、容器镜像扫描、制品上传等活动。

测试阶段:又可分为系统测试和验收测试等阶段和多种测试类型。各测试类型的执行也还可能包括环境制备、制品部署、数据准备、用例执行、报告生成、环境还原或者销毁等步骤。

系统测试:可以包括 冒烟测试、集成测试、接口测试、性能和负载测试等可以通过流水线自动化执行的活动。

验收测试: 用户验收测试(UAT):模拟最终用户的操作,确保产品满足用户需求。

发布阶段:包括制品晋级到发布仓、代码分支锁定和标签以及发布门禁报告等活动。

交付(部署上线)阶段:变更审批、预发布、正式上线、滚动上线等活动。

流水线编排能力

流水线(Pipeline)编排是持续集成/持续部署(CI/CD)实践的核心,它定义了从代码提交到产品部署的整个流程。以下是流水线编排能力的一些关键要求:

1)可视化:提供图形化界面,展示流水线的结构和状态。

2)原子化:允许流水线由独立、可复用的原子组件构成,如一个典型的流水线可以分为阶段、任务及任务组、步骤等要素

3)编排管理:支持以有向无环图(DAG)、阶段等方式表达流水线各个任务和步骤之间的前后依赖、分组、串行/并行执行等方式,以及有条件触发、暂停、终止,以实现各种流水线的运行需求,并实现流水线自身的高效运行。

4)参数管理允许在任务、步骤之间传递参数,以及对步骤和任务在流水线执行时的参数化配置,以提升流水线的灵活性,提高流水线的复用度。

5)模板化能力:为应用、组件和典型流水线场景(见前)预先定义好流水线模板,简化创建和维护流水线的过程,并且能将组织级的必须必要的管控措施如质量门禁等动作和要求内置其中,保障措施的落地。

6)触发方式:支持多种触发方式,如定时、Webhook、手工触发等

流水线环境管理

流水线环境是整个持续集成和持续交付服务的基础。环境管理主要涉及到环境的制备、更新、伸缩等,并需要考虑环境的一致性、安全性、隔离性等问题,以确保环境的稳定性、安全性和可维护性,同时支持高效的交付流程。

环境制备

1)构建环境配置实现标准化,例如构建环境的操作系统、编译器、构建工具、依赖管理工具等选型和版本应按照组织的需求形成所支持矩阵,并控制各版本的碎片化倾向。

2)构建环境的环境变量应预先按照基线设置,保证环境制备后即可使用,并应使用受控的配置基线以保证安全性。

3)构建环境应使用预设的专用账户,避免越权风险。

环境更新

1)构建环境应定期或按需更新。应定期检查如操作系统、基础镜像和依赖的安全性更新,并更新构建环境以包含这些更新。

2)应具备构建环境回滚能力,确保新版本出现问题时可以及时回滚。

3)推荐使用GitOps等实践实现构建环境的代码化、版本化管理,以及滚动式更新、回滚等能力。

扩缩容

应实现构建资源的快速、高效的分配与回收,以充分利用资源并快速高效地支撑构建服务。如搭建基于云原生的分布式构建集群来实现实现构建资源动态弹性扩缩容。

流水线性能

快速高效的流水线可以提供提供快速反馈、提高资源利用率、减少等待时间进而让研发人员更高效地工作,避免不必要的浪费,提高流水线的用户的满意度。

流水线应从以下的角度来保证流水线的性能和容量达到设计预期,

1) 并行处理:平台应支持流水线之间、同一流水线内不同任务和步骤之间的并行执行。针对低同一流水线在短时间内重复执行的场景,可通过支持同一流水线并行执行来降低后续执行请求的等待时间。

2) 弹性伸缩:平台应实现弹性伸缩机制,根据负载自动调整资源。

3)合理使用缓存,包括代码、依赖、镜像、编译等缓存的使用,可以显著提高流水线的处理速度,减少等待时间

此外,还应定期进行负载测试,确保流水线能够处理预期的负载,通过性能和容量监控来识别瓶颈。对于部分耗时长的流水线应优化流水线编排、减少不必要步骤、提升步骤并行度、选择更优的工具或方案等方式降低执行耗时。此外,还应对流水线进行容量规划,以适应不断变化的需求。

非功能性要求

安全与合规性

1.安全性:确保流水线的安全性,包括安全的凭据管理和执行过程敏感信息的安全性。

2.权限控制:按需实施访问控制,以保护流水线和相关资源。

反馈与审计

1.日志记录:记录流水线执行的详细日志,便于问题追踪和调试。

2.通知机制:流水线应以多种渠道、多种方式向相关人员发送通知,如邮件、聊天工具等。通知方式包括群发以及点对点等。此外平台应允许用户自行订阅。

3.审计跟踪:平台应记录流水线的变更历史,包括谁、何时、如何进行了修改。平台应能支持回溯流水线行记录、门禁结果等数据且不可更改。

文档与帮助

1.文档支持:提供清晰的文档帮助用户理解和使用流水线。

2.模板和示例:提供常用模板和示例,帮助用户快速开始。

3.用户支持:应提供聊天工具、热线等进行用户支持

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试那些事 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 变更内容和交付物
    • 变更内容
      • 交付物
        • 流水线类别
          • 流水线原子操作能力
            • 流水线编排能力
            • 流水线环境管理
              • 环境制备
                • 环境更新
                  • 扩缩容
                  • 流水线性能
                  • 非功能性要求
                    • 安全与合规性
                      • 反馈与审计
                        • 文档与帮助
                        相关产品与服务
                        腾讯云服务器利旧
                        云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档