当下软件发展趋势

当今 IT 行业发展中比较流行的几个技术,首先是微服务化,将原有的一个系统拆分成多个,意味着有多个系统需要构建、测试、部署和运维。

第二个是敏捷开发模式,需求粒度更细化,要求一个可独立部署单元快速开发、快速测试、快速部署上线,实现快速迭代。

还有一个就是容器化,随着容器技术的快速发展,越来越多的应用迁移到了容器上。

这时候就会出现一些问题,如果当下软件交付继续使用传统模式,就会需要花费大量的人力物力,同时有大量的重复部署任务,且交付无法做到快速型。那么有没有一种更好的交付方式满足当下的软件发展趋势呢?答案肯定是有的,正是在这样的背景下,DevOps 横空出世。

DevOps 简介及特点

DevOps 是 Development 和 Operations 的组合,即开发、运维一体化。通俗地来说就是通过一系列工具及制定一些规范,尽可能地实现软件交付自动化,同时保障软件交付质量。

DevOps 总得来说有以下几大特点,首先是自动化,通过引入一些列工具,实现从需求到上线整个交付工程自动化,必要环节进行人工确认。

第二点是规范化,单有工具是不行的,需要一系列的规范支撑,比如版本管理规范、测试管理、测试数据管理等。

第三点是缩短交付周期,交付过程基本是一键式或者全自动,省去了中间不必要的环节,缩短了交付周期。

第四点是交付质量有保证,交付过程中可以引入静态代码扫描、单元测试、接口测试等环节,并对每个环节设置质量门槛,降低了生产出现 bug 的概率,真正做到了防患于未然。

基于以上四个特点,我们整个产品有了相应的提升,交付过程自动化解放了劳动力,又保障了交付质量,自然会带来更大的收益。

工具集选型

版本控制系统

版本控制系统(VCS)也叫源代码管理系统,顾名思义,提供最基本的版本控制功能,他会在文件修改的历程中保留修改历史,让用户可以方便地查看该文件的修改历史。并且可以方便地让用户撤销对文件的修改。

目前业界使用比较广的版本控制系统主要有两个,首先是 SVN,它是一个开放源代码的版本控制系统,基于 CVS 发展而来,用于多个人共同开发同一个项目,共用资源。简单、上手快,易操作,但是无法实现分支管理,比较依赖网络。

第二个是 GIT,它是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目,作为一个开源的分布式版本控制系统,可以有效、高速地处理各种项目版本管理,可以实现很好的分支管理。

持续集成

持续集成这一块也给大家介绍一款常见的工具——Jenkins,相信很多小伙伴都使用过,它是一个开源自动化服务器,作为一个可扩展的自动化服务器,Jenkins 可以用作简单的 Cl 服务器,或者变成任何项目的持续交付中心。它的社区非常活跃,插件也较为齐全,可以集成打通需求管理、版本管理系统等。

持续测试

持续测试这块我们会有一个测试分层,分为单元测试、接口测试、联调测试。单元测试是方法级的测试,开发同事需要针对源码编写测试类,目的是为了验证功能代码是否有问题,可以使用 junit+jmock 实现,对接到 pipeline。

接口测试是针对外暴露的接口或者为本系统提供服务的方法进行测试,需要编写测试案例,可以将 Jmeter 集成到 Jenkins 上实现接口自动化测试 及结果收集。

而联调测试是指系统间连通性测试,需要人工介入。

持续部署

我们部署的东西不仅仅只涉及到应用部署包,还会牵扯到一些配置文件以及数据库脚本。配置文件在大多数情况下是与环境进行绑定的,每套环境使用一套配置文件,需要对配置文件做统一管理,发布时选择对应文件或者动态替换。

数据库脚本需要将 SQL 变更文件纳入到版本管理系统中,发版时增量执行变更 SQL。

持续集成将构建包推送到制品库中按照一定规范管理起来,部署时从制品库中拉取对应版本的应用包部署。应用可能部署到物理机,有可能是虚拟机、私有云或公有云。

分支策略方案

在整个交付环节中,版本控制是最重要的一块,而版本控制又跟分支策略有关。如果前期分支策略做得不好的话,后期的版本控制肯定是很糟糕的。只有前面做好了,后面才有做好的可能。

分支管理的必要性

这里相信小伙伴们都会有一定的了解,分支管理可以帮助我们避免代码的丢失,如果没有合理的分支管理,在某个功能还没有开发完,代码推送到远程会影响其他功能,如果不推送到远程仓库中,本地数据丢失会导致代码丢失。

同时,分支管理还可以提高代码质量。设置分支权限后,feature 分支向主干分合并需要 master 角色 review 评审,保障了主干分支代码质量。

最后,随着软件的迭代,版本号也随着变更,为了追溯每个版本的需求、变更集及线上 bug 修改,需要设计合理的分支策略并管理到需求和部署包。

合理分支策略的特点

首先,合理分支策略肯定要符合业务场景。没有最好的,只有合适的,设计符合自己业务场景的分支策略还是最关键的。

第二,分支层次结构清晰。清晰的分支层次结构能更好地体现每个分支的功能。

第三,避免形式主义。不应该为了做分支管理而设计多层而设计多层分支,导致一次提交需要多次合并,失去了高效支付效果。

最后是权限控制,需要对主干分支设置相应权限,只有指定人员才有权限合并,提高代码质量。

Pipeline 简介

所有的交付过程都是基于 pipeline 做的,pipeline 俗称流水线,在 Jenkins 中也被称为 job,多个构建单元组成一条流水线,如代码编译、单元测试、代码扫描组成一条 pipeline。编排一个 pipeline 有两种方式:在 Jenkins 界面配置化实现以及编写 Jenkinsfile 文件来实现环节的编排。

我们主要推荐用 Jenkinsfile 进行编排,因为在当前的业务场景下,我们的建议是“一切配置皆代码”,这样能保证我们的所有配置是代码化的,即使我们的 Jenkins 服务器挂掉了或者被人删掉了,我们的 Jenkinsfile 也能存放在源代码管理系统中。

Jenkinsfile 是 Jenkins 可识别的脚本文件,以代码的形式将所有的构建步骤按照一定的语法写入到该文件中,创建 pipeline 是指定该文件路径。

我们将在完整视频中,继续为大家带来几种场景下的分支策略,以及 Pipeline 的设计、度量、反馈。点击观看完整视频。

CODING DevOps 系列第一课:基于开源工具链打造持续交付平台的更多相关文章

  1. 【云计算】Netflix 开源持续交付平台 Spinnaker

    oschina        发布于: 2015年11月19日 (0评)          分享到:    收藏 +1 CDS首都在线全球云主机.全球私有网络,开工送礼,免费试用! »   日前,Ne ...

  2. CODING DevOps 微服务项目实战系列第一课,明天等你

    CODING DevOps 微服务项目实战系列第一课<DevOps 微服务项目实战:DevOps 初体验>将由 CODING DevOps 开发工程师 王宽老师 向大家介绍 DevOps ...

  3. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2

    基于Kubernetes/K8S构建Jenkins持续集成平台(上)-2 Kubernetes实现Master-Slave分布式构建方案 传统Jenkins的Master-Slave方案的缺陷 Mas ...

  4. 基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1

    基于Kubernetes/K8S构建Jenkins持续集成平台(上)-1 Jenkins的Master-Slave分布式构建 什么是Master-Slave分布式构建 Jenkins的Master-S ...

  5. 基于Kubernetes/K8S构建Jenkins持续集成平台(下)

    基于Kubernetes/K8S构建Jenkins持续集成平台(下) Jenkins-Master-Slave架构图回顾: 安装和配置NFS NFS简介 NFS(Network File System ...

  6. CODING DevOps 代码质量实战系列第一课:代码规范与 Git Flow

    讲师介绍 杨周 CODING DevOps 架构师 CODING 布道师 连续创业者.DIY/Linux 玩家.知乎小 V,曾在创新工场.百度担任后端开发.十余年一线研发和带队经验,经历了 ToB.T ...

  7. CODING DevOps 系列第三课:云计算、云原生模式下 DevOps 的建设

    本文首先会和大家分享当前整个应用生命周期的演变历程,然后讲解云计算模式下 DevOps 建设包含的过程.流程规范和标准,最后讲解云原生时代到来会带来哪些改变,以及标准化的建设会有哪些改变和突破. 应用 ...

  8. CODING DevOps 系列第五课:微服务测试——微服务下展开体系化的微服务测试

    微服务测试的痛点与挑战 这张图可以形象地展示单体服务和微服务的对比,单体应用就像左边巨大的集装箱,软件模块和应用都包括其中:而微服务就像是由一个小集装箱组成,微小的服务组成一个庞大.完整的系统.单体服 ...

  9. DIY FRDM-KL25Z开发环境 -- 基于GNU工具链

    IDE大行其道的今天,一键make极大的便利了开发的同时,也每每让各种半路出家的猿们遇到工具链的问题感到束手无策(不就是说自己嘛?^_^!!!).也玩过不少板子了,始终没去深究工具链方面的问题,对于嵌 ...

随机推荐

  1. Java中异常分类和Throw和Throws的区别

    Java中异常分类和Throw和Throws的区别 1.异常分类 Throwable是Java中所有错误和异常的超类.它的下一级是Error和Exception 1.1 Error(错误) Error ...

  2. web自动化之键盘操作

    简单介绍下web自动化怎么触发键盘操作 按键操作 需要导入的类from selenium.webdriver.common.keys import Keys 组合键Keys.CONTROL 也就是我们 ...

  3. TopK (MinK) 实现

    概述:基于快排原理找到最小的K个元素,属于Top K问题.注意,使用快排原理找前K小问题不需要对整个数组进行O(nlogn)的排序.我们只要找K所在的区间进行递归调用,即每次只要对数据的一半进行递归调 ...

  4. [PHP学习教程 - 文件]002.修改上传文件大小限制(File Upload Limit)

    引言:通常大家直装xampp之后,默认的文件上传大小应该被设定成2M左右,这个时候如果上传超过2M的东西,就会报错,让人非常尴尬.如何修改呢? 导航索引: 概念 FTP常用API FTP封装类 其他 ...

  5. SD.Team颜色代码大全

    EEEEEE FFCCFF FF66FF FF00FF DDDDDD FFCCCC FF66CC FF00CC CCCCCC FFCC99 FF6699 FF0099 BBBBBB FFCC66 FF ...

  6. [JavaWeb基础] 010.Struts2 下载文件

    在web开发中,我们经常会有文件的上传下载功能,上一篇的介绍中我们讲解了上传功能,那么这次我们来讲讲下载功能. 1.首先我们需要有一个用于处理下载的测试页面,也就是jsp. <body> ...

  7. Verilog - ABS代码重构

    https://mp.weixin.qq.com/s/-KUviTzO3Hdir_mI57L24g 从形式和语义两个层面,来扣一下ABS这段代码. 目的在于:在不降低通用性.不增加复杂度的情况下,提升 ...

  8. Mysql安装与设置用户名、密码

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 关于MySQL程序中数据库调度的流程图解: ​ 1-MySql数据库的安装 ​ 安装前要注意,看看当前系 ...

  9. Java实现 LeetCode 713 乘积小于K的子数组(子集数量+双指针)

    713. 乘积小于K的子数组 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2,6], k = 100 输出: 8 解 ...

  10. Java实现 LeetCode 679 24 点游戏(递归)

    679. 24 点游戏 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: ...