Jenkins+Ansible:助力基础设施建设
读完需 7 分钟
速读需 3 分钟
《ansible自动化:操作系统初始化具体实现》《ansible自动化:基础软件的自定义安装》两篇文章我们虽然通过ansible在字符界面满足了操作需求,但是这并不友好。我们希望团队内每个人都能直接上手无缝使用,因此就需要一个图形化界面来提高可操作性。
在此我们借助Jenkins+Ansible 来实现图形化的参数化构建过程:
我们在输入IP后,根据选择的PLAYBOOK(剧本),再进一步选择不同的TAG(标签),就可以按需自动化实现我们的需求。
下面就来讲解下我们具体实现。
Ansible
Ansible作为我们的配置中心,主要依靠Playbook(剧本)进行各种自动化操作的编排。另借助Tag(标签)将整个编排过程进行细分,有助于我们进行多样性的组合,灵活复用。
在基础设施建设阶段,我们需求比较多的就是操作系统初始化、基础组件的安装,这两个场景的具体实现过程在《ansible自动化:操作系统初始化具体实现》《ansible自动化:基础软件的自定义安装》进行了讲解,在此我们只展示下目录结构,希望大家在实现具体需求时根据ansible的目录功能合理安排。
# 1.基础组件初始化
roles/software_install/
├── files
│ ├── filebeat
│ │ ├── filebeat-6.4.3-x86_64.rpm
│ │ └── filebeat.yml
│ ├── java
│ │ ├── app.tar.gz
│ │ ├── app.zip
│ │ ├── data.zip
│ │ └── jdk1.8.0_40.zip
│ ├── nginx
│ │ ├── echo-nginx-module-master.zip
│ │ ├── nginx-module-vts-master.zip
│ │ ├── nginx_upstream_check_module-master.zip
│ │ └── tengine-2.3.2.tar.gz
│ └── python
│ └── Python-3.7.0.tgz
├── handlers
│ └── main.yml
├── tasks
│ ├── filebeat.yml
│ ├── java.yml
│ ├── main.yml
│ ├── nginx.yml
│ ├── python.yml
│ └── python.yml.bak
└── vars
└── main.yml
# 2.系统初始化
roles/os_init/
├── files
│ ├── ansible_key
│ │ └── id_rsa.pub
│ ├── blueking_key
│ │ └── id_rsa.pub
│ ├── CentOS6-Base-LAN.repo
│ ├── CentOS7-Base-LAN.repo
│ ├── client.xml
│ ├── deploy_key
│ │ └── id_rsa.pub
│ ├── epel7-LAN.repo
│ ├── zabbix-agent-3.0.14-1.el7.x86_64.rpm
│ ├── zabbix-agent-4.2.1-1.el6.x86_64.rpm
│ ├── zabbix-release-3.0-1.el7.noarch.rpm
│ ├── zabbix-release-4.2-1.el6.noarch.rpm
│ ├── zabbix-sender-3.0.14-1.el7.x86_64.rpm
│ └── zabbix-sender-4.2.1-1.el6.x86_64.rpm
├── handlers
│ └── main.yml
├── tasks
│ ├── dir.yml
│ ├── dns.yml
│ ├── init_pkg.yml
│ ├── iptables.yml
│ ├── limits.yml
│ ├── main.yml
│ ├── ntp.yml
│ ├── profile.yml
│ ├── rc.local.yml
│ ├── repo.yml
│ ├── rsyslog.yml
│ ├── safe.yml
│ ├── selinux.yml
│ ├── sshd.yml
│ ├── sysctl.yml
│ ├── user.yml
│ └── zabbix_agent.yml
├── templates
│ └── sysctl.conf.j2
└── vars
├── main.
其中Tag可以根据实际情况按需添加,例如系统初始化中虽然分了很多Tag,但是我们并没有每个都使用。
Jenkins
我们借助Jenkins的功能丰富的插件,来实现不同层面的需求。
1.参数化构建
Jenkins自带"String Parameter"、"Choice Parameter"虽然在一定程度上满了我们对普通参数的需求,但是无法满足我们对选择参数的联动(即主动选择反应参数),如选择系统初始化剧本,可以和其相关的标签联动。
在此我们选择安装"Active Choices Plugin-in"插件,实现主动选择反应参数。将"Active Choices Reactive Parameter"配合"Multi-line String Parameter"、"Choice Parameter"实现参数化的选择。
(1)Multi-line String Parameter
多行字符串参数,便于我们输入多个IP,实现批量操作。
(2)Choice Parameter
通过此参数,可以和后面的Active Choices Reactive Parameter 进行Tag联动。
(3)Active Choices Reactive Parameter
此参数通过groovy 脚本实现PLAYBOOK和TAG的联动。
通过"Referenced parameters" 可以设置关联的源参数。
经过以上设置就可以实现参数间的联动:
2.与ansbile关联
Jenkins通过"Ansible plugin"可以和ansible进行关联,当然也可以在不安装插件的情况下用shell实现。
由于我们使用普通用户执行操作,因此ansible在安装过程中需要通过-b参数进行提权。
总结
通过jenkins + ansible 我们在图形化界面上助力了基础设施方面的建设,提升了操作友好性。另通过本次介绍,希望我们能了解到jenkins不只是在DevOps中才发挥其价值,在自动化建设方面也同样能出一份力。
在此我们并没有使用Jenkins pipeline,因为ansible playbook的编排一定程度上在操作系统级上都实现了。
你与世界
只差一个
公众号