持續集成+自動化部署[代碼流水線管理及Jenkins和gitlab集成]


一、代碼流水線管理

  Pipeline名詞顧名思義就是流水線的意思,因為公司可能會有很多項目。如果使用jenkins構建完成后,開發構建項目需要一項一項點擊,比較麻煩。所以出現pipeline名詞。 
  代碼質量檢查完畢之后,我們需要將代碼部署到測試環境上去,進行自動化測試

新建部署代碼項目 
點擊新建 
image_1b4l7mhmml3216gaifh1lfemo99.png-50.2kB 
image_1b4l7mnvr1h6aj5v1c541ksk1m4tm.png-110.5kB 
這里只需要寫一下描述 
image_1b4l7osk51pd713ba1vlptmj1lu13.png-55.3kB 
執行Shell腳本 
image_1b4l7p42mlgd161ia981i8e12e31g.png-27.3kB

溫馨提示:執行命令主要涉及的是權限問題,我們要搞明白,jenkins是以什么權限來執行命令的。那么問題來了,我們現在192.168.56.11上,如果在想192.168.56.12上執行命令。需要怎么做呢?

我們做無秘鑰有2種分案:

1、使用jenkins用戶將秘鑰分發給192.168.56.12上 
2、使用root用戶將秘鑰分發給192.168.56.12上,如果使用root用戶還要進行visudo授權。因為Web上默認執行命令的用戶是jenkins

1.我們使用root做密碼驗證 
#這里我們的key已經做好,如果沒做可以直接 ssh-keygen -t ras 來生成秘鑰 
我們將192.168.56.11上的公鑰復制到192.168.56.12上

[root@linux-node1 ~]# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChVQufrGwqP5dkzIU4ZwXCjRuSvMVGN5lJdvL/QFckmlVphWMsQw06VsPhgcI1NDjGbKOh5pbjrylyJUCig5YIJ1xuMOZ2YAK32SceMxnVhEb/G4wNb9VMsGQ/Vs4CxrU1HdATktH9zDAV4Qz81x2POYJW5B5LAvwZ4owqnIpZ7o3ya6xBxEvCIMSVtD17oKrNqAphsg+e68KvRexiNCEbCbRGGq3bKevgiDsWpSGnCYsJC0+cSrUxuzEO3G6AqGI/qR3nOeg91rOsoAP3FpFjBKgb/sXggkwwjmGIqFXJrUG+XmczeF4kG/rUrNbdy84e5RyHoIS3XKnJuRjTxHyD root@linux-node1 [root@linux-node2 ~]# vim .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChVQufrGwqP5dkzIU4ZwXCjRuSvMVGN5lJdvL/QFckmlVphWMsQw06VsPhgcI1NDjGbKOh5pbjrylyJUCig5YIJ1xuMOZ2YAK32SceMxnVhEb/G4wNb9VMsGQ/Vs4CxrU1HdATktH9zDAV4Qz81x2POYJW5B5LAvwZ4owqnIpZ7o3ya6xBxEvCIMSVtD17oKrNqAphsg+e68KvRexiNCEbCbRGGq3bKevgiDsWpSGnCYsJC0+cSrUxuzEO3G6AqGI/qR3nOeg91rOsoAP3FpFjBKgb/sXggkwwjmGIqFXJrUG+XmczeF4kG/rUrNbdy84e5RyHoIS3XKnJuRjTxHyD root@linux-node1 [root@linux-node1 ~]# ssh 192.168.56.12 The authenticity of host '192.168.56.12 (192.168.56.12)' can't be established. ECDSA key fingerprint is b5:74:8f:f1:03:2d:cb:7d:01:28:30:12:34:9c:35:8c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.56.12' (ECDSA) to the list of known hosts. Last login: Sat Dec 17 02:14:31 2016 from 192.168.56.1 [root@linux-node2 ~]# ll total 4 -rw-------. 1 root root 1021 Dec 13 05:56 anaconda-ks.cfg #現在SSH連接就不需要密碼了 授權jenkins用戶,使用visudo或者編輯配置文件/etc/sudoers [root@linux-node1 ~]# vim /etc/sudoers 92 jenkins ALL=(ALL) NOPASSWD:/usr/bin/ssh #jenkins授權所有主機,不需要密碼執行ssh。切記不要授權ALL

我們在192.168.56.12上寫一個簡單shell腳本,檢測是否可以執行成功。正式環境可以寫一個自動化部署的腳本

[root@linux-node2 ~]# echo "echo "hello word"" >demo.sh [root@linux-node2 ~]# chmod +x demo.sh [root@linux-node2 ~]# ll demo.sh -rwxr-xr-x 1 root root 16 Dec 17 02:24 demo.sh
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

jenkins編寫執行腳本 
image_1b4l7so1c1j5kustgu71as31nas1t.png-22.5kB 
然后我們點擊立即構建 
image_1b4l7svdq1eq21q0r15sc19g2k7r2a.png-56.1kB 
成功! 
image_1b4l7tbqilp2ejt1bgs1jkcvjr2n.png-50.4kB 
現在我們要將代碼質量管理和測試部署連接起來。

這時候就用到了Git鈎子 
我們需要安裝jenkins插件parameterized 
image_1b4l7u8lcmsc1ifl9738oqeqi34.png-67.9kB

我們選擇demo-deploy 
image_1b4l811k3ukgb0u148a6jf1ncp3h.png-83.9kB

再次點擊項目設置的時候就會出現Trigger parameterized build on other projects 
image_1b4l81f97buo1k6j1g2016r0vki3u.png-55.1kB 
提示:Projects to build是為構建設置一個項目。例如我們想構建完代碼項目后執行測試的,這里就填寫測試的就可以。

image_1b4l81t5rj02npr8i397t7134b.png-33.5kB

最后點擊保存,點擊構建。我們查看效果 
image_1b4l825oktjevtg7hl16v7bsh4o.png-27.2kB 
image_1b4l82e34g9mih2vnqhhv130155.png-38.3kB 
#這樣我們每次點擊demo-deploy 它就會在構建完成之后在對auto-deploy進行構建

下載pipeline。這樣只需要構建一個項目,就會幫我們完成所有相關項目 
搜索插件pipeline 
image_1b4l83oko147g84cr07193465f5i.png-123.2kB 
等待安裝完成 
image_1b4l83vbo15c11s541bg61splt8k5v.png-27.5kB 
我們點擊首頁+號,新建一個試圖 
image_1b4l8480bgv01fe7jks18ptbi46c.png-56.4kB 
點擊OK 
image_1b4l84fdolbrupe1ntl1gn9be6p.png-53kB 
pipeline 配置 
image_1b4l84omnfkn19s61tpph81tmv76.png-44.4kB 
image_1b4l84tqkvkh27k1ct91cc1q97j.png-40kB 
然后我們點擊保存

pipeline視圖如下: 
image_1b4l85coe19ut1varctmgf81jv980.png-122.2kB 
點擊Run 
image_1b4l85l771i5fl529q0t69bpa8d.png-37kB 
這樣就先代碼質量進行管理,然后就開始部署了

構建成功后: 
image_1b4l85th6lhh13iufk8dcruud8q.png-34.8kB 
這樣我們下次想看pipeline視圖的時候,點擊上面的demo-pipeline即可 
image_1b4l866d2nqf179714b85fc6r997.png-56.5kB

二、Jenkins + gitlab集成

Jenkins + gitlab集成后,實現的功能是 開發寫好代碼提交至gitlab上,當時開始push到gitlab上之后,jenkins自動幫我們立即構建

這個項目我們需要安裝一個gitlab鈎子的腳本

提示: jenkins不論想實現什么功能,都需要安裝插件!!

image_1b4l87o0q58d1bng5qohvg1lfp9k.png-51.4kB 
安裝完插件之后我們就開始配置鈎子腳本 
image_1b4l87uqq1pcqi6p1oj94p8qbpa1.png-64.4kB 
這里需要我們在服務器里面寫一個令牌,在jenkins上也寫一個令牌。這兩個可以連接到一起就可以。

#因為用到了令牌我們還需要在安裝一個插件,否則將無法使用。因為令牌是需要登錄之后才會有,所以需要有一個管理的插件

插件搜索:Build Aut 
image_1b4l88co647j1lkv1vb81l1819alae.png-29.4kB 
為了令牌的安全性,我們使用openssl生成一個

[root@linux-node1 ~]# openssl rand -hex 10 0a37c6d7ba1fe3472e26
  • 1
  • 2
  • 1
  • 2

image_1b4l88sjs1i0s1h751df01omoa7ar.png-68kB 
然后我們點擊保存即可

因為jenkins上也提示我們需要在gitlab上添加鈎子腳本

點擊我們創建的項目 
image_1b4l895jsiiiq0n62j125r1q8ab8.png-29.9kB 
選中Webhooks 
image_1b4l89cdp18ohdbbomnk8kqe9bl.png-56.7kB

Build Authorization Token Root Plugin 插件使用說明 
https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin

使用Build插件后,url如下:

http://192.168.56.11:8080/buildByToken/build?job=auto-deploy&token=0a37c6d7ba1fe3472e26 auto-deploy=項目名稱(構建時的項目名稱) 0a37c6d7ba1fe3472e26=jenkins填寫的令牌

image_1b4l8a3s41cc51ukp1uo11auc994c2.png-34.1kB 
然后點擊Add Webhook 
image_1b4l8adqahga1q4e6lmvhf6cacf.png-12.8kB 
下方就會出現我們這個選項,我們點擊Test進行測試 
image_1b4l8anrgv57h1g13nb1fdr5gpcs.png-16.2kB 
測試結果 
image_1b4l8b26012nekodouf14ub7lfd9.png-11.6kB

git服務器提交代碼,驗證是否可以自動部署:

[root@linux-node1 ~]# echo "Build Token Root Plugin" > index.html [root@linux-node1 ~]# git add index.html [root@saltmaster ~/weather]# git commit -m "text" [root@linux-node1 ~]# git push origin master
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

jenkins服務器的日志記錄:

[root@linux-node1 ~]# tail -f /var/log/jenkins/jenkins.log
  • 1
  • 1

image_1b4l8bjik1aosoio1hqg1pes8qtdm.png-35.4kB

jenkins項目構建: 
image_1b4l8cejv6rr191a3crpu4cfme3.png-17.2kB

訪問web界面驗證代碼是否最新的: 
jenkins控制台輸出信息: 
image_1b4l8cr6c1f0cqobd3m1r16c9geg.png-29.2kB

 轉載:http://blog.csdn.net/abcdocker/article/details/53840629
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM