通过前几个章节,我们已经了解了源代码管理、编译、部署的工具和内容,覆盖了从代码开发到上线运行的所有环节。在本章,我们将钱几张的内容做一个汇总,来建立一套完整的用于代码管理发布DevOps系统。

代码发布系统架构

架构说明:

  1. Jenkins作为代码发布系统的操作平台,通过Jenkins Pipeline管理任务流,并提供WEB界面、权限系统,建立操作流程。
  2. 编译节点(Builder)根据开发语言不同,建立多个,该节点执行编译、代码检查工作。
  3. 版本管理系统分为两个,开发库(DEV GIT)和配置库(CM GIT)。开发库中存储业务开发代码,CM存储服务器IP配置、数据库等账户配置等。
  4. Ansible服务器按照部署环境,分为两台:测试环境Ansible、生产环境Ansible,分别完成Ansible机器对环境的私钥免密码连接。
  5. 物理节点分为Jenkins、SCM、Builder、Ansible Test、Ansible Prod。其中Ansible Test与测试环境在测试网域,Ansible Prod在生产网域。 Jenkins通过VPN或合适的方式,实现与SCM、Ansible的连接。
  6. 测试环境、生产环境机器与实际业务相关。 实践:由于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。

results matching ""

    No results matching ""