天天看點

CI/CD之jenkins結合ansible部署apache

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端斷開連接配接

CI/CD之jenkins結合ansible部署apache

然後删除代理

CI/CD之jenkins結合ansible部署apache

将master端的任務數恢複到兩個

CI/CD之jenkins結合ansible部署apache

因為gitlab比較占用記憶體,是以可以不用gitlab,使用gitee;用gitee部署webhook時要連接配接你的主機,最好主機是個雲主機

部署步驟

安裝ansible

配置ansible的yum源,具體可檢視之前文章

CI/CD之jenkins結合ansible部署apache

安裝ansible

CI/CD之jenkins結合ansible部署apache

建立新git項目

gitlab中建立項目playbook

CI/CD之jenkins結合ansible部署apache

建立一個空白項目

CI/CD之jenkins結合ansible部署apache

server1克隆gitlab的項目playbook,産生了playbook目錄

CI/CD之jenkins結合ansible部署apache

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配置檔案

CI/CD之jenkins結合ansible部署apache

給apache配置檔案改個名

最終目錄結構如下

CI/CD之jenkins結合ansible部署apache

送出上傳到gitlab

CI/CD之jenkins結合ansible部署apache

推送成功

CI/CD之jenkins結合ansible部署apache

jenkins測試配置

建立一個任務

CI/CD之jenkins結合ansible部署apache

告訴倉庫位址

CI/CD之jenkins結合ansible部署apache

先簡單的執行ls指令看能不能從倉庫成功拉取

CI/CD之jenkins結合ansible部署apache

觸發任務,檢視建構曆史,建構成功,沒有問題

CI/CD之jenkins結合ansible部署apache

使用者設定

因為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密鑰

CI/CD之jenkins結合ansible部署apache

将密鑰給server3、4的devops使用者都發過去

CI/CD之jenkins結合ansible部署apache

現在就可以免密登入了

CI/CD之jenkins結合ansible部署apache

給server3、4的devops使用者授予所有權限并且不需要密碼

CI/CD之jenkins結合ansible部署apache

jenkins部署

到jenkins頁面ansible項目的配置,設定參數化建構,選項參數,即使用變量

CI/CD之jenkins結合ansible部署apache

deploy是變量,它有兩個選項test和prod

CI/CD之jenkins結合ansible部署apache

執行shell中寫入以下内容

cd $WORKSPACE	#進入工作目錄,一定要在workspace目錄下才能讀到我們寫的ansible主配置檔案
ansible-playbook -i inventory/$deploy playbook.yaml		#根據選擇的配置清單(選擇test或prod)執行playbook
           
CI/CD之jenkins結合ansible部署apache

更改完後記得儲存

部署測試

根據我們的設定,可以選擇在測試環境部署還是在生産環境部署

CI/CD之jenkins結合ansible部署apache

在測試環境測試

選擇test測試,到控制台檢視部署成功

CI/CD之jenkins結合ansible部署apache

檢視端口,部署成功

CI/CD之jenkins結合ansible部署apache

在生産環境部署

測試環境沒問題了就可以往生産環境裡部署了,選擇prod建構;到控制台檢視部署成功

CI/CD之jenkins結合ansible部署apache

檢視端口,部署成功

CI/CD之jenkins結合ansible部署apache

建議

如果節點數不多,可以使用ansible來部署,但一旦節點成千上萬了,ssh連接配接(預設是并發)速度肯定會明顯慢下來。

是以當節點多的時候,用saltstack更快一點,因為saltstack是使用消息隊列的。