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

主机准备:

主机 ip 作用
server1 172.25.63.1 gitlab主机
server2 172.25.63.2 jenkins+ansible主机
server3 172.25.63.3 客户端主机
server4 172.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新建一个项目:

jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第1张图片在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项目:

jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第2张图片在执行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

jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第3张图片在server3进行与server4同样的配置。

配置jenkins项目ansible:

jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第4张图片保存后在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 + gitlab + ansible 实现自动触发更新_第5张图片会触发jenkins项目的触发:
jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第6张图片可以看到创建成功。

此时在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项目的配置中:
jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第7张图片构建中选择执行shell,并运行ansible playbook:
jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第8张图片保存后可以开始构建,首先需要选择构建参数:
jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第9张图片根据inventory文件的信息,选择test参数就意味着在server4远程执行这个playbook,点击开始构建,查看控制台输出:
jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第10张图片
可以看出构建成功:jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第11张图片
在网页测试访问httpd:
jenkins(四)--- jenkins + gitlab + ansible 实现自动触发更新_第12张图片部署成功。

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

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

你可能感兴趣的:(企业实战,linux,git,gitlab,ansible,jenkins)