转载自:https://www.cnblogs.com/wellful/archive/2004/01/13/10604151.html

版本迭代是每一个互联网公司必须经历的,尤其是中小型公司,相信不少人踩到过很多坑。

很多公司没有把配置独立出去,代码的构建、发版通过一个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任务名称如何规范,成品包仓库中的包路径如何定义,代码配置如何独立等等,免不了一些沟通协调。

总体感觉:自动化不难,“难的”是标准化的规划及落地。

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

  1. CICD自动化发版系统设计简介

    第一篇. 版本迭代是每一个互联网公司必须经历的,尤其是中小型公司,相信不少人踩到过很多坑.接下来的一系列文章将介绍我设计的自动化发版系统! 很多公司没有把配置独立出去,代码的构建.发版通过一个Jenk ...

  2. Jenkins CI&CD 自动化发布项目实战(下篇)

    Jenkins CI&CD 自动化发布项目实战(下篇) 作者 刘畅 时间 2020-12-04 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...

  3. Jenkins CI&CD 自动化发布项目实战(上篇)

    Jenkins CI&CD 自动化发布项目实战(上篇) 作者 刘畅 时间 2020-11-28 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...

  4. Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(二)

    一.说明 1.1 说明 前面介绍采用 Jenkinsfile + KubernetesPod.yaml 方式进行部署项目(Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-s ...

  5. GitLab CI/CD 自动化部署入门

    前言:因为找了B站内推,测试开发,正好知道内部使用GitLab做自动化测试,所以简单学了一下,有错误的地方请指正. 入门 初始化 cp: 无法获取'/root/node-v12.9.0-linux-x ...

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

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

  7. Rancher 构建 CI/CD 自动化流程 - 动态配置 Jenkins-slave(一)

    一.说明 1)需求: Rancher 上部署 Jenkins-master,服务采用 Jenkins-slave 发布,发布完成后 Jenkins-slave 自动销毁. 2)环境: Rancher ...

  8. Gitlab Runner实现CI/CD自动化部署asp.net core应用

    环境说明 一台git服务器(192.168.169.7),安装gitlab,docker. 一台web服务器(192.168.169.6),安装git,gitlab runner,docker,dot ...

  9. 7款不错的 CI/CD工具

    时至今日,越来越多的工程团队开始实行敏捷开发,借以推动更短.更快的发布周期.而代码库的增长与更高的生产构建频率,也带动持续集成与持续部署/交付工具快速兴起.如果您有意提升发布频率,或者是不太清楚哪些工 ...

随机推荐

  1. 数学分析理论(rudin版)笔记:实数系和复数系.2:抄书版

    有理数(rational number)记为 Q,实数记为 R 虽然任意两个不同的有理数间还有一个有理数,但是有理数集中还是会有 "间隙",而实数集填补了这些间隙. 集合(set) ...

  2. 电脑装MySQL免安装版配置失败提示系统错误2怎么解决?

    一·准备工作 我下载安装的版本是:mysql-8.0.16-winx64(免安装版) 下载地址:https://www.mysql.com/ (官网地址)https://cdn2.lmonkey.co ...

  3. LaTeX中的参考文献BibTex

    设置: BibTex代码及注释: 显示效果:

  4. linux ssh远程连接控制 linux(centOS) 口令、密钥连接

    sshd服务提供两种安全验证的方法: 基于口令的安全验证:经过验证帐号与密码即可登陆到远程主机. 基于密钥的安全验证:需要在本地生成"密钥对"后将公钥传送至服务端,进行公共密钥的比 ...

  5. C#中的WinForm问题——如何设置窗体的大小为超过屏幕显示的最大尺寸?

    今天在学习C#时遇到了一个问题,在此记录下来,留作日后总结复习之用,也分享给有同样问题和困扰的园友. 我手上的电脑是笔记本电脑,屏幕的尺寸大小为1366*768,然而项目所使用的屏幕大小为1920*1 ...

  6. 【刷题笔记】DP优化-状压

    因为篇幅太长翻着麻烦,计划把DP拆成几个小专题,这里原文只留下状压,其他请至后续博文. 状态压缩优化 所谓状态压缩,就是将原本需要很多很多维来描述,甚至暴力根本描述不清的状态压缩成一维来描述. 时间复 ...

  7. iptables SNAT 和DNAT的转化配置实验

    原文链接:http://www.jb51.net/LINUXjishu/402441.html DNAT(Destination Network Address Translation,目的地址转换) ...

  8. PyQt(Python+Qt)学习随笔:Model/View中的枚举类 Qt.MatchFlag的取值及含义

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 枚举类 Qt.MatchFlag描述在模型中搜索项时可以使用的匹配类型,它可以在QStandardI ...

  9. 蒲公英 · JELLY技术周刊 Vol.33: 前端基础课堂开课啦~

    蒲公英 · JELLY技术周刊 Vol.33 页面文件太大?图片过大了吧:页面加载白屏?很有可能是字体文件还没加载完:页面加载时间过长?多半是主进程被阻塞--该怎么办呢?快来小葵,咳咳,「蒲公英」前端 ...

  10. 团队作业part6--复审与事后分析

    一.Alpha阶段项目复审:https://www.cnblogs.com/3Jax/p/13127401.html 二.事后诸葛亮分析:https://www.cnblogs.com/3Jax/p/ ...