##初探在容器上构建持续部署


##初探在容器上构建持续部署
本文插图
【##初探在容器上构建持续部署】
作者 | 倚天码农
责编 | 徐威龙
封图| CSDN下载于视觉中国
要想理解持续集成和持续部署 , 先要了解它的部分组成 , 以及各个组成部分之间的关系 。 下面这张图是我见过的最简洁、清晰的持续部署和集成的关系图 。
##初探在容器上构建持续部署
本文插图
图源:sonatype.com
##初探在容器上构建持续部署
本文插图
持续部署
如图所示 , 开发的流程是这样的:
程序员从源码库(Source Control)中下载源代码 , 编写程序 , 完成后提交代码到源码库 , 持续集成(Continuous Integration)工具从源码库中下载源代码 , 编译源代码 , 然后提交到运行库(Repository) , 然后持续交付(Continuous Delivery)工具从运行库(Repository)中下载代码 , 生成发布版本 , 并发布到不同的运行环境(例如DEV , QA , UAT ,PROD) 。
图中 , 左边的部分是持续集成 , 它主要跟开发和程序员有关;右边的部分是持续部署 , 它主要跟测试和运维有关 。 持续交付(Continuous Delivery)又叫持续部署(Continuous Deployment) , 它们如果细分的话还是有一点区别的 , 但我们这里不分得那么细 , 统称为持续部署 。 本文侧重讲解持续部署 。
持续集成和部署有下面几个主要参与者:
源代码库:负责存储源代码 , 常用的有Git和SVN 。
持续集成与部署工具:负责自动编译和打包以及把可运行程序存储到可运行库 。 比较流行的有Jenkins , GitLab , Travis CI , CircleCI 等
库管理器(Repository Manager):也就是图中的Repository , 我们又叫运行库 , 负责管理程序组件 。 最常用的是Nexus 。 它是一个私有库 , 它的作用是管理程序组件 。
库管理器有两个职能:
管理第三方库:应用程序常常要用到很多第三方库 , 并且不同的技术栈需要的库不同 , 它们经常是存放在第三方公共库里 , 管理起来不是很方便 。 一般公司会建立一个私有管理库 , 来集中统一管理各种第三方软件 , 例如它既可以做为Maven库(Java) , 也可以做为镜像库(Docker) , 还可以做为NPM库(JavaScript) , 来保证公司软件的规范性 。
管理内部程序的交付:所有公司在各种环境(例如DEV , QA , UAT ,PROD)发布的程序都由它来管理 , 并赋予统一的版本号 , 这样任何交付都有据可查 , 同时便利于程序回滚 。
##初探在容器上构建持续部署
本文插图
持续部署步骤
各个公司对持续部署(Continuous Deployment)的要求不同 , 它的步骤也不相同 , 但主要包括下面几个步骤:
下载源码:从源代码库(例如github)中下载源代码 。
编译代码:编译语言都需要有这一步
测试:对程序进行测试 。
生成镜像:这里包含两个步骤 , 一个是创建镜像 , 另一个是存储镜像到镜像库 。
部署镜像:把生成的镜像部署到容器上
上面的流程是广义的持续部署流程 , 狭义的流程是从库管理器中检索可运行程序 , 这样就省去了下载源码和编译代码环节 , 改由直接从库管理器中下载可执行程序 。 但由于并不是每个公司都有单独的库管理器 , 这里就采用了广义的持续部署流程 , 这样对每个公司都适用 。
##初探在容器上构建持续部署
本文插图
持续部署实例