環(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)行。