一.自動化上線代碼基本介紹
1.軟件開發生命周期
老板創意---產品經理---立項---開發團隊---測試團隊(黑白盒)---運維上線
產品經理---加需求---開發團隊---測試團隊---運維更新代碼上線
2.什么是環境?
開發環境:開發自己用的電腦本地自己裝的php python的開發工具等。
測試環境:多個人的代碼合起來跑一遍,運行一次,測試mysql redis等。
預發布環境:直接連接線上數據庫,專門的測試域名小范圍內測試。
生產環境:線上環境 每個項目一套環境 (線下可以放一起配多域名 線上不行)。
3.什么是持續集成(CI)?
每天都進行一次代碼合並,就是持續集成。
多個開發寫的代碼 集中起來管理 放到代碼庫里 (版本控制管理軟件)代碼庫工具:svn git(多) 。(版本控制系統:類似於快照的增量備份的機制,也就是每一次版本更新,都會在原來的基礎上保留變化的內容,生成一個新的版本,之前的版本也會被保留,以便快速回滾。)
每天都要做代碼合並,防止沖突,在合並的時候會產生沖突,所以提交的時候有先后順序,就是你先上傳,然后我把你上傳的拉過來和我的進行合並,排除沖突,然后我在上傳到主分支。持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通常每個成員至少集成一次,也就意味着每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯、發布、自動化測試)來驗證,從而盡快地發現集成錯誤。許多團隊發現這個過程可以大大減少集成的問題,讓團隊能夠更快的開發內聚的軟件。
4.什么是持續交付?
開發首先進行單元測試---最后把所有代碼放一起進行測試---代碼質量檢查。
5.什么是持續部署?
頻繁的代碼上線就是持續部署。
6.沒有持續集成
項目做模塊集成的時候,發現很多接口都不通>浪費大量時間
需要手動去編譯打包最新的代碼>構建過程不透明
發布代碼,上線,基本靠手工==>腳本亂飛
7.持續集成最佳實踐
維護一個單一的代碼庫
使構建自動化
執行測試是構建的一部分
集成日志及歷史記錄
使用統一的依賴包管理庫
每天至少集成一次
二.jenkins基礎使用
說明:如何安裝Jenkins請參考文檔:https://www.jianshu.com/p/343bdd43c82a
這里就省略安裝。
1.登錄Jenkins webUI界面創建一個項目
2.輸入項目名稱(free-job)並選擇構建一個自由風格的軟件項目
3.上面創建完成后跳轉進來后進行配置,選擇丟棄舊的構建(下面保持天數一般在5~7天即可)
4.接着上面選擇構建,然后選擇Execute Shell 來執行shell命令
5.既然能執行shell命令,那么我們執行一個pwd,看下默認的工作目錄在哪里
6.上面保存后點擊立即構建,就會在下面生成一個build history,(出現藍色即表示正常,若紅色即表示有問題)
7.構建完成,我們可以點擊build ID下拉框選擇Console Output 來查看詳細信息
8.通過輸出信息我們可以看到Jenkins默認的工作目錄在 /root/.jenkins/workspace/(項目名稱)
9.既然能執行shell命令,那么我們創建一個文件試試;返回工作台,點擊配置
10.創建一個free.txt文件並保存
11.同上面一樣,我們點擊立即構建
12.同樣查看構建后的控制台輸出,可以看到構建成功
13.既然構建成功,那么我們進入服務器進行驗證是否創建成功
[root@jenkins ~]# cd /var/lib/jenkins/workspace/free-job/
[root@jenkins /var/lib/jenkins/workspace/free-job]# ls
free.txt
三.GitLab+Jenkins自動化部署及更新
流程圖如下:
說明:通過gitlab+Jenkins實現代碼的自動更新同步代碼到web服務器站點目錄。此處示例后端web服務器使用nginx。
環境規划以及ip分配如下表:
注意:開發環境這里直接放在gitlab服務器上這里將git也部署在gitlab服務器上。git基本使用請參考:https://www.jianshu.com/p/96c4a6d0c587
3.1gitlab 配置
說明:首先在gitlab上面創建一個群組,並創建一個項目,將代碼push 到代碼倉庫中(項目)。創建一個開發用戶(用於提交代碼等),同時在Jenkins服務器上面生成ssh秘鑰並將key添加到新建用戶的ssh認證下面。
1.登錄gitlab點擊項目,然后點擊創建一個群組
2.點擊新建群組
3.輸入新建群組的相關信息並點擊創建
4.新建一個項目
5.設置秘鑰進行
[root@gitlab ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:WyI0C3MBpUdsAKQsDkEf99WmtCUvcXUoxWL+NgF2R0I root@gitlab
The key's randomart image is:
+---[RSA 2048]----+
|ooooo*+ .. =Eoo |
|.o. oo+..+ @ +o. |
|+. .+.=.. & = . |
|+ * o + o . |
| . o S o . . |
| . + + |
| . . . |
| |
| |
+----[SHA256]-----+
[root@gitlab ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnnyT5IRLN2AzknCPE3pLnLhH0Vq6jGJsYsjDaLKBQNkBD4coTMW47PJpjxL/pjwyV9KaQ3BuEqam8jQlpaDYUQVBK++0ALFAObGTyTPThRVKhW7X3kjSkInkwAZVj2dLdU0oIinzEuCjldhOe3BF2FYHRgcbnklEFIVpK3quTJbKxcF4h8SMbihRbXor0AIsOupWd0z2skqqvr4xSDNPAb4t+Ypd0MnGPRJYb8DTs+Ign+gn6L7a48RWqqIhBjVjgDLHiitMeEKA6FCS4cEHvcbHhXtrLswfF2ocA+mjfb5WGfP73d959fSPfvraRhhxXqBMqM309DmO3DGtS2e1j root@gitlab
6.塞key操作,方便源碼上傳下載
7.點擊頭像查看創建項目的結果
8.查看項目根據提示配置初始化
9.模擬開發建立git本地工作目錄和本地倉庫
#這里的源碼使用的碼雲上源碼,你可以自行下載使用即可。
[root@gitlab ~/yiliaoqixie]# git config --global user.name "Administrator"
[root@gitlab ~/yiliaoqixie]# git config --global user.email "admin@example.com"
[root@gitlab ~/yiliaoqixie]# git init
Initialized empty Git repository in /root/yiliaoqixie/.git/
[root@gitlab ~/yiliaoqixie]# git add .
[root@gitlab ~/yiliaoqixie]# git commit -m "第一次提交項目"
[root@gitlab ~/yiliaoqixie]# git remote add origin git@10.0.0.55:yiliao/yiliao.git
[root@gitlab ~/yiliaoqixie]# git push -u origin --all
10.查看上傳的結果
11.點擊設置選擇新建用戶
12.輸入賬號相關信息並點擊創建用戶
13.點擊編輯,為上面新創建的用戶設置密碼
14.給這個賬號設置密碼並保存
15.將上面創建的用戶添加到devops組中並給與開發者權限
16.找到剛剛創建的dev用戶並給予開發人員權限,然后增加用戶到群組
3.2Jenkins配置
1.在Jenkins的服務器上生成秘鑰
[root@jenkins ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Y/nVt2+ldZc+h4VrsormDhSXKj3ryP/LlLkpIU95xjA root@jenkins
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| . o |
| .E+ . . |
| . ==S . ..o|
| .o+++= . .oB|
| +o++ . .B+|
| . oo+.+ . =o+|
| o.o*X....+ .+|
+----[SHA256]-----+
[root@jenkins ~]# cat ./.ssh/id_rsa
id_rsa id_rsa.pub
[root@jenkins ~]# cat ./.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCssc5KGRIvHV64Md3HR3SdT0w4twdrAIbxWSSo3tvfrauMdSk2ptmxvgzPqfGEQUgHfPsZY10eN0bpvaFARLBDytyRLbgdSo6gts+J0nGhy0hcjOhu4xJgygt8hN53UCUbdy7DhUnwxIfOuzENFYLS7ZW/Uk4N1FrNNuZK0X5aVNsV5r9H+fUeOfMJ4YLjLhFn6C94q4XmS9OfAW0aCSUfBbCT9LnRmeU/FoQMGdujBZ+Koc9289IVNHkVL+vEW6ZTxLPMEoRaB0RlLxfZF86LMsjsqx6ABBHNpV5FZWl0OYnnEn3jKHRNStfxx2g5Hz9e7eRguBubBis75OfHf2br root@jenkins
2.回到gitlab服務器上面使用maliu用戶登錄,然后點擊頭像選擇設置
3.上面的設置點進來后,選擇SSH 秘鑰, 然后復制Jenkins服務器上生成的秘鑰然后點擊增加秘鑰
4.新建任務
5.點擊項目名稱開始配置
6.選擇源碼管理,選Git,輸入倉庫URL地址(如果下方出現紅色及表示出錯了),然后選擇保存
7.立即構建
8.查看構建信息
9.服務端查看
[root@jenkins /var/lib/jenkins/workspace/yiliao]# ls
about.html article.html contact.html index.html product.html
album.html Bootstrap醫療器械公司響應式網站模板 css js
article_detail.html comment.html images product_detail.html
3.3實現自動部署
上面已經完成了Jenkins從gitlab上拉取代碼,現在需要實現如何將源碼自動部署到web服務器上,這里使用腳本的方式來實現,Jenkins支持執行腳本的功能。
1.在Jenkins服務器上面編寫同步腳本,由於是通過腳本拷貝到web服務器的站點目錄,所以需要先做一個ssh秘鑰認證
[root@jenkins ~]# ssh-copy-id -i 10.0.0.7
[root@jenkins ~]# ssh-copy-id -i 10.0.0.8
[root@jenkins /server/scripts]# vim deploy.sh
#項目目錄
CODE_DIR=/var/lib/jenkins/workspace/yiliao/
#時間格式
DATE_TIME=`date +%Y-%m-%d-%H-%M-%S`
#打包后的名字
TAR_NAME=web-${DATE_TIME}.tar.gz
#web服務器站點目錄的上一級 "/usr/share/nginx/html"
WEB_DIR=/usr/share/nginx/
#web服務器新建的站點目錄名字
WEB_NEWDIR_NAME=web-${DATE_TIME}
#進入到項目目錄上一級打包代碼
cd $CODE_DIR && tar czf /opt/$TAR_NAME ./*
for i in {7,8}
do
#拷貝到web服務器的站點目錄的上一級
scp /opt/$TAR_NAME 10.0.0.${i}:$WEB_DIR
#連接web服務器進行解壓壓縮包到新的一個已時間命名的站點目錄
ssh 10.0.0.$i "cd $WEB_DIR && mkdir $WEB_NEWDIR_NAME && tar xf $TAR_NAME -C $WEB_NEWDIR_NAME"
#將新建的站點目錄與html站點目錄做一個軟鏈接
ssh 10.0.0.$i "cd $WEB_DIR && rm -rf html && ln -s $WEB_NEWDIR_NAME html"
ssh 10.0.0.$i "cd $WEB_DIR && rm -rf $TAR_NAME"
sleep 3
done
2.配置Jenkins,使用Jenkins調用部署腳本(此處寫腳本全路徑腳本名稱)
3.立即構建
4.查看輸出結果
5.測試訪問結果
3.4自動更新
1.配置自動觸發構建、需要設置安全令牌Secret token,進入項目選擇配置,設置相關信息,然后生成token,復制token(需要填寫到gitlab上面)和Build when a chang上面提示的URL地址( http://10.0.0.57:8080/project/yiliao)
選擇構建觸發器,然后選擇build when a change is ....,下方有個高級選項后然后選擇Filter branches byname,然后輸入master分支,再點擊下面的Generate生成token,然后點擊保存。
2.配置gitlab,添加token
點擊項目→設置→設置→集成,然后輸入Jenkins上面提示的URL地址和和生成的token,點擊增加web鈎子。
3.測試Web鈎子
添加完鈎子完成后可以測試,選擇Push event,執行完會顯示上面的提示。
4.上面已經配置完成,接下來就是測試,我們知道目前web服務站點訪問得到結果如上面, 這里gitlab服務器下載的代碼並進行修改,然后推送gitlab倉庫。這里去除首頁的右上角的English版本。
修改首頁內容:
5.推送新的修改源碼
[root@gitlab ~/yiliaoqixie]# git add .
[root@gitlab ~/yiliaoqixie]# git commit -m "第二次提交"
[master 4b8d377] 第二次提交
[root@gitlab ~/yiliaoqixie]# git push -u origin --all
6.測試訪問
之前的結果如下圖:
現在的結果:
3.5配置構建Jenkins返回構建狀態gitlab
1.現在gotlab上面生成訪問令牌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上面去了,也可以查看輸出,還可以查看工作空間,可以查看到所有代碼,返回的話只能選擇后退。