第一篇。

版本迭代是每一个互联网公司必须经历的,尤其是中小型公司,相信不少人踩到过很多坑。接下来的一系列文章将介绍我设计的自动化发版系统!

很多公司没有把配置独立出去,代码的构建、发版通过一个Jenkins job实现,我认为这样很不好。弊端如下:

  • 如果你有N个环境,你将会有N次编译、N次配置、产生N个包、发布N次......;
  • 配置变更困难,可读性比较差;
  • 版本发布总体时间长等等。

事实上我们需要:

  • 一次构建多次发布;
  • 具备包仓库,长期存储并备份成品包;
  • 具备配置管理系统,实现集中管理配置且维护简单;
  • 具备基本的回滚(备份)机制。

我的解决方案是:紧紧围绕Jenkins+Gitlab+Ansible建设发版系统,通过Jenkins框架集成Gitlab、Ansible、sonar等第三方重要服务,同时引入配置管理系统(百度开源的Disconf),引入成品包仓库(通过nginx+samba实现),再通过Ansible调度发布及回滚脚本。

大致流程如下图所示:

说明:

  • Jenkins时刻监听Gitlab代码变化,当有研发人员向Gitlab提交代码时,Jenkins会自动触发构建、编译并打包;
  • 再通过shell脚本自动将打好的包上传到成品包仓库;
  • 发版人员从成品包仓库选取要发版的包上传到Jenkins发布job,执行一键发布;
  • 业务代码在启动过程中会自动从Disconf系统中拉取配置完成配置并成功启动。
  • 整个流程看起来通俗易懂,但要注意一些关键点要具备提高可用性,比如:构建及发布任务要做成集群、要具备回滚机制等等。下面请看详细的工作流程图:

说明:

  • 整个CICD最关键部分由Jenkins构成,Jenkins在这里主要充当平台作用,Jenkins由master/slave节点组成,master负责调度各个slave节点,真正干活的是各个slave节点。在这里,CI部分由2个jenkins slave节点组成,CD部分由2个Jenkins slave节点组成,CI与CD节点复用以高效利用资源;
  • 当Gitlab有代码变动时,Jenkins CI节点会自动触发构建、编译并打包,然后将打好的包自动上传到成品包仓库;
  • 成品包仓库主要由samba充当,发版人员可以添加samba磁盘映射到自己电脑上,发版的时候可以从samba仓库上选取要发版的包上传到Jenkins CD任务上;
  • 通常测试环境与生产环境网络是物理隔开的。如果要发版测试环境,则Jenkins会调用内网Ansible服务,Ansible调用相关发布脚本实现发版,在发版过程中,代码服务会自动从测试环境Disconf下载并加载配置完成配置;同理,生产环境发版也是同样的流程。

值得一提的是,这套发版系统在投入使用之前需要做一些标准化操作,比如:代码包命名如何规范,CI/CD任务名称如何规范,成品包仓库中的包路径如何定义,代码配置如何独立等等,免不了一些沟通协调。总体感觉:自动化不难,“难的”是标准化的规划及落地。

在稍后的几篇文章中我将持续更新,努力将每一步都3D式的呈现在大家面前。

敬请期待~

CICD自动化发版系统设计简介的更多相关文章

  1. CI/CD自动化发版系统设计简介

    转载自:https://www.cnblogs.com/wellful/archive/2004/01/13/10604151.html 版本迭代是每一个互联网公司必须经历的,尤其是中小型公司,相信不 ...

  2. 基于travis和git tag 实现npm自动化发版

    最近又把烂尾的开源项目alfred-femine拾起来了,这个项目旨在开发一系列前端常用的alfred workflow,提供前端开发的查询效率.时隔这么久,再次搞起,希望自己能够一直维护下去,也欢迎 ...

  3. jenkins中通过git发版操作记录

    之前说到的jenkins自动化构建发版是通过svn方式,今天这里介绍下通过git方式发本的操作记录. 一.不管是通过svn发版还是git发版,都要首先下载svn或git插件.登陆jenkins,依次点 ...

  4. java生产环境增量发版陷阱【原】

    前言 在生产环境,我们为了降低发版风险,一般都只做增量发布,不做全量发布. 除非项目只有一到两人开发,对时间线和代码脉络结构一清二楚,才可全量发布. 然而增量发布也是有一定隐藏陷阱在里面的,以下就是笔 ...

  5. 阿里云移动研发平台 EMAS 助力银行业打造测试中台,提升发版效能

    随着移动互联网的发展,手机银行凭借低成本.操作简单.不受时间空间约束等优势,正逐步替代传统的网银交易方式.越来越多的银行开始了“业务移动化”转型之路,“手机APP”已经成为企业价值传递和关系维护的关键 ...

  6. Jenkins获取发版人的人名

    目录 一.简介 二.自由风格使用 三.pipeline使用 脚本式 声明式 一.简介 Jenkins在构建记录中,是可以看到谁点的构建的,但pipeline中的全局变量,默认是不支持获取当前构建任务的 ...

  7. 使用 shell 脚本自动获取发版指标数据

    问题背景 大一点的公司都会建立一套规章流程来避免低级错误,例如合入代码前必需经过同行评审:上线前必需提测且通过 QA 验证:全量前必需经过 1%.5%.10%.20%.50% 的灰度过程.尤其是最后一 ...

  8. AEAI Portal V3.5.2门户集成平台发版说明

    AEAI Portal门户集成平台为数通畅联的核心产品,本着分享传递的理念,数通畅联将Portal_server.Portal_portlet两个项目开源,目的在于满足客户与伙伴的OEM需求,以及为广 ...

  9. php 7 正式发版

    php 7 正式发版 php 在 2015年 12月 3 日 正式发布了 php7 以下是php7的新特性 性能是php5.6的2倍 显著的减少了内存的使用 抽象语法书 64位的支持 提高了异常层次 ...

随机推荐

  1. loj 3090 「BJOI2019」勘破神机 - 数学

    题目传送门 传送门 题目大意 设$F_{n}$表示用$1\times 2$的骨牌填$2\times n$的网格的方案数,设$G_{n}$$表示用$1\times 2$的骨牌填$3\times n$的网 ...

  2. npm --save-dev --save | -D -S区别

    -S就是--save的简写,就行npm默认一个start的字段,你可以不必输入npm run start 而只需输入npm start,这两个效果是一样的.-D就是--save-dev 这样安装的包的 ...

  3. LEETCODE 07 09

    最近忙着面试耽误了几天,今天刷了07,09都是字符串处理,一个是大数反转,一个是回文数判断,我都是转成字符串处理的,过了是过了,但是挺慢的,先记着,等有机会优化下 题目 给定一个 32 位有符号整数, ...

  4. 解决IE11安装时需要“获取更新”(IE11离线安装)

    方法一:说明:目前是针对Windows7 64位操作系统安装! 1. 在C盘下新建文件夹,取名为“IE11”. 2. 将官网下载的IE11离线包放到此文件夹中. 3. win + r 打开运行窗口,输 ...

  5. Java JDK下载、安装和验证

    1.JDK下载地址: http://www.oracle.com/technetwork/java/javase/downloads/index.html,点开链接看到如下图所示的界面: 2.点击上图 ...

  6. ElasticSearch改造研报查询实践

    背景: 1,系统简介:通过人工解读研报然后获取并录入研报分类及摘要等信息,系统通过摘要等信息来获得该研报的URI 2,现有实现:老系统使用MSSQL存储摘要等信息,并将不同的关键字分解为不同字段来提供 ...

  7. Django细节小记

    前记:Django的ORM.模块有很多函数细节,要学会多看文档学习函数的细节 聚合annotate()和aggregate()的使用 简言之,annotate()得到的是查询集,类似all(),只不过 ...

  8. java,桶排序,冒泡排序,快速排序

    1.桶排序: 百度百科:桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排 ...

  9. 论文笔记(Filter Pruning via Geometric Median for Deep Convolutional Neural Networks Acceleration)

    这是CVPR 2019的一篇oral. 预备知识点:Geometric median 几何中位数 \begin{equation}\underset{y \in \mathbb{R}^{n}}{\ar ...

  10. random froest 调参

    https://blog.csdn.net/wf592523813/article/details/86382037 https://blog.csdn.net/xiayto/article/deta ...