Jenkins 结合 Ansible 实现生产环境自动发布与备份

ansible机器和要部署的服务器在同一个网段,采用内网部署

如果你还没有安装ansible或对ansible playbook不熟,请看下面两篇文章

服务器规划

1、机器信息:

机器

2、 ansible 远程执行用户:(ansible机器并没有开通外网哦)

ansible 配置 ssh用户和端口
hosts

3、ansible 用到的两个重要角色 hosts 和 roles

/etc/ansible/hosts      #hosts文件定义主机与和执行权限 /etc/ansible/roles       #roles是任务集合,可在roles下面新建多模块,如tomcat,jdk、yum源,防火墙等,分角色方便管理且灵活

Jenkins 配置 ansible 全局属性

系统管理–>lobal Tool Configuration–>Ansible

全局属性

选择 ansible

jenkins 配置 ansible

指定 ansible 命令路径

ansible

构建中选择 ansible

英语文档在这里

ansible
ansible

Jenkins 新建-自由分格项目

项目名称:lbbs
Svn配置:
地址:svn://172.17.103.10:3391/lbproject/bs/

svn

###构建:
1)、增加构建后的操作–>Invoke Ansible Playbook

ansible playbook
Playbook path:/etc/ansible/roles/lbbs/lbbs.yml #该路径为ansible的roles) Inventory:选择File or host list File path or comma separated host list:/etc/ansible/hosts (备注:该路径为ansible的hosts文件) Hostsubset:lbbs (备注:此处为hosts文件中ip或者定义的主机组都行
[root@lbzpf bs]# cat /etc/ansible/roles/lbbs/tasks/main.yml  - name: copy package to 103.111    copy:      src={{ src_path }}/103.111/ne-ops-1.0.0.war     dest={{ dest_path }}        backup=yes  #开启远程备份,在远程主机/ane/update下备份   when: "ansible_nodename == 'lb_bs1' and ansible_eth0.ipv4.address == '172.17.103.111'"   #条件判断  - name: copy package to 103.32    copy:     src={{ src_path }}/103.32/ne-ops-1.0.0.war     dest={{ dest_path }}     backup=yes   when: "ansible_nodename == 'bs-web04' and ansible_eth0.ipv4.address == '172.17.103.32'" 备注:加when条件判断原因是:war包里有个文件引用了当前的主机ip,先这样设置了  [root@lbzpf bs]# cat  /etc/ansible/roles/lbbs/vars/main.yml   #vars定义了上面用到的两个变量路径 src_path: /var/lib/jenkins/workspace/lbbs    #源路径 dest_path: /ane/update   #目标路径
vars

2)、增加构建后的操作–>(Invoke Ansible Ad-Hoc Command)

配置

###发布
1、Jenkins中点击立即构建,或者指定定时任务

立即构建

2、编写计划任务发布
发布时间一般是固定的,所以可以指定定时任务(通linux下的crond),让其自动构建操作

定时

检查执行结果

执行过程
执行过程