Bootstrap

自动化运维系列一:docker部署jenkins与gitlab

一:传统网站部署的流程

传统的网站部署,在运维过程中,网站部署是运维的工作之一,网站部署的流程大致分为:
需求分析—原型设计—开发代码—提交测试—内网部署—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。(如下图所示)
自动化运维系列一:docker部署jenkins与gitlab

二:目前主流网站部署的流程

目前主流网站部署方法,通过Hudson/Jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。
简单来说方便如下人员:

  1. 开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在SVN、GIT仓库即可。
  2. 运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新。
  3. 测试人员:可以通过jenkins进行简单的代码及网站测试。
    自动化运维系列一:docker部署jenkins与gitlab

三:jenkins持续集成

持续集成(Continuous Integration)是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础。Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。

持续部署( continuous deployment )是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化相对也提高了人的效率,让engineering productivity 最大化。

持续交付( Continuous delivery , 缩写为CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成 ,以保证软件可以稳定、持续的保持在随时可以释出的状况。它的目标在于让软件的建置、测试与释出变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

3.1 持续集成意义

  1. 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
  2. 持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
  3. 持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。

3.2 持续集成组件

  1. 一个自动构建过程,包括自动编译、分发、部署和测试;
  2. 一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库,例如SVN、GIT代码库;
  3. 一个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:
;