jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新

主机准备:

主机ip作用
server1172.25.63.1gitlab主机
server2172.25.63.2jenkins+ansible主机
server3172.25.63.3客户端主机
server4172.25.63.4客户端主机

各主机selinux和火墙全部关闭。

首先在server2安装ansible:

[root@server2 ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@server2 ~]# yum install ansible -y

在gitlab新建一个项目:

在这里插入图片描述在server1克隆这个项目:

[root@server1 ~]# git clone git@172.25.63.1:root/playbook.git
编辑一个playbook:
[root@server1 ~]# ls
anaconda-ks.cfg  demo  playbook
[root@server1 ~]# cd playbook/
[root@server1 playbook]# vim playbook.yml
[root@server1 playbook]# cat playbook.yml 
---
- hosts: all
  tasks:
    - name: install httpd
      yum:
        name: httpd
        state: present
    - name: start httpd
      service:
        name: httpd
        state: started

playbook的内容为安装并启动httpd。

jenkins可以通过参数化构建,创建inventory文件:

[root@server1 playbook]# mkdir inventory
[root@server1 playbook]# cd inventory/
[root@server1 inventory]# vim test
[root@server1 inventory]# cat test 
[test]
172.25.63.4
[root@server1 inventory]# vim prod
[root@server1 inventory]# cat prod 
[prod]
172.25.63.3

在运行playbook时可以通过-i选项来指定不同的inventory文件。

创建ansible配置文件,要求远程连接时使用ansible用户并以sudo的方式执行:

[root@server1 playbook]# vim ansible.cfg
[root@server1 playbook]# cat ansible.cfg 
[defaults]
remote_user = ansible

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

在jenkins创建一个ansible项目:

在这里插入图片描述在执行ansible playbook时需要ssh免密,但是jenkins在构建的时候使用的是普通用户jenkins,因此需要在这个用户下做免密:

[root@server2 ~]# usermod -s /bin/bash jenkins 
[root@server2 ~]# su - jenkins 
-bash-4.2$ ssh-keygen 

Enter passphrase (empty for no passphrase): 		#输入通行码
Enter same passphrase again: 

-bash-4.2$ ssh-copy-id ansible@172.25.63.4
-bash-4.2$ ssh-copy-id ansible@172.25.63.3

以上远程连接使用的用户是普通用户ansible,需要在客户端主机添加这个用户并进行配置:

[root@server4 ~]# useradd ansible
[root@server4 ~]# passwd ansible			#设置密码

[root@server4 ~]# visudo

ansible ALL=(ALL)       NOPASSWD: ALL

在这里插入图片描述在server3进行与server4同样的配置。

配置jenkins项目ansible:

在这里插入图片描述保存后在gitlab主机push测试文件:

[root@server1 playbook]# git add .
[root@server1 playbook]# git commit -m "add playbook"
[root@server1 playbook]# git push -u origin master 

push后查看gitlab:
在这里插入图片描述会触发jenkins项目的触发:
在这里插入图片描述可以看到创建成功。

此时在jenkins主机查看workspace:

[root@server2 ~]# su - jenkins 
-bash-4.2$ cd workspace/
-bash-4.2$ ls
ansible  ansible@tmp  docker  test  test@tmp
-bash-4.2$ cd ansible
-bash-4.2$ ls
ansible.cfg  inventory  playbook.yml  README.md

可以看到已经拿到了gitlab中的文件。

接下来使用参数化构建jenkins,在ansible项目的配置中:
在这里插入图片描述构建中选择执行shell,并运行ansible playbook:
在这里插入图片描述保存后可以开始构建,首先需要选择构建参数:
在这里插入图片描述根据inventory文件的信息,选择test参数就意味着在server4远程执行这个playbook,点击开始构建,查看控制台输出:
在这里插入图片描述
可以看出构建成功:在这里插入图片描述
在网页测试访问httpd:
在这里插入图片描述部署成功。

当然也可以将参数设置为prod,那么就会在server3部署httpd。

需要注意的是当构建时需要保证客户端主机的80端口不被占用,否则会构建失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值