自动化运维系列一:docker部署jenkins与gitlab
一:传统网站部署的流程
传统的网站部署,在运维过程中,网站部署是运维的工作之一,网站部署的流程大致分为:
需求分析—原型设计—开发代码—提交测试—内网部署—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。(如下图所示)
二:目前主流网站部署的流程
目前主流网站部署方法,通过Hudson/Jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。
简单来说方便如下人员:
- 开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在SVN、GIT仓库即可。
- 运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新。
- 测试人员:可以通过jenkins进行简单的代码及网站测试。
三:jenkins持续集成
持续集成(Continuous Integration)是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。
持续部署( continuous deployment )是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率,让engineering productivity 最大化。
持续交付( Continuous delivery , 缩写为CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成 ,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。
3.1 持续集成意义
- 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
- 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
- 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
3.2 持续集成组件
- 一个自动构建过程,包括自动编译、分发、部署和测试;
- 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,例如SVN、GIT代码库;
- 一个jenkins持续集成服务器
四:持续集成的部署
4.1 环境准备
IP地址 | 系统 | hostname | 硬件配置 | 角色 |
---|---|---|---|---|
172.17.2.239 | CenOS7.4虚拟机 | node01.ginvip.com | 2 CPU 4G MEM | gitlab |
172.17.2.240 | CenOS7.4虚拟机 | node02.ginvip.com | 2 CPU 4G MEM | jenkins |
172.17.2.241 | CenOS7.4虚拟机 | node03.ginvip.com | 2 CPU 4G MEM | jenkins从节点 |
Jenkins中文文档见:
https://jenkins.io/zh/doc/book/installing/#downloading-and-running-jenkins-in-docker
4.2 docker部署gitlab
首先安装docker-compose:
pip install docker-compose -i https://mirrors.aliyun.com/pypi/simple/
docker-compose -v
docker-compose文件内容:
[root@node01 gitlab]# cat docker-compose.yml
version: