豬八戒網(wǎng)CI/CD最佳實(shí)踐之路
序言
本文旨在介紹ZBJ DevOps團(tuán)隊(duì)傾力打造的DevOps平臺(tái)中關(guān)于CI/CD流水線部分的實(shí)踐。歷經(jīng)三次大版本迭代更新的流水線,完美切合ZBJ各種業(yè)務(wù)發(fā)展需求,在滿足高頻率交付的同時(shí),提高了研發(fā)效率,降低了研發(fā)成本,保證了交付質(zhì)量。
持續(xù)集成(Continuous Integration)簡(jiǎn)稱CI,持續(xù)集成強(qiáng)調(diào)開(kāi)發(fā)人員提交了新代碼之后,立刻進(jìn)行構(gòu)建、(單元)測(cè)試。根據(jù)結(jié)果,我們可以確定新代碼和原有代碼能否正確地集成在一起。持續(xù)集成過(guò)程中很重視自動(dòng)化測(cè)試驗(yàn)證結(jié)果,對(duì)可能出現(xiàn)的一些問(wèn)題進(jìn)行預(yù)警,以保障最終集成的代碼沒(méi)有問(wèn)題。持續(xù)交付(Continuous Delivery)簡(jiǎn)稱CD,持續(xù)交付在持續(xù)集成的基礎(chǔ)上,將集成后的代碼部署到更貼近真實(shí)運(yùn)行環(huán)境的「類生產(chǎn)環(huán)境」(test,testing)中,然后交付給質(zhì)量團(tuán)隊(duì),以供評(píng)審。如果評(píng)審?fù)ㄟ^(guò),代碼就進(jìn)入生產(chǎn)階段。持續(xù)交付并不是指軟件每一個(gè)改動(dòng)都要盡快部署到產(chǎn)品環(huán)境中,它指的是任何的代碼修改都可以在任何時(shí)候?qū)嵤┎渴稹S械娜艘舶袰D稱為Continuous Deployment(持續(xù)部署),持續(xù)部署是指當(dāng)交付的代碼通過(guò)評(píng)審之后,可以部署到生產(chǎn)環(huán)境中。這里需要注意的是,持續(xù)部署應(yīng)該是持續(xù)交付的最高階段,持續(xù)交付是一種能力,持續(xù)部署是一種持續(xù)交付的表現(xiàn)方式。
CI/CD過(guò)程示意圖
豬八戒網(wǎng)的CI/CD之路
背景介紹
在提到ZBJ DevOps流水線之前,先交代一下歷史背景。2015年前,豬八戒網(wǎng)80%的項(xiàng)目都是用PHP語(yǔ)言開(kāi)發(fā)的,剩下的少部分使用的是Nodejs和Java。2015年,ZBJ研發(fā)中心進(jìn)行了自發(fā)性的“工業(yè)革命”——騰云七號(hào)行動(dòng)——使用Java語(yǔ)言將核心業(yè)務(wù)代碼進(jìn)行了重構(gòu)和拆解,建立了以Dubbo為核心的SOA微服務(wù)框架,使用ZooKeeper Swoole為核心的業(yè)務(wù)調(diào)用提供機(jī)制。滿足新業(yè)務(wù)使用Java語(yǔ)言編寫(xiě)、老業(yè)務(wù)仍然使用PHP編寫(xiě),同時(shí)支持兩種語(yǔ)言(Nodejs