Linux-GitLab+Jenkins持續集成+自動化部署

GitLab+Jenkins持續集成+自動化部署

什麼是持續集成?

(1)Continuous integration (CI)css

持續集成是一種軟件開發實踐,即團隊開發成員常常集成他們的工做,一般每一個成員至少集成一次,也就意味着天天可能會發生屢次集成。每次集成都經過自動化的構建(包括編譯、發佈、自動化測試)來驗證,從而儘快地發現集成錯誤。許多團隊發現這個過程能夠大大減小集成的問題,讓團隊可以更快的開發內聚的軟件。html

(2)沒有持續集成nginx

項目作模塊集成的時候,發現不少接口都不通==>浪費大量時間git

須要手動去編譯打包最新的代碼==>構建過程不透明web

發佈代碼,上線,基本靠手工==>腳本亂飛shell

(3)持續集成最佳實踐:vim

維護一個單一的代碼庫後端

使構建自動化api

執行測試是構建的一部分安全

集成日誌及歷史記錄

使用統一的依賴包管理庫

天天至少集成一次

熟悉Jenkins

如何安裝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實現自動更新代碼

流程圖示例:

 

說明:

  經過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配置

說明:

  首先咱們在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暫時部署到此

Jenkins配置

說明:

  仍是使用前面示例建立的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服務器上面。

Web Server站點配置

說明:

  此處咱們直接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,還能夠及時回滾到前面的版本)至此,就完成了自動更新代碼。

配置構建Jenkins返回構建狀態到gitlab

(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

相關文章
相關標籤/搜索