環(huán)境構(gòu)建與部署規(guī)范

環(huán)境構(gòu)建與部署規(guī)范

一 流程與環(huán)境角色

1.1 流程和職責(zé)

  • 完整流程:拉取代碼-->編譯打包構(gòu)建-->統(tǒng)一存放構(gòu)建包-->停服務(wù)-->部署構(gòu)建包-->啟服務(wù)
  • DEV:拉取代碼-->編譯打包構(gòu)建-->統(tǒng)一存放構(gòu)建包
研發(fā)提供構(gòu)建腳本,用于構(gòu)建符合測試環(huán)境和線上環(huán)境可用的構(gòu)建包,并放到統(tǒng)一位置。
  • QA/OP:統(tǒng)一獲取構(gòu)建包-->停服務(wù)-->部署構(gòu)建包-->啟服務(wù)
測試環(huán)境:測試去統(tǒng)一的位置拿構(gòu)建包,部署到測試環(huán)境。
線上環(huán)境:由OP去統(tǒng)一的位置拿構(gòu)建包,部署到線上環(huán)境。

1.2 環(huán)境

環(huán)境 說明
DEV 開發(fā)測試環(huán)境,開發(fā)完成后研發(fā)要先進(jìn)行自測,確保基本流程能夠走通后再提測
TEST 測試環(huán)境,研發(fā)自測完成后提測,測試在測試環(huán)境進(jìn)行測試
STAGE 備機(jī)環(huán)境,測試通過后,測試發(fā)上線郵件,運(yùn)維部署到備機(jī),測試在備機(jī)上測試
PROD 生產(chǎn)環(huán)境,備機(jī)測試通過后,運(yùn)維上線到備機(jī)提供給用戶使用

1.3 角色

角色 說明
開發(fā) 開發(fā)人員,負(fù)責(zé)開發(fā)代碼
測試 測試人員,負(fù)責(zé)測試代碼
運(yùn)維 運(yùn)維人員,負(fù)責(zé)生產(chǎn)環(huán)境運(yùn)維,辦公環(huán)境基礎(chǔ)設(shè)施維護(hù)

1.4 環(huán)境角色關(guān)系

環(huán)境 使用 部署 構(gòu)建
DEV 開發(fā) 開發(fā) 開發(fā)
TEST 測試 測試 開發(fā)
STAGE 測試 運(yùn)維 開發(fā)
PROD 用戶 運(yùn)維 開發(fā)

二 規(guī)范細(xì)則

2.1 獲取代碼

  • 統(tǒng)一獲取代碼,傳入分支號即可快速獲取最新代碼
  • 目前使用的是統(tǒng)一的獲取代碼腳本,大家可以參考使用
規(guī)則:
checkout code: branch name
例:
cgit.sh -e prod -p we -b release_20160824

2.2 編譯打包構(gòu)建

2.2.1 維護(hù)構(gòu)建腳本

  • 由開發(fā)維護(hù)構(gòu)建腳本,建議構(gòu)建腳本存儲(chǔ)到git上
  • 構(gòu)建腳本通過傳遞參數(shù)的方式構(gòu)建不同環(huán)境的不同應(yīng)用
規(guī)則:
build: mvn clean install... / build.sh ....
例:
build_cmbc.sh -e [dev|test-uat|test-ywcs|test-qa1|test-qa2|test-qa3|prod|...] -p [we|exchange|pay|user] -a [we-home|we-mgmt|admin|service|schedule|...]

2.2.2 根據(jù)傳遞的不同環(huán)境參數(shù)進(jìn)行構(gòu)建

例:
Java:
mvn clean install -P [dev|test-uat|test-ywcs|test-qa1|test-qa2|test-qa3|prod|...]
mvn clean install -pl account-web -am  -P [dev|test-uat|test-ywcs|test-qa1|test-qa2|test-qa3|prod|...] -Dmaven.test.skip=true;
Node:
sh ${APP}-build-for-ucloud.sh ${real_branch} ${target_machine_dir} ${mobile_backend} ${home_backend} ${exchange_backend}

2.2.3 不同環(huán)境參數(shù)文件管理

  • DEV、TEST環(huán)境參數(shù)文件存儲(chǔ)在GIT中
  • STAGE、PROD環(huán)境參數(shù)文件由OP管理
  • 配置文件與代碼分離,不放在jar包中

建議配置文件格式:

<path>/<filename>-[dev|test-uat|test-ywcs|test-qa1|test-qa2|test-qa3|prod|...].properties

當(dāng)有多個(gè)配置文件的時(shí)候:

<path>[dev|test-uat|test-ywcs|test-qa1|test-qa2|test-qa3|prod|...]/<filename>.properties

PS: 配置文件配置項(xiàng)一定要寫明注釋

2.2.4 jenkins持續(xù)集成

  • 方案一(Java)

    (1)符合以上規(guī)范的可以集成到j(luò)enkins中進(jìn)行自動(dòng)構(gòu)建,測試只需要填寫簡單幾個(gè)參數(shù)(環(huán)境、平臺(tái)、應(yīng)用、代碼源等)即可進(jìn)行構(gòu)建。

    (2)研發(fā)提供相關(guān)服務(wù)的部署腳本或者命令后,測試編寫部署腳本,并集成到j(luò)enkins中進(jìn)行自動(dòng)部署。
  • 方案二(Node)

    (1)若不采用方案一,而又需要集成到j(luò)enkins中進(jìn)行自動(dòng)構(gòu)建,則需要研發(fā)自行完成jenkins任務(wù)的配置。

    (2)研發(fā)提供相關(guān)服務(wù)的部署腳本或者命令后,測試編寫部署腳本,并集成到j(luò)enkins中進(jìn)行自動(dòng)部署。

2.3 部署

  • 編寫統(tǒng)一部署腳本,完成部署完整過程
  • 目前已支持tomcat、node、java服務(wù)等部署方式,覆蓋當(dāng)前所有的服務(wù)
  • 部署規(guī)則
    1 transfer packages
    2 stop service
    3 overwrite packages
    4 start service
    5 check

  • 部署過程統(tǒng)一用腳本實(shí)現(xiàn)
例:
p2p應(yīng)用部署:
new_deploy.sh -p we -a home,mgmt,schedule
node應(yīng)用部署:
node_deploy.sh -a mobile -e uat

三 調(diào)整進(jìn)程

3.1 新代碼調(diào)整(8.31前完成)

  • 前端(we_frontendx)
現(xiàn)狀: 
研發(fā)編寫了構(gòu)建腳本,通過2.4中方案二的方式,構(gòu)建不同環(huán)境的構(gòu)建包;
已經(jīng)集成到j(luò)enkins,但是對jenkins依賴嚴(yán)重,沒有寫成單獨(dú)的構(gòu)建腳本。
  • 交易所、對賬、賬戶中心等(we_services)
  • 基金(we_rsps)
  • 引擎(we_ruleengine)
  • 搜索(we_search)、消息中心(we_messagecenter)
現(xiàn)狀與調(diào)整方案:
we_services:
研發(fā)編寫了構(gòu)建腳本,通過2.4中方案一構(gòu)建不同環(huán)境的構(gòu)建包,已經(jīng)集成到j(luò)enkins。
we_rsps:
研發(fā)編寫了構(gòu)建腳本,通過2.4中方案一構(gòu)建不同環(huán)境的構(gòu)建包,已經(jīng)集成到j(luò)enkins。
后期預(yù)計(jì)常用git flow方式。
we_ruleengine:
新增服務(wù),按照此規(guī)范進(jìn)行。
we_search&we_messagecenter:
新增服務(wù),按照此規(guī)范進(jìn)行。

3.2 老代碼改造(9.15前完成)

  • 主站、mobile(we_renrendai4)
現(xiàn)狀與調(diào)整方案:
現(xiàn)狀:
有構(gòu)建腳本,大部分時(shí)間測試在維護(hù)。
不同環(huán)境配置沒有存儲(chǔ)在git上,需要替換很多配置文件。
腳本和配置文件都缺乏統(tǒng)一管理。
dubbo.properties: 配置項(xiàng)需要手工調(diào)整。
很多配置項(xiàng)打在核心jar包中,耦合度太高。
老代碼依賴新的支付中心的jar包,更新版本需要單獨(dú)打jar包。

調(diào)整方案:
老代碼改造,按照此規(guī)范進(jìn)行。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容