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新建一個項目:

在這裏插入圖片描述在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端口不被佔用,否則會構建失敗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章