門戶網站傳統部署流程
基于線上CentOS伺服器,建構了一套LAMP(LNMP)PHP WEB環境,釋出了Discuz門戶網站代碼,通過浏覽器通路WEB網站,如圖所示:
[[email protected] ~]# yum install httpd php php-devel php-mysql mariadb-server -y
[[email protected] ~]# service httpd restart
[[email protected] ~]# service mariadb restart
MariaDB [(none)]> create database discuz charset utf8;
MariaDB [(none)]> grant all on discuz.* to "discuz"@localhost identified by"123456";
MariaDB [(none)]> flush privileges;
[[email protected] ~]# cd /var/www/html/
[[email protected] html]# unzip Discuz_X3.1_SC_UTF8.zip
[[email protected] html]# ls
Discuz_X3.1_SC_UTF8.zip readme upload utility
[[email protected] html]# cd upload/
[[email protected] upload]# mv * ..
[[email protected] upload]# chown -R apache:apache /var/www/html/

開發人員開發了新的Logo圖檔檔案,要求運維人員将原始的Logo圖檔(社群動力DISCUZ!)檔案更新為最新的Logo,作為運維人員如何去更新呢?更新和部署步驟是什麼呢?
第一步,找出原網站Logo圖檔檔案的通路URL位址或者圖檔檔案名稱;
- 通過浏覽器F12工具或者右鍵屬性;
- 通過右鍵-打開新标簽-圖檔檔案;
- Logo圖檔URL:http://192.168.179.104/static/image/common/logo.png
第二步,根據如上Logo圖檔通路URL位址,可以得出以下資訊:
- 圖檔通路的協定:http
- 圖檔檔案通路的端口:80
- 圖檔檔案WEB伺服器監聽端口:80
- 圖檔檔案WEB伺服器IP或者域名:192.168.179.104
- 圖檔檔案所在的位置:網站釋出目錄+static/image/common/
第三步,查找圖檔檔案WEB伺服器,預設網站釋出目錄;
[[email protected] ~]# netstat -tpln | grep 80
tcp6 0 0 :::80 :::* LISTEN 1592/httpd
[[email protected] ~]# ps -ef | grep httpd
root 1592 1 0 21:41 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1595 1592 0 21:41 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
apache 1596 1592 0 21:41 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
/var/www/html/
第四步,圖檔檔案具體位置:
[[email protected] common]# pwd
/var/www/html/static/image/common
[[email protected] common]# ls logo.png
logo.png
備份原網站Logo圖檔檔案
[[email protected] ~]# mkdir -p /data/backup/`date +%F`
[[email protected] ~]# \cp /var/www/html/static/image/common/logo.png /data/backup/`date +%F`
上傳開發人給定的最新Logo圖檔檔案至/tmp/`date +%F`/,替換至原網站Logo圖檔檔案即可;
[[email protected] ~]# mkdir -p /tmp/`date +%F`/
[[email protected] ~]# cd /tmp/`date +%F`/
[[email protected] 2020-10-25]# \cp logo.png /var/www/html/static/image/common/
通過浏覽器通路最新網站(Ctrl+F5),如圖所示:
沒有CI/CD部署項目需要經過什麼樣的流程呢?
開發将送出的版本放在倉庫當中,然後開發人員在本地的IDE裡面去将項目打包,這個包是可部署的,比如java的jar包和war包。打包完之後發給你運維工程師,運維工程師拿到這個包将其部署到對應的伺服器上面(這個環境可能是測試環境或者生産環境)。部署完之後告訴測試組已經将包部署到新的環境上面,然後讓測試去測試新上的項目是不是正确的回報給開發。
這個和CI/CD沒有明顯的差別,就是上面圖檔,但是這裡需要人去協調,從開發工程師到打包,再到運維工程師去拿這個包再去部署,再去告訴測試項目釋出好了去測試,測試發現有問題再去通知開發。這些流程都需要人在裡面去協調,這裡面增加了溝通的成本。向這種傳統方式對于項目比較少更新周期比較長的項目産品來說是可以接受的,對于疊代項目頻率比較高的項目來說會增加時間成本是不可以接受的。
傳統的部署項目需要人工幹預,時間成本和風險都會增加,CI/CD解決了兩個問題。一個是時間成本來自于人不斷的互相協調,通過手動去做一些事情,而CI/CD注重的是自動化,從開發送出代碼再到自動測試,再到郵件通知項目的工程師。這些都是自動完成的,不需要人工幹預,人工幹預的就是自動釋出還是手動釋出(手動釋出需要人工的手動去點選)
第二個就是容易出問題,避免人工誤操作行為。
Jenkins實作CI/CD
- 持續內建Ccontimous Integratio,CT)代碼合并、建構、部署、測試都在一起,不斷地執行這個過程,并對結果回報。
- 持續都署(Ccotimous Deployment.co)部署到生産環境。
- 持續傳遞 Ccoatimous Delvery.c)部署到生産環境,給使用者使用。
Jenkins軟體平台概念剖析
基于主流的Hudson/Jenkins工具平台實作全自動網站部署、網站測試、網站復原會大大的減輕網站部署的成本,Jenkins的前身為Hudson,Hduson主要用于商業版,Jenkins為開源免費版。
Jenkins是一個可擴充的持續內建引擎、架構,是一個開源軟體項目,旨在提供一個開放易用的軟體平台,使軟體的持續內建變成可能。而且Jenkins平台的安裝和配置非常的容易,使用也非常簡單。建構Jenkins平台可以解放如下人員的雙手:
開發人員
對于開發人員來說,隻需負責網站代碼的編寫,不需要手動再對源碼進行編譯、打包、單元測試等工作,開發人員直接将寫好的代碼分支存放在SVN、GIT倉庫即可。
運維人員
對于運維人員來說,使用Jenkins自動部署,可以減輕人工幹預的錯誤率,同時解放運維人員繁雜的上傳代碼、手動備份、手動更新。
測試人員
對于測試人員來說,可以通過Jenkins進行代碼測試、網站功能或者性能測試。
持續內建(Continuous Integration,CI|CD)是一種軟體開發實踐,對于提高軟體開發效率并保障軟體開發品質提供了理論基礎,持續內建意義如下:
- 持續內建中的任何一個環節都是自動完成的,無需太多的人工幹預,有利于減少重複過程以節省時間、費用和工作量。
- 持續內建保障了每個時間點上團隊成員送出的代碼是能成功內建的。換言之,任何時間點都能第一時間發現軟體的內建問題,使任意時間釋出可部署的軟體成為了可能。
- 持續內建還能利于軟體本身的發展趨勢,這點在需求不明确或是頻繁性變更的情景中尤其重要,持續內建的品質能幫助團隊進行有效決策,同時建立團隊對開發産品的信心。
jenkins中重要的幾點
使用git作為版本控制,然後結合git去拉取代碼進行後續工作,是以要搭建git伺服器,并且會簡單使用
權限管理,去精細化控制每個使用者對項目的具有不同的權限和使用
Master slave和流水線是jenkins的核心功能
項目的建構成功和失敗都是通過郵件通知。這個可以通過插件去完成