转载自: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. Vue—新版本router-view 与 keep-alive 的互动

    1. <keep-alive> 直接嵌套到 <router-view> 上会失效,正确写法: <router-view #="{ Component }&quo ...

  2. 干货分享:盘点那些最常用的Linux命令,需熟记!

  3. centos xargs

    有些时候过滤后的东西需要传递给后面其它命令执行实现需求,这个时候xargs就派上用场了. 比如我想把过滤后的东东拷贝至其它目录,其实我可以进入那个目录然后执行ls,然后是过滤,接着再手工以拷贝那样也可 ...

  4. python:列表的去重:两种方法的问题是:结果是没有保持原来的顺序。

    列表的去重 1.使用set的特型,python的set和其他语言类似, 是一个无序不重复元素集 orgList = [1,0,3,7,7,5] #list()方法是把字符串str或元组转成数组 for ...

  5. TensorFlow安装方法:附带坑解决办法

    >>添加Anaconda 仓库的镜像 Anaconda 安装包可以到 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载. ...

  6. 解决 spring-integration-mqtt 频繁报 Lost connection 错误

    问题描述 在之前的博客介绍了如何在 Spring Boot 集成 MQTT,后面使用中没有发现问题,最近发现一直报错: Lost connection: Connection lost; retryi ...

  7. Qt模型视图结构遇见的小问题

    在本文的最开始,我们来看两个帮助文档内容: selectionMode : SelectionMode This property holds which selection mode the vie ...

  8. PyQt(Python+Qt)学习随笔:Qt Designer中Action的信号

    Action与菜单和工具栏挂接后,只是实现了相关的关联关系,但并不能执行响应操作,真正的响应操作是通过Action的信号与对应槽函数连接实现的. Action提供了4种信号: changed()信号: ...

  9. Jmeter添加事务

    事务 通过第三方工具或jmeter代理录制的脚本,你会发现会录制很多的子请求.比如当打开首页后, 会继续打开图片,css,其他请求等资源文件. 通常我们会剔除掉这些子请求, 但如果我需要衡量打开一个页 ...

  10. css3(::before)伪元素的使用

    1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset=" ...