查看原文
其他

Jenkins+Ansible:助力基础设施建设

木讷大叔爱运维 木讷大叔爱运维 2022-07-13




读完需 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的编排一定程度上在操作系统级上都实现了。



运维思索:接地气的运维自动化建设

ansible自动化:备份管理实践

事件推送网关: “让基础设施建设动起来”

ansible自动化:基础软件的自定义安装

ansible自动化:操作系统初始化具体实现

K8SEASY:一键安装K8S高可用集群



你与世界

只差一个

公众号




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存