通过前几个章节,我们已经了解了源代码管理、编译、部署的工具和内容,覆盖了从代码开发到上线运行的所有环节。在本章,我们将钱几张的内容做一个汇总,来建立一套完整的用于代码管理发布DevOps系统。
代码发布系统架构
架构说明:
- Jenkins作为代码发布系统的操作平台,通过Jenkins Pipeline管理任务流,并提供WEB界面、权限系统,建立操作流程。
- 编译节点(Builder)根据开发语言不同,建立多个,该节点执行编译、代码检查工作。
- 版本管理系统分为两个,开发库(DEV GIT)和配置库(CM GIT)。开发库中存储业务开发代码,CM存储服务器IP配置、数据库等账户配置等。
- Ansible服务器按照部署环境,分为两台:测试环境Ansible、生产环境Ansible,分别完成Ansible机器对环境的私钥免密码连接。
- 物理节点分为Jenkins、SCM、Builder、Ansible Test、Ansible Prod。其中Ansible Test与测试环境在测试网域,Ansible Prod在生产网域。 Jenkins通过VPN或合适的方式,实现与SCM、Ansible的连接。
- 测试环境、生产环境机器与实际业务相关。 实践:由于Ansible机器可免密直连生产环境,因此为了安全考虑,将Ansible分离为测试、生产两台机器是必要的。
发布流程
Pipeline & Groovy 发布流程
建立系统
我们通过Ansible脚本,来初始化自动化部署系统。Ansible代码在本书的代码仓库中可以获得。
硬件准备
按照架构图,准备5台物理节点,系统为CentOS 7以上或Ubuntu16.04以上。同时我们还分别模拟两台机器,作为测试环境机器和生产环境机器。
我们使用Vagrant来创建这些机器,实际工作中,我们可将sa/hosts内的IP修改为自己的机房IP即可完成任务。
每台机器上建立ops用户,建立密码授权或私钥授权,以及sudo免密码权限。使得以下无密连接有效:
- Dev连接至Jenkins
- Jenkins连接至Ansible test 和Ansible prod
- Ansible test连接至所有测试机器。
- Ansible Prod连接至所有发布机器。
获得构建代码 在Dev机器上获取发布系统的构建代码,并按实际硬件情况设置IP地址。
$ git clone http://github.com/gikoluo/book-devops-system
$ cp sa/inventory.sample sa/inventory
$ vi sa/inventory #填写准备的机器,如示例:(改进,使用host别名)
[servers]
gitlab ansible_ssh_host=10.100.18.108
jenkins ansible_ssh_host=10.100.18.107
sonar ansible_ssh_host=10.100.18.108
[jdk8]
192.168.1.66 default_link=1
178.78.88.68 default_link=1
[ansible]
192.168.1.66
178.78.88.68
[jenkins]
192.168.1.23
[sonar]
192.168.1.136
[gitlab]
192.168.1.136
[jenkins-slave-jdk8]
192.168.1.136
192.168.1.135
构建Jenkins,Gitlab,Jenkins slave,Sonar。 这几台机器是从开发机器进行连接的,优先进行初始化。Ansible机器通过Jenkins初始化, 因此开发人员和开发机器也不应该拥有相应的登录权限。 运行自动化构建脚本
ansible-galaxy install —list galaxy.list
host_limits=“ansible-dev or jenkins or jenkins-slave-jdk8 and 192.168.*"
ansible-playbook 00-setup.yml -l $host_limits #对系统进行初始化,主要包括 ansible必要的linux安装,字符集设置、ntp 时间等
ansible-playbook jdk8.yml -l $host_limits #安装JDK8
ansible-playbook jenkins.yml gitlab.yml ansible.yml-l $host_limits 运行sa下的playbooks,安装软件。
安装完成后,分别按照前几章的内容,完成软件的基础配置和插件安装。 Jenkins:
- 设置本机公私钥
- 建立Jenkins授权
- 建立编译节点,分别连接 ansibe-test, ansible-prod,slave-jdk8机器。(详述) Gitlab:
- 建立示例git仓库
- 建立用户
- 将Jenkins的公钥添加为发布Key
将本代码提交到自建gitlab,用于后续将其发布至ansible机器。 git remote add origin2 git@gitlab:sa/devops-system
建立(导入)Jenkins任务。获取和发布本上线代码。Pipeline流程,分别发布到测试和生产环境。
ssh jenkins
ssh ansible-test
ansible-playbook 10-installkey.yml -l "192.168.*”
exit
ssh ansible-prod
ansible-playbook 10-installkey.yml -l "192.168.*”
exit
Jenkins 发布管理 图:贴一个上线流程,build,qa,ci,staging,production, clean。 jenkinsfile groovy service for flow。