资讯专栏INFORMATION COLUMN

一篇文章带你了解如何用Planting 为测试工程师开发的部署框架

yiliang / 690人阅读

摘要:是一个为测试工程师开发的部署框架,使用语言编写,为了解决测试团队在测试过程中的部署问题。部署执行方式简单,支持命令行与自动化测试可紧密合作作为一个为测试工程师开发的部署框架,通过命令行进行自动化部署是第一选择。

Planting 是一个为测试工程师开发的部署框架,使用 python 语言编写,为了解决测试团队在测试过程中的部署问题。作为一个测试工程师你是不是也遇到过以下问题:

手动部署花费时间长,配置容易出错、遗漏问题

多集群多节点配置参数不一致,相互依赖问题

持续集成 CI 中的部署自动化问题

多产品线部署需求问题

多平台的部署自动化方案

复杂部署过程中的失败重试问题

降低一个新产品的部署工具开发的代价

部署工具的开发协作与分享问题

Planting 对部署的理解与设计

这里对部署的理解与设计,主要针对目前的公司产品形态以及部署需求。如果有更多需求,Planting 完全可以进一步开发进行扩展和定制。
部署必然包含两部分,部署工具与被控设备(系统)。这里的被控设备(系统)常见的有各种操作系统 Linux、 Windows、 MacOS, 移动端有 iOS 和 Android 等,不常见的比如嵌入式系统等。被控设备(系统)还包括部署过程中涉及到的一些系统,比如各种软件仓库(Nexus, Artifactory 等)。

部署工具如果需要多产品线开发协作与分享,使用核心框架与插件配合的方式,是我们认为最合适的方式。

核心框架包括了远程控制接口层以及在其上的底层核心功能库(常见部署功能模块,配置管理模块,软件仓库管理模块等)。远程控制接口层可以包含或复用各种远程控制模块比如 ansible 远程控制模块,python 语言的 paramiko、fabric 库,移动端 Android 可以是 adb, iOS 可以是 iOSShell。远程控制接口层可以根据需要进行定制和扩充。底层核心功能库的常见功能模块需要包含各种最基本的部署操作或者部署操作的组合,比如创建目录,下载文件,解压文件。具体实现可以复用像 Ansible 这类工具的功能模块,减少重复造轮子。当然也可以自己编写各种功能模块。配置模块包含命令行参数配置与框架配置,来保证整个部署可以灵活控制调整。

插件是一个软件(系统)部署功能的具体实现。从逻辑概念上抽象出了部署模式(Mode),部署步骤(Stage),部署操作(Action)等概念。这些概念是对一个部署功能的分层抽象。

进一步举例介绍模式(Mode)、步骤(Stage)和 操作(Action)的关系:

一个软件的部署模式有直接部署和升级部署以及扩展部署等多种模式。每种部署模式又会包含多个步骤,所有步骤执行成功代表部署成功。每个部署步骤又由一个或多个部署操作组合在一起。部署操作一般是粒度比较小的一个执行操作,但一般并不是最小粒度的操作。正常来说部署执行的过程因为网络,软件配置等问题总会有执行失败的情况,需要提供一种重试机制,减少复杂部署不必要的重复执行开销。选择在部署 Stage 这一粒度上进行重试,被认为是一种合适的策略。

再来看操作(Action)和功能模块 (Module)的关系:

Action 操作可以由一个或多个不同的功能模块组成。每个功能模块(Module)一般被认为是一个不能继续拆分的执行。所有基本的功能模块应该存在于部署框架当中,而最常用到的 Action 也应该由核心的框架层提供,以方便所有插件共同使用。同时插件也可以有自己实现的 Action , 这些 Action 可以方便地在引用它的插件中使用,达到共享的目的。

Planting 部署实现架构

Planting 核心框架可以简单划分为两部分,插件管理模块和插件执行模块。插件管理模块负责管理各种插件,安装、卸载、升级插件,维护整个插件池。插件执行模块对整个软件部署执行过程进行管理。它根据插件配置和框架配置从插件池动态加载插件进行执行。执行的过程就是根据插件配置(模式,各种参数)以及框架配置(被控节点信息,软件仓库地址等)进行部署的过程。执行模块还包含一个观察者角色,其负责对执行状态进行记录。部署重试功能就是通过观察者角色记录的 CheckPoint 来实现。

Planting 软件发布管理

核心框架与所有插件均以 python pip 包的形式保存在公司内网的 pip server 上。每个插件拥有自己的代码库,不同插件开发、调试、发布新版本可以完全隔离。

核心特性

planting 的核心特性概述如下:

提供部署核心框架与一套灵活可扩展的插件体系

部署执行方式简单,支持命令行与自动化测试 CI 可紧密合作

支持脚手架功能,插件上手简单,编写效率高

使用 Ansible 源码,复用 Ansible 优秀特性

部署过程支持失败重试功能

远程控制具有可扩展性,能根据需求增加对新设备的控制

不仅仅是一个部署框架也是一个自动化运维框架

特性拆解

提供部署核心框架与一套灵活可扩展的插件体系

作为一家 AI 创业公司,产品线众多,不可能搞一个大而全的部署工具,维护成本太高。通过核心框架与插件化相结合的思路能够让多产品线部署工具独立开发,完全解耦。对于具有共性的部署问题可以通过框架层解决,不让各个插件重复造轮子。

部署执行方式简单,支持命令行与自动化测试 CI 可紧密合作

作为一个为测试工程师开发的部署框架,通过命令行进行自动化部署是第一选择。命令行能同时满足手动部署以及CI自动化测试前的部署。

支持脚手架功能,插件上手简单,编写效率高

每个部署插件以 python pip 软件包形式发布。为了降低每个产品线开发部署工具的学习成本,比如学习使用 setup 的规范。我们提供了整个框架包括 setup 文件,可以一键打包。同时通过脚手架,我们把目录进行了定制,并实现了一个最简单的部署功能。让插件开发者可以快速模仿并实现自己的部署功能。

使用 Ansible 源码,复用 Ansible 优秀特性

使用 Ansible 源码的方式让我们摆脱了用 yaml 语法来定义部署过程的束缚。Ansible 变成了整个部署框架的一个组件,它可以提供远程控制能力,并发能力。它提供的各种方便的功能模块,减少了我们很多重复造轮子的时间。

部署过程支持失败重试功能

部署过程的失败重试功能往往在部署复杂软件时效果明显,可以节约很多从头重新部署的时间。

远程控制具有可扩展性,能根据需求增加对新设备的控制

在整个部署框架设计之初,我们就考虑了未来可能增加更多需要控制和部署的设备或者系统。因此框架远程控制接口变成可扩展对我们意义重大,在需要的时候随时可以增加或者替换新的远程控制库。

不仅仅是一个部署框架也是一个自动化运维框架

虽然这个工具本身为部署而生,但是其本质是远程控制,远程操作。因此其完全有能力根据需求扩展成一个自动化运维框架。

作为一个过来人,对学习过程中的困难深有体会。所以我热衷于收集整理资源,记录踩坑到爬坑的过程。希望能把自己所学,实际工作中使用的技术、自学方法、心得及踩过的一些坑,记录下来。

更希望想自学的你一样,通过我的分享可以少走一些弯路,可以形成一条自己的体系,并应用到实际中。当然,也真心的希望你们升职加薪,或许这才是最实际的吧。

对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你,如果你用得到的话可以直接拿走:

包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试,面试时面试官必问的知识点,精选简历等。我的QQ技术交流群(技术交流和资源共享,广告勿扰)
可以自助拿走,群号:1125939340 群里的免费资料都是笔者这些年来的·测试生涯的精华。还有同行大神一起交流技术哦

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119658.html

相关文章

  • 带你重新认识 Docker 与 Kubernetes

    摘要:公司始于名为的平台即服务供应商。跨多个机器之间协调这些容器需要额外的工具,这称之为容器编排。的核心优势是为应用程序开发人员提供了用于编排无状态容器的强大工具。有无数的文章都在讨论和比较Docker、Kubernetes 以及Mesos。如果你是初学者,那么你可能会认为这三个开源项目正为了称霸容器界而殊死搏斗。虽然这三种技术都使得使用容器部署、管理和伸缩应用成为可能,但实际上它们各自解决了不同...

    baishancloud 评论0 收藏0
  • 都9102年了,还不会Docker?10分钟带你从入门操作到实战上手

    摘要:联调测试,无需依赖他人。针对以上问题,有两种解决方法,一个是自己搭建私有服务,另一个是用云服务的镜像管理平台如阿里云的容器镜像服务。利用,先对阿里云的服务进行登录。推送后,就能在阿里云的仓库上看到这个镜像。 Docker简述 Docker是一种OS虚拟化技术,是一个开源的应用容器引擎。它可以让开发者将应用打包到一个可移植的容器中,并且该容器可以运行在几乎所有linux系统中(Windo...

    sf_wangchong 评论0 收藏0
  • 前端每周清单第 38 期: Node 9 发布,Kotlin 与 React,Netflix 架构解

    摘要:发布本周正式发布,包含了一系列的特性提升与问题修复,同时也在不断致力于将打造地更为轻巧与高性能。当然,姜振勇老师还会介绍的多种服务,包括大数据网络和安全,展现弹性安全和高可扩展性的全方位能力。 showImg(http://upload-images.jianshu.io/upload_images/1647496-2ce7598e6987d9af.jpg?imageMogr2/aut...

    Carbs 评论0 收藏0
  • 写给前端区块链开发入门指南:零基础开发基于以太坊智能合约 ICO DApp

    摘要:围绕以太坊的开发生态是目前相对最成熟的,比如有开发框架,有智能合约在线集成开发环境,还有专设的开发者问答频道。 showImg(https://segmentfault.com/img/bVbaJOL?w=1200&h=514); 张泉灵说,时代抛弃我们的时候连声再见都不会说,马云说对于新兴事物,绝大多数人是看不见、看不起、看不懂、来不及。自从学完 Coursera 上的 Crypto...

    sean 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<