jenkins結合ansible部署apache
-
- 示範環境
- 部署步驟
-
- 安裝ansible
- 建立新git項目
- ansible主要端配置
- jenkins測試配置
- 使用者設定
- jenkins部署
- 部署測試
-
- 在測試環境測試
- 在生産環境部署
- 建議
示範環境
server1 192.168.122.11 gitlab端 4G記憶體
server2 192.168.122.12 jenkins-master端和ansible-master端 1G記憶體
server3 192.168.122.13 ansible(測試主機) 512Mi記憶體
server4 192.168.122.14 ansible(生産主機) 512Mi記憶體
gitlab、jenkins都是提前部署好的,具體可參照之前文章
gitlab:https://blog.csdn.net/m0_55005311/article/details/119605568?spm=1001.2014.3001.5502
jenkins:https://blog.csdn.net/m0_55005311/article/details/119607662?spm=1001.2014.3001.5502
我之前部署了agent端,現在将agent端斷開連接配接

然後删除代理
将master端的任務數恢複到兩個
因為gitlab比較占用記憶體,是以可以不用gitlab,使用gitee;用gitee部署webhook時要連接配接你的主機,最好主機是個雲主機
部署步驟
安裝ansible
配置ansible的yum源,具體可檢視之前文章
安裝ansible
建立新git項目
gitlab中建立項目playbook
建立一個空白項目
server1克隆gitlab的項目playbook,産生了playbook目錄
ansible主要端配置
ansible 主配置檔案
[[email protected] playbook]# vim ansible.cfg
[defaults]
command_warnings=False #忽略警告
remote_user=devops #遠端使用者叫devops,即控制端通路受控端是以什麼身份,之間以ssh方式連接配接
[privilege_escalation]
become=True
become_method=sudo #支援sudo
become_user=root #sudo時以root身份
become_ask_pass=False #sudo時不驗證
編寫配置清單
[[email protected] playbook]# mkdir inventory
[[email protected] playbook]# cd inventory/
[[email protected] inventory]# cat test #用來測試
server3 http_port=8080
[[email protected] inventory]# cat prod #用來部署生産環境
server4 http_port=80
編寫下載下傳apache的playbook
[[email protected] playbook]# cat playbook.yaml
---
- hosts: all #所有受控主機執行任務
tasks:
- name: install apache #安裝apache
yum:
name: httpd
state: present
- name: configure apache #配置apache
template: #使用jinjia模闆
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf #部署的位置
notify: restart apache #如果配置檔案變更了,通知handlers
- name: start apache #開啟apache
service:
name: httpd
enabled: yes #開機自啟
state: started
handlers: #如果收到通知,重新開機apache
- name: restart apache
service:
name: httpd
state: restarted
在其他主機下載下傳apache得到配置檔案,傳到playbook倉庫,然後修改apache配置檔案
給apache配置檔案改個名
最終目錄結構如下
送出上傳到gitlab
推送成功
jenkins測試配置
建立一個任務
告訴倉庫位址
先簡單的執行ls指令看能不能從倉庫成功拉取
觸發任務,檢視建構曆史,建構成功,沒有問題
使用者設定
因為jenkens流水線執行時使用的是jenkens使用者,在master節點上以jenkins使用者的身份遠端登陸至server3、4的devops使用者來執行部署指令。是以server2的jenkens使用者要和server3、4的devops使用者建立ssh連接配接免密登陸。
先在sercer3、4建立devops使用者并修改密碼:
[[email protected] conf]# useradd devops
[[email protected] conf]# id devops
uid=1000(devops) gid=1000(devops) groups=1000(devops)
[[email protected] conf]# echo devops | passwd --stdin devops
Changing password for user devops.
passwd: all authentication tokens updated successfully.
server2的jenkens使用者使用的是非互動式的shell,是以先修改為bash,以jenkens使用者登入,生成ssh密鑰
将密鑰給server3、4的devops使用者都發過去
現在就可以免密登入了
給server3、4的devops使用者授予所有權限并且不需要密碼
jenkins部署
到jenkins頁面ansible項目的配置,設定參數化建構,選項參數,即使用變量
deploy是變量,它有兩個選項test和prod
執行shell中寫入以下内容
cd $WORKSPACE #進入工作目錄,一定要在workspace目錄下才能讀到我們寫的ansible主配置檔案
ansible-playbook -i inventory/$deploy playbook.yaml #根據選擇的配置清單(選擇test或prod)執行playbook
更改完後記得儲存
部署測試
根據我們的設定,可以選擇在測試環境部署還是在生産環境部署
在測試環境測試
選擇test測試,到控制台檢視部署成功
檢視端口,部署成功
在生産環境部署
測試環境沒問題了就可以往生産環境裡部署了,選擇prod建構;到控制台檢視部署成功
檢視端口,部署成功
建議
如果節點數不多,可以使用ansible來部署,但一旦節點成千上萬了,ssh連接配接(預設是并發)速度肯定會明顯慢下來。
是以當節點多的時候,用saltstack更快一點,因為saltstack是使用消息隊列的。