天天看點

自動化代碼上線

一、自動化部署代碼實踐

自動化代碼上線

早期手動部署代碼

純手動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如需轉載請自行聯系原作者

菜鳥東哥