一、自動化部署代碼實踐

早期手動部署代碼
純手動scp上傳代碼。
純手動登陸,Git pull 或者SVN update。
純手動xftp上傳代碼。
開發發送壓縮包,rz上傳,解壓部署代碼。
缺點:
全程運維參與,占用大量時間。
如果節點多,上線速度慢。
人為失誤多,目錄管理混亂。
復原不及時,或者難以回退。

設計自動部署代碼
流程設計,确定目标。
1、自動部署環境
1)開發環境
開發者本地有自己的環境,運維配置公共開發環境,大家可共用的服務。例如:開發資料庫MySQL,Redis,Memcached等。
2)測試環境
功能測試以及性能測試。
3)預生産環境
生産環境叢集中的某一個節點,并且連接配接生産庫。(不對外,不做破壞型操作。)
4)灰階環境
根據不同的區域進行劃分分。(生産環境)
5)生産環境
對使用者提供服務的環境。
預生産環境由來:
資料庫不一緻,測試環境和生産環境資料庫是不一樣的。
使用生産環境的聯調接口;例如:支付接口。(電商業務)
2、自動部署規劃
已經有一個可以上線的代碼在git倉庫。
我們現在要做10個叢集節點的一鍵部署,秒級復原。
所有的web服務,都應該使用普通使用者。(強烈建議)
所有的web服務都不應該監聽80端口,除了負載均衡。
那我們如何設計一套生産自動化部署系統。
規劃。
實作。
總結和擴充。(PDCA方法論)
生産環境應用。
實作思路:
1)代碼放置位置
Git(首先)、SVN
2)擷取最新代碼
擷取最新分支
擷取版本号
擷取tag包
3)差異解決
各個節點之間差異
代碼倉庫和實際的差異。配置檔案是否放在代碼倉庫中。(配置單獨進行存放,config.example )短信接口,支付,等敏感資訊不讓所有開發知道
統一的.叢集有10個節點。(Job節點 crontab.xml 配置檔案不一樣)
4)項目名稱如何設計
項目名稱_環境名稱_版本_分支_時間_某開發送出
測試: rainbow_test_v1.1.1_dev_2016-08-11_12:12_xuliangwei
生産:rainbow_pro_v1.1.1_master_2016-08-11_11:11_xuliangwei
5)如何更新
PHP,Tomcat需要重新開機,重新軟連結。
6)如何測試
測試(關鍵的頁面,API,背景等)
測試一個預生産環境,通過則繼續部署,如果失敗,退出部署操作。
7)記錄日志
可以部署統計。
成功多少次。
失敗多少次。
復原多少次。
8)多人同時執行腳本
防止多人操作導緻重複上線失敗。通過lock鎖對檔案進行控制。
9)串行,并行
機器少的情況串行感覺不出什麼。如果機器過多則會很慢。
分組部署并行部署,以及分組測試。
10)部署伺服器雙機
防止部署系統down機,部署機代碼丢失,誤操作。
11)如何執行。
Shell執行
Web界面點選(自定義或Jenkins)
12)如何實作正常回退,以及緊急回退(復原的必要性)
通過軟連結的方式來實作代碼秒級别回退。
3、自動部署難點
在大公司推進自動化部署上線,是有許多的難點,根據個人公司的不同,來選擇不同的方法來進行推進。
自動化推進難點:
能力(個人能力,團隊能力)
責任(責任能否承擔,敢于承擔責任)
公司流程、人員、組織架構。
可通過如下方法推進:
目标化溝通。
責任劃分
ITIL
項目管理:PMBOOK
自動部署實踐
整個叢集自動化部署流程設計如下:可根據如下思路,結合公司實際業務來編寫shell腳本或者Python。
擷取最新代碼
編譯(可選)
配置檔案(軟連接配接或者拷貝)。
打包(tar,加速傳輸)
檔案分發(Scp Rsync Salt)(不需要密碼驗證)
将目标伺服器移除叢集(注釋配置檔案)
解壓
防止Webroot站點目錄
scp差異檔案(可能有一個節點配置檔案不一樣)
重新開機Web服務
測試
正常回退實踐
列出復原版本
目标伺服器移除叢集
執行復原
重新開機并測試
加入叢集
緊急回退實踐
列出復原版本(ls -l或find查出對應的曆史版本)。
執行復原操作(删除軟連結,重建軟連結)。
重新開機對應服務。
自動部署采坑
自動化部署PHP環境或者Java環境的過程中,那麼你一定遇到了如下的問題。
如何應用到你的生産環境。
回退到“上一個”“正常”版本。
自動部署軟連接配接的坑。
PHP如果開啟Opcache,需要重新開機PHP,或者清理Opcache
Java Tomcat是必須要重新開機,最好每次清理Work,Tmp緩存目錄。
二、自動化系統建構實踐環境準備
首先在執行腳本前,先做好初始化環境,最好是通過saltstack來完成。我這裡沒有那麼多機器,就先用兩台示範。
linux-node1 192.168.90.201
linux-node2 192.168.90.202
1、建立普通使用者
useradd xuliangwei
passwd xuliangwei
2、配置密鑰
3、建立相關目錄
4、配置Nginx
5.配置好git環境
centos7部署gitlab
克隆項目
最終效果如下:
剖析腳本
檢視腳本,具體配和第一部分來解讀:
執行上線:
檢視目前版本
執行復原操作
檢視日志:

腳本其他功能
當然此腳本功能不僅僅如此,可以通過Git分支,Git tag包等方式來上線,這些根據貴公司的具體業務來進行調整,也可以自己開發一個Web界面來調用此腳本,這樣就可以将上線工作交給開發,當然也可以使用開源jenkins來實作。
本文轉自寫個部落格騙錢部落格51CTO部落格,原文連結http://blog.51cto.com/dadonggg/1948942如需轉載請自行聯系原作者
菜鳥東哥