(1)Continuous integration (CI)css
持續集成是一種軟件開發實踐,即團隊開發成員常常集成他們的工做,一般每一個成員至少集成一次,也就意味着天天可能會發生屢次集成。每次集成都經過自動化的構建(包括編譯、發佈、自動化測試)來驗證,從而儘快地發現集成錯誤。許多團隊發現這個過程能夠大大減小集成的問題,讓團隊可以更快的開發內聚的軟件。html
(2)沒有持續集成nginx
項目作模塊集成的時候,發現不少接口都不通==>浪費大量時間git
須要手動去編譯打包最新的代碼==>構建過程不透明web
發佈代碼,上線,基本靠手工==>腳本亂飛shell
(3)持續集成最佳實踐:vim
維護一個單一的代碼庫後端
使構建自動化api
執行測試是構建的一部分安全
集成日誌及歷史記錄
使用統一的依賴包管理庫
天天至少集成一次
如何安裝Jenkins此文省略,可參考 安裝文檔
(1)登陸Jenkins webUI界面建立第一個項目
(2)輸入項目名稱(My-freestyle-job)並選擇構建一個自由風格的軟件項目
(3)上面建立完成後跳轉進來後進行配置,選擇丟棄舊的構建(下面保持天數通常在5~7天便可)
(4)接着上面選擇構建,而後選擇Execute Shell 來執行shell命令
(5)既然能執行shell命令,那麼咱們執行一個pwd,看下默認的工做目錄在哪裏
(6)上面保存後點擊當即構建,就會在下面生成一個build history,(出現藍色即表示正常,若紅色即表示有問題)
(7)構建完成,咱們能夠點擊build ID下拉框選擇Console Output 來查看詳細信息
(8)經過輸出信息咱們能夠看到Jenkins默認的工做目錄在 /var/lib/jenkins/workspace/(項目名稱)
(9)既然能執行shell命令,那麼咱們建立一個文件試試;返回工做臺,點擊配置
(10)建立一個test.txt文件並保存
(11)同上面同樣,咱們點擊當即構建
(12)一樣查看構建後的控制檯輸出,能夠看到構建成功
(13)既然構建成功,那麼咱們進入服務器進行驗證是否建立成功
[root@jenkins ~]# cd /var/lib/jenkins/workspace/My-freestyle-job/ #進入到項目目錄 [root@jenkins My-freestyle-job]# [root@jenkins My-freestyle-job]# ls #查看確實建立了文件 test.txt [root@jenkins My-freestyle-job]# rm -rf test.txt #由於沒有什麼用,測試完了,咱們將其刪除 [root@jenkins My-freestyle-job]#
流程圖示例:
說明:
經過gitlab+Jenkins實現代碼的自動更新同步代碼到web服務器站點目錄。此處示例後端web服務器使用nginx。本次項目示例使用碼雲上面的一個html項目(https://gitee.com/kangjie1209/monitor.git)
環境說明:
192.168.1.21 | GitLab服務器 |
192.168.1.22 | Jenkins服務器 |
192.168.1.26 | Nginx服務器 |
https://gitee.com/kangjie1209/monitor.git 項目訪問示意圖:
說明:
首先咱們在gitlab上面建立一個羣組,並建立一個dev開發用戶(用於提交代碼等),同時在Jenkins服務器上面生成ssh祕鑰並將key添加到新建用戶dev的ssh認證下面,並建立一個代碼倉庫,並將代碼copy進去。
具體操做步驟:
(1)登陸gitlab點擊項目,而後點擊建立一個羣組
(2)點擊新建羣組
(3)輸入新建羣組的相關信息並點擊建立
(4)點擊設置選擇新建用戶
(5)輸入帳號相關信息並點擊建立用戶
(6)點擊編輯,爲上面新建立的用戶設置密碼
(7)給這個帳號設置密碼並保存
(8)將上面建立的用戶添加到devops組中並給與開發者權限
(9)找到剛剛建立的dev用戶並給予開發人員權限,而後增長用戶到羣組
(10)回到Jenkins上面生成ssh祕鑰
[root@jenkins ~]# ssh-keygen [root@jenkins ~]# cat .ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt9+3rxKFGTEeT4F4q4AEc+So3A4jMBMpW6Ojoy5h1VQhNVV6meuOGp7ltJXtmY0Bm7tw8S/KDVXPSCvDi3QQgzWe2ZQmG+Y62SKcXpDxOJue98OHDNoxcm2kJl/xeFZddQZd6eohbBA9Au4SPMINLsGR6MEYXH4JHM6rXzf9QN4Q5GYYEFTTZvu/PxoDq46+A/mkO5aklBjaih6YSH3q7nr2rEhQJ64b6wEkfBjptfzKm54TZBJAPzycHrXe5P68tPZ2CNgJN+40XGrkg/MVjf9D9EwjyvsNcdLzTHDsClc3Jh8/8tfSFFzVFonyKyjal9amCvzdVbnUEqQSgRTWT root@jenkins
(11)回到gitlab服務器上面使用dev用戶登陸,而後點擊頭像選擇設置
(12)上面的設置點進來後,選擇SSH 祕鑰, 而後複製Jenkins服務器上生成的祕鑰而後點擊增長祕鑰
(13)切回root用戶,新建一個項目
(14)選擇導入項目並輸入相關信息,而後點擊建立項目
(15)導入成功後能夠看見代碼和導入成功提示,至此gitlab暫時部署到此
說明:
仍是使用前面示例建立的My-freestyle-job項目,配置導入上面gitlab建立的項目
具體操做步驟:
(1)點擊項目名稱開始配置
(2)上面點擊進去後點擊配置
(3)選擇源碼管理,選Git,輸入倉庫URL地址(若是下方出現紅色及表示出錯了),而後選擇保存
(4)當即構建
(5)查看構建詳細信息
(6)進入到服務器中查看項目目錄是否將代碼拉取成功
[root@jenkins ~]# cd /var/lib/jenkins/workspace/My-freestyle-job/ [root@jenkins My-freestyle-job]# ls 404.html efficiencyAnalysis.html js other-components.html alerts.html energy_consumption.html keyInfo.html profile-page.html assets file-manager.html labels.html QHME.iml buttons.html fonts LICENSE readme.md calendar.html form-components.html list-view.html real-time.html charts.html form-elements.html login.html sa.html components.html form-examples.html media tables.html content-widgets.html form-validation.html media.html test.txt css images-icons.html messages.html typography.html deviceManager.html img mstp_105_SuperAdmin.iml userMng.html dianfei.html index.html mstp_map.html
能夠看到Jenkins已經成功從gitlab上面拉取代碼,接下來咱們先將Web站點配置好再看如何自動同步到Web服務器上面。
說明:
此處咱們直接yum安裝nginx,站點目錄就用默認的 /usr/share/nginx/html 目錄。
詳細操做步驟:
(1)安裝nginx並修改測試頁面
[root@web-nginx ~]# yum install nginx -y [root@web-nginx ~]# ll /usr/share/nginx/ 總用量 0 drwxr-xr-x. 2 root root 24 3月 29 00:13 html [root@web-nginx ~]# echo "<h1>Web Server</h1>" > /usr/share/nginx/html/index.html [root@web-nginx ~]# systemctl start nginx [root@web-nginx ~]# curl -I localhost HTTP/1.1 200 OK Server: nginx/1.12.2 Date: Wed, 27 Mar 2019 14:37:45 GMT Content-Type: text/html Content-Length: 3700 Last-Modified: Tue, 06 Mar 2018 09:26:21 GMT Connection: keep-alive ETag: "5a9e5ebd-e74" Accept-Ranges: bytes
(2)訪問nginx服務器
nginx站點部署ok,接下來就是實現如何構建夠自動同步到nginx服務器
說明:
上面已經完成了Jenkins從gitlab上面拉取代碼,及nginx web服務器站點的佈置,如今須要實現的是如何Jenkins上面構建後自動同步到web服務器。想一下,在上面咱們能夠執行shell命令,那麼必定也就能夠執行shell腳本。so 咱們編輯一個同步腳本,而後構建觸發腳本同步到web服務器上面。
具體操做步驟:
(1)在Jenkins服務器上面編寫同步腳本,因爲是經過腳本拷貝到web服務器的站點目錄,因此須要先作一個ssh祕鑰認證
[root@jenkins ~]# ssh-copy-id -i 192.168.1.26 [root@jenkins ~]# mkdir /server/scripts -p [root@jenkins ~]# cd /server/scripts/ [root@jenkins scripts]# vim deploy.sh #!/bin/bash CODE_DIR="/var/lib/jenkins/workspace/My-freestyle-job/" #項目目錄 DATE_TIME=`date +%Y-%m-%d-%H-%M-%S` #時間格式 TAR_NAME=web-${DATE_TIME}.tar.gz #打包後的名字 WEB_ADDR=192.168.1.26 #web服務器地址 WEB_DIR="/usr/share/nginx/" #web服務器站點目錄的上一級 "/usr/share/nginx/html" WEB_NEWDIR_NAME=web-${DATE_TIME} #web服務器新建的站點目錄名字 #進入到項目目錄並進行打包代碼 tarcf_code(){ cd $CODE_DIR && tar czf /opt/$TAR_NAME ./* } #拷貝到web服務器的站點目錄的上一級 scp_code(){ scp /opt/$TAR_NAME $WEB_ADDR:$WEB_DIR } #鏈接web服務器進行解壓壓縮包到新的一個已時間命名的站點目錄 tarxf_code(){ ssh $WEB_ADDR "cd $WEB_DIR && mkdir $WEB_NEWDIR_NAME && tar xf $TAR_NAME -C $WEB_NEWDIR_NAME" } #將新建的站點目錄與html站點目錄作一個軟連接 ln_code(){ ssh $WEB_ADDR "cd $WEB_DIR && rm -rf html && ln -s $WEB_NEWDIR_NAME html" } del_code(){ ssh $WEB_ADDR "cd $WEB_DIR && rm -rf $TAR_NAME" } main(){ tarcf_code; scp_code; tarxf_code; ln_code; del_code; } main
(2)配置Jenkins,使用Jenkins調用部署腳本(此處寫腳本全路徑腳本名稱)
(3)配置自動觸發構建、須要設置安全令牌Secret token,進入項目選擇配置,設置相關信息,而後生成token,複製token(須要填寫到gitlab上面)和Build when a chang上面提示的URL地址(http://192.168.1.22:8080/project/My-freestyle-job)
(4)配置gitlab,添加token
(5)測試Web鉤子
(6)上面已經配置完成,接下來就是測試,咱們知道目前web服務站點訪問獲得的一個「Web Server」, 在另一臺機器上面克隆代碼並進行修改(此處我就使用Jenkins順便來作測試了),而後推送gitlab倉庫
[root@jenkins ~]# git clone git@192.168.1.21:devops/monitor.git [root@jenkins ~]# [root@jenkins ~]# cd monitor/ [root@jenkins monitor]# [root@jenkins monitor]# vim index.html //將裏面的」移動能效管理平臺「 所有改爲」GitLab+Jenkins自動化「 [root@jenkins monitor]# [root@jenkins monitor]# git add . [root@jenkins monitor]# [root@jenkins monitor]# git commit -m "update index.html" [root@jenkins monitor]# [root@jenkins monitor]# git push origin master
(7)訪問web站點,刷新頁面
(8)從上面頁面能夠看見已經自動更新了代碼,接下來咱們查看web服務器上面的web站點目錄
[root@web-nginx ~]# ll /usr/share/nginx 總用量 4 lrwxrwxrwx. 1 root root 23 3月 29 12:21 html -> web-2019-03-29-12-20-51 drwxr-xr-x. 2 root root 170 3月 27 22:03 modules drwxr-xr-x. 8 root root 4096 3月 29 12:20 web-2019-03-29-12-20-51 [root@web-nginx ~]# ls /usr/share/nginx/html/ 404.html efficiencyAnalysis.html js other-components.html alerts.html energy_consumption.html keyInfo.html profile-page.html assets file-manager.html labels.html QHME.iml buttons.html fonts LICENSE readme.md calendar.html form-components.html list-view.html real-time.html charts.html form-elements.html login.html sa.html components.html form-examples.html media tables.html content-widgets.html form-validation.html media.html test.txt css images-icons.html messages.html typography.html deviceManager.html img mstp_105_SuperAdmin.iml userMng.html dianfei.html index.html mstp_map.html
從上面咱們能夠看到站點目錄多了一個「web-2019-03-29-12-20-51」目錄, 且與html目錄作了一個軟連接,這樣每次更新代碼都會新建一個目錄與站點目錄作軟連接,(好處,若是開發發現代碼有bug,還能夠及時回滾到前面的版本)至此,就完成了自動更新代碼。
(1)先在gitlab上面生成訪問令牌token,點擊用戶處的設置
(2)訪問令牌——>輸入名稱——>選擇範圍爲api——>建立我的訪問令牌,將生成的令牌token複製
(3)登陸Jenkins——>選擇系統管理——>選擇系統設置——>選擇Gitlab——輸入名字——>輸入URL——點擊Add
(4)上面點擊Add進來後,kind處選擇Gitlab API token,粘貼上面複製的token,自定義ID和描述
(5)上面添加後,回到這裏選擇剛剛生成的這個token。而後點擊保存
(6)上面保存後,進入到項目裏選擇配置,配置構建後操做,選擇Publish ... to ...Gitlab,選擇後直接保存就ok
(7)測試,點擊當即構建
(8)回到gitlab上面查看,那裏生成了一個對號
(9)點擊對號,進來後能夠看到流水線,下面一些信息,好比狀態,提交等。
(10)點擊上面Status下面的對號,能夠看到以下圖同樣的有個jenkins-success
(11)再點擊jenkins就跳轉到jenkins上面去了,也能夠查看輸出,還能夠查看工做空間,能夠查看到全部代碼,返回的話只能選擇後退。
以上就完成了配置構建狀態返回到gitlab