Jenkins实现CICD之集成ansible的任务
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
目录
一.Jenkins安装Ansible插件
1.ansible结合Jenkins架构概述
如上图所示,我们可以基于Shell脚本的方式批量管理服务,也可以基于Ansible编写剧本的方式来管理服务哟,需要安装相应的插件即可。
官方文档:
https://plugins.jenkins.io/ansible/
2.Jenkins安装ansible环境
(1)安装ansible
[root@ubuntu12.yinzhengjie.com ~]# apt -y install ansible
(2)查看ansible的版本,如上图所示
[root@ubuntu12.yinzhengjie.com ~]# ansible --version
(3)添加主机清单
[root@ubuntu12.yinzhengjie.com ~]# cat >> /etc/ansible/hosts <<EOF
[webservers]
10.0.0.13
10.0.0.14
[appservers]
10.0.0.15
EOF
(4)验证ansible对后端主机的连通性,如下图
[root@ubuntu12.yinzhengjie.com ~]# ansible all -m ping
3.安装ansible插件
3.1 进入到插件界面
如上图所示,进入到安装插件界面。
3.2 搜索ansible插件
如上图所示,搜素"ansible"插件进行安装即可。
3.3 插件安装完成
如上图所示,表示插件安装成功啦。
二.测试Jenkins能否调用ansible命令
1 创建一个自由风格的项目
如上图所示,新建一个"yinzhengjie-ansible-job01"的自由风格项目。
2 添加shell命令
如上图所示,成功添加"ansible all -m shell"。
3 构建任务并查看输出
如上图所示,构建成功啦。
三.测试"Invoke Ansible Ad-Hoc Command"构建
1 创建一个自由风格的项目
如上图所示,我们可以创建一个自由风格的"yinzhengjie-ansible-job02"项目
2 添加"Invoke Ansible Ad-Hoc Command"之shell模块
2.1 添加"Invoke Ansible Ad-Hoc Command"构建步骤
如上图所示,点击"增加构建步骤",选择"Invoke Ansible Ad-Hoc Command"
2.2 配置shell模块
如上图所示,添加了shell模块相关配置
2.3 测试构建
如上图所示,咱们的测试成功了,仅仅执行了"webservers"的模块哟。
3 添加"Invoke Ansible Ad-Hoc Command"之user模块
3.1 配置user模块
如上图所示,我们测试appserver主机,创建jasonyin2020用户。
3.2 测试构建
如上图所示,测试成功啦。
四.测试Invoke Ansible Playbook构建
1 创建一个自由风格的项目
如上图所示,我们可以创建一个自由风格的"yinzhengjie-ansible-job03"项目
2 准备playbook和资源清单
(1)编写剧本
[root@ubuntu12.yinzhengjie.com ~]# cat /yinzhengjie/script/jenkins/playbook/test.yaml
- hosts: webservers
remote_user: root
tasks:
- name: excute cmd
shell:
cmd: hostname
register: result
- name: show result
debug:
msg: "{{ result }}"
[root@ubuntu12.yinzhengjie.com ~]#
(2)准备主机清单
[root@ubuntu12.yinzhengjie.com ~]# tail -7 /etc/ansible/hosts
# Add by yinzhengjie
[webservers]
10.0.0.13
10.0.0.14
[appservers]
10.0.0.15
[root@ubuntu12.yinzhengjie.com ~]#
3 添加"Invoke Ansible Ad-Hoc Playbook"构建步骤
如上图所示,点击增加构建步骤,选择"Invoke Ansible Playbook"
4 配置"Invoke Ansible Ad-Hoc Playbook"
如上图所示,需要咱们指定playbook路径和主机清单路径哟。
5 测试构建
如上图所示,测试构建并查看主机清单。
五.基于选项参数配合ansible剧本构建案例
1 创建一个自由风格的项目
如上图所示,我们可以创建一个自由风格的"yinzhengjie-ansible-test-product-demo"项目。
2 准备资源清单和剧本
(1)编写剧本
[root@ubuntu12.yinzhengjie.com ~]# cat /yinzhengjie/script/jenkins/playbook/deploy.yaml
- hosts: appservers
remote_user: root
tasks:
- name: excute cmd
shell:
cmd: hostname
register: result
- name: show result
debug:
msg: "{{ result }}"
[root@ubuntu12.yinzhengjie.com ~]#
(2)准备资源清单
[root@ubuntu12.yinzhengjie.com ~]# tail -3 /etc/ansible/hosts-test
# Add by yinzhengjie
[appservers]
10.0.0.13
[root@ubuntu12.yinzhengjie.com ~]#
[root@ubuntu12.yinzhengjie.com ~]# tail -3 /etc/ansible/hosts-product
# Add by yinzhengjie
[appservers]
10.0.0.14
[root@ubuntu12.yinzhengjie.com ~]#
3 添加选项参数
如上图所示,选择选项参数。
如下图所示,添加一个"YINZHENGJIE_DEPLOY_INVENTORY"的选项参数变量。
4 添加"Invoke Ansible Ad-Hoc Playbook"构建步骤
如上图所示,点击增加构建步骤,选择"Invoke Ansible Playbook"
5 配置"Invoke Ansible Ad-Hoc Playbook"并调用自定义变量
如上图所示,我们对于主机清单,选择两个,将来用户可以选择基于生成环境部署还是测试环境进行部署哟。
6 构建生产环境
如上图所示,我们构建生产环境,并查看日志输出如下图所示。
7 构建测试环境
如上图所示,我们构建测试环境,并查看日志输出如下图所示。
六.使用ansible Playbook实现向playbook中传参功能
请创建测试环境和生产环境的配置文件,并对于测试环境和生产环境可以再次选择可以执行的资源清单。
添加如下三个变量:
YINZHENGJIE_DEPLOY_INVENTORY:
Jenkins变量,选择测试环境还是生产环境。
YINZHENGJIE_DEPLOY_HOST_LIST:
Jenkins变量,选择生产环境或测试环境部署哪个主机组列表,比如webservers或者appservers等。
YINZHENGJIE_ANSIBLE_HOST_LIST:
ansible变量,用于接收部署那一组主机列表,比如webservers或者appservers等。
类似于ansible命令行如下操作: (因此需要在ansible的playbook中添加一个"YINZHENGJIE_ANSIBLE_HOST_LIST")
ansible-playbook /yinzhengjie/script/jenkins/playbook/deploy-with-args.yaml -e YINZHENGJIE_ANSIBLE_HOST_LIST=webservers
ansible-playbook /yinzhengjie/script/jenkins/playbook/deploy-with-args.yaml -e YINZHENGJIE_ANSIBLE_HOST_LIST=appservers
1 准备测试环境
(1)编写playbook文件
[root@ubuntu12.yinzhengjie.com ~]# vim /yinzhengjie/script/jenkins/playbook/deploy-with-args.yaml
[root@ubuntu12.yinzhengjie.com ~]#
[root@ubuntu12.yinzhengjie.com ~]# cat /yinzhengjie/script/jenkins/playbook/deploy-with-args.yaml
- hosts: "{{ YINZHENGJIE_ANSIBLE_HOST_LIST }}"
remote_user: root
tasks:
- name: excute cmd
shell:
cmd: hostname
register: result
- name: show result
debug:
msg: "{{ result }}"
[root@ubuntu12.yinzhengjie.com ~]#
(2)编写"/etc/ansible/hosts-test"资源清单主机列表
[root@ubuntu12.yinzhengjie.com ~]# tail -7 /etc/ansible/hosts-test
# Add by yinzhengjie
[appservers]
10.0.0.13
10.0.0.14
[webservers]
10.0.0.15
[root@ubuntu12.yinzhengjie.com ~]#
(3)编写"/etc/ansible/hosts-product"资源清单主机列表
[root@ubuntu12.yinzhengjie.com ~]# tail -6 /etc/ansible/hosts-product
# Add by yinzhengjie
[appservers]
10.0.0.15
[webservers]
10.0.0.13
[root@ubuntu12.yinzhengjie.com ~]#
2 新建项目
如上图所示,新建一个"yinzhengjie-ansible-test-product-demo-with-args"项目,其配置使用我们之前的一个项目案例即可。
3 添加"YINZHENGJIE_DEPLOY_HOST_LIST"选项参数
如上图所示,新增一个选项参数,并配置"YINZHENGJIE_DEPLOY_HOST_LIST"变量,如下图所示。
4 新增一个"Extra Variables"变量
如上图所示,点击"高级",就进入到如下图所示的界面,再点击"Extra Variables"。
5 配置"Extra Variables"变量
如上图所示,配置好参数传递的对应关系后,点击保存即可。
6 构建测试环境
如上图所示,我们来构建测试环境,测试结果如下图所示。
7 构建测试环境
如上图所示,我们来构建生产环境,测试结果如下图所示。
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/18607499,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。