随着公司应用系统的不断增多,原有手工部署流程越来越不满足上线的需求。为了各个系统能快速迭代与测试,减少上线流程时间和人为出错,迫切需要一套自动化部署系统。

转载原文:https://luoji.live/docker/deploy-auto-platform-20161109.html

目标

  • 快速迭代,方便的功能更新
  • 代码版本管理,方便的管理、审核
  • 快速打包部署与测试,自动化测试
  • 应用集群管理
  • 快速部署线上环境,快速发布、回滚、重启、停止。

为了达到目标提出下面概念

  • 微服务 - micro service
  • 代码仓库 - gitlab
  • 持续集成部署工具 - jenkins / circleci / ThoughtWorks Go
  • 虚拟化技术 - docker集群 (swarm/kubernetes)

微服务

一个简单的应用会随着时间推移逐渐变大。在每次的sprint中,开发团队都会面对新“故事”,然后开发许多新代码。我很确信这个代码正是很多开发者经过多年努力开发出来的一个怪物。单体式应用也会降低开发速度。应用越大,启动时间会越长。单体式应用在不同模块发生资源冲突时,扩展将会非常困难。试想下其中一个功能出错导致服务cash,整个应用都无法使用。micro service 就是解决这样的问题。微服务根据业务适当的拆分。微服务具有更敏捷的迭代,更快速方便的上线。

  • 服务之间的是完全解耦的。
  • 服务通讯是重点,制定统一标准。
  • 分布式事务
  • 版本控制
  • 动态扩容

代理微服务设计模式

异步消息传递微服务设计模式

代码仓库

Gitlab是一个用Ruby on Rails开发的开源项目管理程序,Git Flow管理开发流程实现代码提交和审核。
流程如下:

持续集成部署工具

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

持续集成它的好处主要有两个:

  1. 快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
  2. 防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

Jenkins

是开源的持续集成工具。自动化的build、打包、构建、测试。可定制的众多插件实现持续部署。

Circleci

是一个强大的持续集成与部署服务, 支持多种语言。配置简单,需要付费。

ThoughtWorks Go

GO是一款开源的持续集成和发布的系统,旨在使软件开发企业和团队在构建-测试-发布软件产品的流程自动化,并且能持续地发布软件产品。技术支持,需要付费。

虚拟化技术docker 集群

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。 基于docker的集群工具有swarm(官方)和kubernetes(google)。

  1. 文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
  2. 资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如CPU和内存。
  3. 网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
  4. 写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
  5. 日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
  6. 变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
  7. 交互式Shell

Swarm架构

kubernetes架构

自动化部署 - gitlab

  1. 开发者fork正式repo代码
  2. 开发者克隆代码到本地,git branch特性分支开始开发
  3. 开发完成开发者创建pull request 将代码提交正式repo dev分支
  4. 合并请求触发gitlab webhook或者 jenkins 定时拉取代码后。jenkins开始 编译、打包、单元测试。jenkins插件完成持续部署到测试环境并进行自动化测试。
  5. 测试完成开发者创建pull request 将代码提交正式repo master分支
  6. 合并请求触发gitlab webhook或者 jenkins 定时拉取代码后。通过发布系统将应用部署到生产环境

自动化部署 - jenkins

  1. 合并请求触发gitlab webhook或者 jenkins 定时拉取代码
  2. jenkins 编译。
  3. jenkins 单元测试。
  4. jenkins 打包、构建
  5. jenkins 插件 docker镜像并上传
  6. jenkins 部署脚本(基于doker swarm/kubernetes)
  7. 部署成功,自动化测试或通知测试人员测试
  8. 测试通过

jenkins 插件

  • Publish Over SSH Plugin/SSH Agent Plugin
  • Docker Plugin

自动化部署 - 部署流程

jenkins部署应用

  1. 合并请求触发gitlab webhook或者 jenkins 定时拉取代码
  2. 编译代码二次验证
  3. jenkins 部署脚本
  4. 生产环境更新应用
    • docker pull image
    • docker run
  5. 重启应用

存在的问题

  1. 不支持热部署
  2. 不支持回滚、重启、停止
  3. 不支持统一管理

发布系统

为了解决发布流程中的问题,需要管理应用的发布系统。发布系统要做到热部署,动态扩容发布,定位应用状态,友好用户界面和接口,统一的配置中心。

正确的发布应用的流程如下:

  1. 检查应用
  2. 禁止业务流量
  3. 停止应用
  4. 更新应用
  5. 启动应用
  6. 开启业务流量

总结

自动化部署是从提交代码后,实现代码自动编译、打包、测试到线上部署的整套流程,能解决人工部署带来的无法快速上线、应用版本众多无法管理的问题。自动化部署平台不仅是部署应用,它还涉及到开发流程管理、代码托放管理、持续集成、持续部署、版本管理以及系统架构。自动化部署平台具有快速迭代,快速的代码管理、审核,快速的打包部署和测试,快速的发布、回滚、重启、停止应用的特点,同时还支持自由控制的弹性策略。

自动化部署平台场景

  • 标准的敏捷开发流程
  • 完善的自动化测试
  • 统一安装、配置应用
  • 应用定期检测是否运行
  • 支持自由控制的弹性策略
  • 应用部署的安全管理

# docker # 自动化部署 # 微服务 # 集群 # gitlab # jenkins # ci

转载原文:https://luoji.live/docker/deploy-auto-platform-20161109.html

基于Gitlab Jenkins Docker集群 微服务搭建自动化部署平台相关推荐

  1. 基于Kubernetes、Docker的机器学习微服务系统设计——完整版

     内容提要 1 概述 2 系统介绍 2.1 功能全览 2.2 核心功能 3 系统架构 3.1 云化架构图 3.2 架构说明 4 云化部署 4.1 部署图 4.2 部署说明 4.3 部署实例 5 设计实 ...

  2. 基于Kubernetes构建Docker集群管理详解

    from: 基于Kubernetes构建Docker集群管理详解 Kubernetes是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度.均衡容灾.服务注册.动 ...

  3. 基于 Swarm 的 Docker 集群管理

    文章目录 基于 Swarm 的 Docker 集群管理 一.Swarm简介 1.Swarm 模式简介 2.Swarm 特性 3.Swarm 主要概念 (1)开始使用Swarm模式 (2)安装环境要求 ...

  4. Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三)

    Jenkins 之 单节点 对接GitHub搭建自动化部署项目环境 与 实战测试 (三) 目录 Jenkins 之 单节点 搭建自动化部署项目环境 与 实战测试 (三) Jenkins 服务器 环境 ...

  5. Kubernetes实战[1]: 基于kubernetes构建Docker集群环境实战

    kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成 etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 m ...

  6. 中小企业集群ntpd服务搭建

    前言: 网络时间协议NTP(NetworkTime Protocol)是用于互联网中时间同步的标准互联网协议.NTP的用途是把计算机的时间同步到某些时间标准.目前采用的时间标准是世界协调时 UTC(U ...

  7. 无需端口映射,实现外部网络访问Docker集群内部服务

    注意:读这篇文章之前最好先看看这个文章   https://blog.csdn.net/czk740960212/article/details/80393825 背景 Docker支持端口映射,即将 ...

  8. k8s docker集群搭建

    一.Kubernetes系列之介绍篇 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境 ...

  9. 【gitlab+jenkins+docker】第一节 基础环境介绍与准备

    [gitlab+jenkins+docker]手把手教你搭建基于gitlab+jenkins+docker的项目的自动化部署流程 架构 环境介绍 docker安装 docker-compose安装(二 ...

最新文章

  1. C中 #define
  2. C#备份还原MySql数据库
  3. NRedis-Proxy - 高性能中间件服务器
  4. 自已做的第一个autoconf程序(不断完善中)
  5. IntelliJ IDEA 中的Java Web项目的资源文件复制新增如何更新到部署包中?
  6. Python元组练习
  7. Linux学习之旅(一)Linux常用命令
  8. Linux 下的 sleep
  9. AcWing 4241. 货物运输
  10. dp合集 广场铺砖问题硬木地板
  11. 算法竞赛入门经典(第二版) 答案汇总(持续更新)
  12. 基于java小区物业管理系统
  13. python定义整型数组_Python数组定义方法
  14. 微信小程序实战教程,适合初学者快速入门。
  15. Acegi源码研究(五):七剑下天山
  16. 第四十一章 2D游戏(2)
  17. Nginx----进阶篇
  18. win10 电脑找不到WIFI,手机却能连上,问题解决
  19. 电子商务系统的设计与实现:数据库设计
  20. 电气防火限流式保护器在火灾预防中的应用

热门文章

  1. linux 批量替换文件内容及查找某目录下所有包含某字符串的文件(批量修改文件内容)...
  2. 分布式任务调度平台XXL-JOB搭建使用
  3. mysql视图管理和存储过程
  4. 数据挖掘-分类与预测-神经网络算法
  5. C/C++——cmd下丢失mspdb100.DLL解决方法
  6. 《剑指Offer》 调整数组顺序使奇数位于偶数前面
  7. 【AI视野·今日NLP 自然语言处理论文速览 第二十二期】Mon, 27 Sep 2021
  8. todolist作业效果
  9. 分组分页连接查询子查询9202-0422
  10. java演练 类与对象 给我一个数字还你一个字符串