環境準備html
三臺主機:linux
一臺主機部署jenkins和做爲ansible的管理主機nginx
一臺主機部署gitlab和ansible的節點1git
一臺主機爲ansible的節點2web
防火牆和apache服務關閉apache
第一步:gitlab的安裝即配置vim
請參考我以前的博客《Gitlab的倉庫搭建以及在linux/windows中免密使用》windows
第二步:建立項目ssh
以下圖,我建立了一個nginxinstall的項目ide
Git下載倉庫
第一步:建立目錄並下載倉庫
[root@ken ~]# mkdir /ken [root@ken ~]# cd /ken [root@ken ken]# git clone http://192.168.253.153/root/nginxinstall.git Cloning into 'nginxinstall'... Username for 'http://192.168.253.153': root Password for 'http://root@192.168.253.153': remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done.
若是想要免密操做的化就執行:
ssh-kengen 和
ssh-copy-id 192.168.253.154
ssh-copy-id 192.168.253.155
或者添加密鑰到gitlab的ssh_key裏
Ansible劇本編寫
第一步:進入到建立的項目nginxinstall目錄中
而後在此目錄下編寫ansible劇本**
[root@ken ken]# ls nginxinstall [root@ken ken]# cd nginxinstall/ [root@ken nginxinstall]# ls -a . .. .git README
第二步:使用roles來編寫劇本
首先須要建立相關的目錄,在nginxinstall的目錄下
mkdir -pv roles/nginx/{files,vars,tasks,templates}
第三步: 編寫tasks任務
- name: yum install nginx
yum: name=nginx state=present
- name: copy test to nginx templates: src=roles/nginx/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf - name: start nginx service: name=nginx state=restarted
- name: copy file to nginx copy: src=roles/nginx/files/index.html dest=/var/www/html
這裏使用templates模塊和jinja2模塊,更改配置文件的信息爲變量。
第四步:編寫vars任務
port: 83 #自定義端口號.用戶目錄等 host_user: root conn: 2048 dir: /var/www/html
此任務編寫後經過查看節點的配置文件更改與否就能夠知道templates模塊和vars任務是否成功。
第五步:
第五步:編寫主機清單
[root@ken nginxinstall]# cat inventory/test [test] 192.168.253.153
192.168.253.152
第六步:編寫劇本文件
[root@ken nginxinstall]# vim test.yml
[root@ken nginxinstall]# cat test.yml
- hosts: test
remote_user: root
roles:
- nginx #這裏必定得是roles的下一級目錄
第七步:執行劇本
注意:在執劇本的時候須要使用 -i 指定你建立的主機列表清單,不然會找不到須要執行的節點
ansible-playbook -i inventory/test test.yml (若是須要模擬執行,則須要在-i前面加一個 -C)
第八步:網頁瀏覽
如今就能夠登陸該節點進行訪問了,查看files目錄裏面的文件內容是否顯示。
文件提交至gitlab
通過上面的步驟以後,已經部署完成了一個靜態頁面
如今把這些文件提交至gitlab
第一步:文件提交至倉庫
[root@ken nginxinstall]# git add . [root@ken nginxinstall]# git commit -m "v1"
第二步:報錯
提交若是報了這個錯,則是由於須要身份驗證
*** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'root@ken.(none)')
直接執行命令
[root@ken nginxinstall]# git config --global user.email "you@example.com" [root@ken nginxinstall]# git config --global user.name "Your Name"
這就是一個身份驗證。
第三步:推送至gitlab
[root@ken nginxinstall]# git push -u origin master warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) Username for 'http://192.168.253.153': root #輸入鏈接你的gitlab的用戶名 Password for 'http://root@192.168.253.153': #輸入該用戶密碼 Counting objects: 12, done. Compressing objects: 100% (5/5), done. Writing objects: 100% (11/11), 815 bytes | 0 bytes/s, done. Total 11 (delta 0), reused 0 (delta 0) To http://10.220.5.137/webg1/static_web.git c47e814..e2ac703 master -> master
第四步:進入gitlab網頁裏面查看是否推送成功
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的持續集成實驗成功。