讲如何结合jenkins+ ansible构建发布系统

Posted by Yancy on 2016-10-29

jenkins+ansible,打造一个web构建发布系统

自动化这块我们测试生产环境已经用起来了。

这篇文章主要讲我们如何实现整个web发布系统,如何安装配置看我blog上面有。

需要了解几款自动化工具: SaltStack,Ansible,Puppet,jenkins

所以我们第1步做的就是:用Ansible + Jenkins搞定自动发布。Ansible是相对简单的批量管理工具,支持模板管理等高级功能。搞定了自动发布,开发的服务器需求已经明显下降,只要把代码提交到 Git主干,就会自动触发发布。

Git使用的是 GitLab,后期同时为了安全我们做了一层LDAP代理,效果相当于“将军令”,操作机、Git和Jenkins用 OpenLDAP 做统一认证,后续用到的Redmine、Grafana、Zabbix等都接入了OpenLDAP认证,每个人都有个动态口令,每次验证都需要用到。

流程结构

简单绘制了下Jenkins的一个流程,如下图:

拓扑图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
> 该平台以jenkins 为中心,然后围绕他进行扩展。
> 代码全局配置通过”文件管理平台” 进行管理。每次代码进行build时,pull一下配置。使配置为最新的。
> 开发人员将代码push到gitlab,开发者之间相互review代码。然后murge到master分支。jenkins上的pull代码到workspace空间。
> 安装一些依赖的第三方包。
> 代码和配置文件进行合并,通过redis存储的版本信息创建版本。
> 把将要发布的版本推送到远端机器,reload服务实现上线。
> 当发布的代码出现问题,回滚指定版本(默认回滚上一版本),最多可回滚之前5个版本。
```
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
```bash
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

这里之前用Jenkins使用起来。遇到个难题这里分析哪几点:

1
2
3
4
5
6
7
github作为源代码仓库
jenkins做为打包服务器,Web控制服务器
在jenkins的系统配置里,可以找到maven,git,Java相关的配置,只要勾选了,在开时执行job时,会自动下载。
ansible把war包,发布到远程机器
tomcat每台服务器环境都需要在ansible /etc/ansible/hosts配置好,这样可以让它自动化下发到对应机器。
把jenkins生成的war包发布到远程服务器上。
进入该项目的workspace目录下保存该playbook的仓库子目录下, 检查ansible版本, 并执行最终的部署命令.会不会发布出现乱码。

监控:

由于原始的监控不满足快速增长的业务,我这边部署了开源监控系统 Zabbix,虽然运维能够很好的使用Zabbix,但其他部门同事总觉得易用性不高、而且很多定制化监控实现起来很麻烦。还是需要有运维开发同事帮忙辅助会更好。