一、環境配置
192.168.42.8部署gitlab,節點一
192.168.42.9部署git,Jenkins,ansible服務器
192.168.42.10節點二
二、操作演示
①gitlab創建新的nginx項目
創建目錄及克隆
[root@localhost ~]# mkdir nn [root@localhost ~]# cd nn [root@localhost nn]# git clone http://192.168.42.8/root/nginx.git Cloning into 'nginx'... warning: You appear to have cloned an empty repository. [root@localhost nn]# ls nginx [root@localhost nn]# cd nginx/ [root@localhost nginx]# ls -a . .. .git
②發送密鑰
[root@localhost nginx]# ssh-keygen [root@localhost nginx]# ssh-copy-id 192.168.42.8 [root@localhost nginx]# ssh-copy-id 192.168.42.10
③創建roles相關目錄,並編寫相關文件
1.創建roles目錄
[root@localhost nginx]# mkdir roles/nginx/{files,template,vars,tasks} -p
2.編寫vars文件 [root@localhost nginx]# vim roles/nginx/vars/main.yaml [root@localhost nginx]# cat roles/nginx/vars/main.yaml conn: 2048 host_user: root por: 83 docu_root: /var/www/html
3.復制nginx至template下 [root@localhost nginx]# cp /etc/nginx/nginx.conf roles/nginx/template/nginx.conf.j2
4.編輯nginx.conf,修改變量 [root@localhost nginx]# vim roles/nginx/template/nginx.conf.j2 user {{ host_user }}; worker_connections {{ conn }}; listen {{ por }}; root {{ docu_root }};
5.編輯tasks文件 [root@localhost nginx]# cat roles/nginx/tasks/main.yaml - template: src=roles/nginx/template/nginx.conf.j2 dest=/etc/nginx/nginx.conf - yum: name=nginx state=present - service: name=nginx state=restarted - copy: src=roles/nginx/files/index.html dest=/var/www/html
6.編寫測試文件 [root@localhost nginx]# echo 'I will success' >> roles/nginx/files/index.html [root@localhost nginx]# ls roles/nginx/files/ index.html 7.編寫清單文件 [root@localhost nginx]# cat inventory/jams [jams] 192.168.42.8 192.168.42.10 8.編寫劇本 [root@localhost nginx]# cat jams.yaml - hosts: all roles: - nginx
9.模擬執行劇本 [root@localhost nginx]# ansible-playbook -C -i inventory/jams jams.yaml [root@localhost nginx]# ansible-playbook -i inventory/jams jams.yaml
10.提交 [root@localhost nginx]# git add . [root@localhost nginx]# git commit -m v1 [root@localhost nginx]# git push -u origin master
jenkins 實現持續集成
經過上面的一些操作之后,我們已經完成了靜態網站的部署,以及代碼的上傳
但是發現還是每次執行需要輸入命令等
現在我們就使用jenkins來實現持續化部署
第一步:jenkins中創建任務
創建了一個自由風格的軟件項目
項目名稱為item7
第二步:添加源碼管理信息
這里的url就是你的項目的地址(即gitlab的倉庫鏈接地址)
下面的憑證輸入之前添加的全局憑據的賬號和密碼。
用腳本構建,cd到workspace下。
創建的bubu文件以及此次的任務名目錄(任務名是一個worksapce下的目錄)都會在workspace目錄下。
可以看到我的任務腳本內執行ansible時並沒有指定清單inventory/test 這是因為我選擇了在/etc/ansible/hosts里面配置主機信息,這也是一種方法。
三:選擇立即構建執行任務。
可能會碰到以下報錯:
1)這里的失敗原因是因為運行jenkins程序的是jenkins用戶,我們連接節點的秘鑰是root的,所以現在連接不上
打開配置文件/var/lib/jenkins 將jenkins用戶改為root用戶即可。
2)有時候報錯時因為各主機之間的時間不同步,使用ntpdate同步時間后再次嘗試。
3)有時候部署gitlab的節點無法啟動nginx服務這是因為gitlab會自動啟動nginx,使用gitlab-ctl stop nginx,然后再啟動即可。
4)更有時候部署gitlab的ip換了,但是倉庫的鏈接地址還是沒變,這在gitlab網頁上不好修改,我們在做git clone克隆的時候以及用gitlab做持續集成的時候就需要自己手動修改。
5)如果做jenkin持續集成構建時報錯 playbook xxx not found (找不到劇本)
或者其中一台節點無法重啟nginx服務
在部署jenkins服務的主機上提交推送文件給gitlab倉庫
然后試試關閉防火牆和重啟jenkins服務。
6)如果報錯找不到repository或者master分支,這是因為gitlab創建新項目的時候沒有創建搭建本地倉庫。
四:如果構建成功的話,可以去linux下的/var/lib/jenkins/workspace/下去查看是否含有bubu文件。
來證明gitlab+ansible+jenkins的持續集成實驗成功。