云原生是當(dāng)下IT圈非常熱門的一個(gè)詞,其目的是為了各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用。云原生包含很多技術(shù),比如容器、微服務(wù)、DevOps、持續(xù)交付等,今天,我們來了解下什么是“持續(xù)交付”及“持續(xù)交付”的實(shí)踐。
什么是持續(xù)交付
持續(xù)交付是指,所有開發(fā)人員都在主干上進(jìn)行小批量工作,或者在短時(shí)間存在的特性分支上工作且定期向主干合并,同時(shí)始終讓主干保持可發(fā)布狀態(tài),保證代碼可以按需進(jìn)行一鍵式發(fā)布。開發(fā)人員在引入任何回歸錯(cuò)誤時(shí)(包括缺陷、性能問題、安全問題、可用性問題等),都能快速得到反饋。一旦發(fā)現(xiàn)這類問題,就立即加以解決,從而保持主干始終處于可部署狀態(tài)。
( Wikipedia: Continuous delivery (CD) is a software engineering Approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time. )
持續(xù)交付是持續(xù)集成的延伸,將集成后的代碼部署到類生產(chǎn)環(huán)境,確保可以以可持續(xù)的方式快速向客戶發(fā)布新的更改。如果代碼沒有問題,可以繼續(xù)手動(dòng)部署到生產(chǎn)環(huán)境中。
持續(xù)交付流水線
隨著開發(fā)模式的日益成熟,軟件開發(fā)過程中的每個(gè)環(huán)節(jié)已經(jīng)越來越標(biāo)準(zhǔn)化了,但是這些環(huán)節(jié)都相對(duì)獨(dú)立,需要一個(gè)東西將他們連接成一個(gè)整體。
如果我們能將這些環(huán)節(jié)——構(gòu)建、發(fā)布、測試、部署有效的串聯(lián)起來,形成一套完成的持續(xù)交付流水線,就能提高軟件的發(fā)布效率與質(zhì)量,持續(xù)不斷的創(chuàng)造業(yè)務(wù)價(jià)值。
持續(xù)交付流水線工作流程大致如下:
- 開發(fā)人員將代碼提交至代碼倉庫;
- 編譯構(gòu)建服務(wù)器獲取到代碼倉庫文件變更信息,從代碼倉庫拉取代碼,進(jìn)行編譯構(gòu)建,生成二進(jìn)制軟件包,并將生成的軟件包保存到制品庫。構(gòu)建過程中,每一步成功與否,都需將結(jié)果反饋給對(duì)應(yīng)的開發(fā)人員。
- 構(gòu)建完成后,將軟件包按需部署到測試環(huán)境,進(jìn)行測試,同時(shí)測試結(jié)果反饋給開發(fā)人員,
- 測試完成,由業(yè)務(wù)側(cè)決定是否將軟件包發(fā)布到生產(chǎn)環(huán)境,如果需要發(fā)布,則通過人工將軟件包發(fā)布到生產(chǎn)環(huán)境。
當(dāng)然,流程并非固定的,可以根據(jù)具體的業(yè)務(wù)需要,穿插其他流程,比如靜態(tài)代碼檢查,性能測試等。
為什么要做持續(xù)交付
持續(xù)交付適用于幾乎任何對(duì)質(zhì)量、交付速度和結(jié)果的可預(yù)測性有要求的低風(fēng)險(xiǎn)部署和發(fā)布場景,包括嵌入式系統(tǒng)、web應(yīng)用、移動(dòng)應(yīng)用等。開發(fā)者通過持續(xù)交付可以自動(dòng)完成發(fā)布過程,并且可以通過單擊按鈕隨時(shí)部署應(yīng)用程序。
理論上講,持續(xù)交付可以滿足每日一次、每周一次等固定發(fā)布頻率,或者滿足業(yè)務(wù)需求的任何頻率,但是,如果真的想獲得持續(xù)交付的好處,應(yīng)盡早將應(yīng)用部署到生產(chǎn)環(huán)境,以確保可以小批次發(fā)布,并且發(fā)現(xiàn)問題后及時(shí)排除故障。
實(shí)踐:通過華為云DevCloud實(shí)現(xiàn)持續(xù)交付
代碼提交
華為云DevCould代碼托管CodeHub是一個(gè)線上代碼倉庫,為開發(fā)者提供基于Git的在線代碼托管服務(wù),包括代碼克隆/提交/推送/比較/合并/Code Review等功能。
開發(fā)人員可將代碼提交至CodeHub。
編譯構(gòu)建
在“編譯構(gòu)建”服務(wù)中,用戶可根據(jù)自己的編程語言,編程環(huán)境,自主配置所需的構(gòu)建步驟,并對(duì)指定的代碼倉庫進(jìn)行編譯構(gòu)建。
當(dāng)然華為云DevCloud的編譯構(gòu)建功能支持持續(xù)集成:提交代碼觸發(fā)執(zhí)行編譯構(gòu)建。
配置部署任務(wù)
部署功能與編譯構(gòu)建在使用方面類似,都是根據(jù)自己的業(yè)務(wù)場景配置相應(yīng)的部署任務(wù),任務(wù)配置完成后,可根據(jù)業(yè)務(wù)需要,執(zhí)行部署任務(wù)。
持續(xù)交付流水線
之前提到了持續(xù)交付流水線,華為云DevCloud流水線功能可以將已經(jīng)配置好構(gòu)建,部署等服務(wù)串聯(lián)到一起,實(shí)現(xiàn)一鍵部署。