樂(lè)觀鎖與悲觀鎖總結(jié)
758
2025-03-31
引言:在“DevOps能力之屋(Capabilities House of DevOps)”中,華為云DevCloud提出(工程方法+最佳實(shí)踐+生態(tài))×工具平臺(tái)=DevOps能力。華為云DevCloud將推出“DevOps on DevCloud”系列,針對(duì)DevOps領(lǐng)域場(chǎng)景,闡述該場(chǎng)景在華為云DevCloud上的實(shí)施方法與實(shí)踐。本文通過(guò)自動(dòng)化語(yǔ)義化版本與變更日志,提升DevOps自動(dòng)化水平。本文與莫妮卡共同完成。
隨著DevOps方法與實(shí)踐的普及,越來(lái)越多的企業(yè)開(kāi)始使用持續(xù)部署流水線來(lái)提升軟件持續(xù)交付的效率與質(zhì)量。然而,我們發(fā)現(xiàn)在發(fā)布計(jì)劃中,我們通常會(huì)面臨如何為軟件版本打標(biāo)簽以及如何準(zhǔn)備發(fā)布變更日志等方面的挑戰(zhàn)。在版本發(fā)布過(guò)程中,不少企業(yè)仍會(huì)在手動(dòng)為軟件版本打標(biāo)簽,準(zhǔn)備發(fā)布變更日志等方面會(huì)進(jìn)行大量繁瑣、重復(fù)的工作,投入了很大的人力成本,而且無(wú)法集成到持續(xù)交付流水線的自動(dòng)化流程中。
本文引入兩個(gè)工具commitizen和standard-version來(lái)實(shí)現(xiàn)語(yǔ)義化版本與變更日志的自動(dòng)化,提升規(guī)范化程度,減少人工干預(yù)產(chǎn)生的問(wèn)題。
1????? 規(guī)范代碼提交說(shuō)明
為了使代碼提交說(shuō)明更有意義,同時(shí)也可以讓團(tuán)隊(duì)其他成員更輕松地了解代碼變更的原因、目的與影響范圍,因此在團(tuán)隊(duì)中對(duì)代碼提交說(shuō)明進(jìn)行輕量級(jí)約定顯得非常有必要。所謂git commit message規(guī)范即通過(guò)提交說(shuō)明中的特定關(guān)鍵字來(lái)描述代碼變更的范疇等,例如特性新增、缺陷修復(fù)、文檔變更等。
為此,我們選擇Conventional Commits作為人與機(jī)器之間協(xié)同工作的規(guī)范,為自動(dòng)化軟件版本奠定基礎(chǔ)。Conventional Commits是許多NPM包使用的非常常見(jiàn)的規(guī)范。該規(guī)范提供了一組簡(jiǎn)單的規(guī)則來(lái)創(chuàng)建顯式提交歷史。該規(guī)范在提交說(shuō)明中描述了features、fixes等,與SemVer相匹配。
提交說(shuō)明的結(jié)構(gòu)如下所示,詳情請(qǐng)參考鏈接Conventional Commints:
[optional body]
[optional footer(s)]
為了在團(tuán)隊(duì)中落實(shí)代碼提交說(shuō)明規(guī)范,不可避免地需要成熟的工具來(lái)支持。目前,在自動(dòng)約束提交信息這方面已經(jīng)有很多成熟的工具了,python語(yǔ)言工具,PHP語(yǔ)言工具,以及本文介紹的基于Node.js語(yǔ)言的工具——commitizen,開(kāi)發(fā)者可以直接將它安裝在自己的工作機(jī)中,在代碼提交時(shí)直接使用。此外,對(duì)于一些流行的IDE,有許多提交兼容插件,比如VSCode和visual studio。在安裝commitizen后,并在代碼倉(cāng)庫(kù)中安裝changelog適配模塊后,就可以使用git cz命令來(lái)代替git commit,進(jìn)行代碼提交說(shuō)明的規(guī)范化提交。
2????? 標(biāo)準(zhǔn)化版本號(hào)與變更日志
為了標(biāo)準(zhǔn)化版本號(hào),大家可以先了解一下SemVer,主要規(guī)定了版本號(hào)如何表示,如何增加,如何進(jìn)行比較,不同的版本號(hào)意味著什么。我們通過(guò)commitizen工具已經(jīng)實(shí)現(xiàn)了代碼提交說(shuō)明的規(guī)范化,接下來(lái)我們使用standard-version完成如下工作:
??????????? 檢索代碼倉(cāng)庫(kù)當(dāng)前的版本;
??????????? 根據(jù)規(guī)范化的提交信息更改版本;
??????????? 根據(jù)規(guī)范化的提交信息生成變更日志;
??????????? 創(chuàng)建一個(gè)新的提交,包含新版本和更新了的變更日志;
??????????? 用這個(gè)新版本號(hào)創(chuàng)建一個(gè)tag標(biāo)簽。
開(kāi)發(fā)團(tuán)隊(duì)對(duì)階段性開(kāi)發(fā)進(jìn)行第一次發(fā)布
較小的功能修復(fù)引起的小版本+1(1.0.0->1.0.1)發(fā)布
3????? 在華為云DevCloud上發(fā)布版本
當(dāng)開(kāi)發(fā)者在本地完成代碼開(kāi)發(fā)后,可以使用commitizen與stardard-version規(guī)范化代碼提交說(shuō)明,并形成changelog與版本號(hào),然后將代碼推送至DevCloud的代碼倉(cāng)庫(kù)中,觸發(fā)DevCloud流水線,完成軟件發(fā)布。
3.1??? 配置流水線
首先,配置DevCloud流水線的觸發(fā)器,使代碼提交自動(dòng)觸發(fā)流水線運(yùn)行。
然后使用系統(tǒng)參數(shù)GIT_COMMIT將CommitID作為發(fā)布倉(cāng)庫(kù)路徑。
3.2??? 本地代碼推送到云端代碼倉(cāng)庫(kù)
3.3??? 查看代碼提交歷史
3.4??? 查看發(fā)布倉(cāng)庫(kù)
每次代碼提交后,觸發(fā)流水線中的構(gòu)建任務(wù),生成軟件包,自動(dòng)歸檔在DevCloud發(fā)布倉(cāng)庫(kù)中。在發(fā)布倉(cāng)庫(kù)中,可以代碼提交所對(duì)應(yīng)的發(fā)布倉(cāng)中的軟件包。
圖 代碼倉(cāng)庫(kù)提交歷史
圖 軟件發(fā)布庫(kù)
至此,我們利用commitizen與standard-version工具實(shí)現(xiàn)了語(yǔ)義化版本與變更日志的自動(dòng)化,在一定程度上提升了軟件發(fā)布的效率。然而深入思考,我們會(huì)發(fā)現(xiàn)standard-version的工作仍然存在手工操作。我們也探討了利用華為云DevCloud流水線將此工作進(jìn)一步自動(dòng)化的可行性。遺憾的是,目前華為云DevCloud不支持向用戶代碼庫(kù)提交變更的能力。我們希望華為云DevCloud可以進(jìn)一步評(píng)估向用戶代碼庫(kù)提交變更的能力。那么在當(dāng)前限制下,是不是就沒(méi)有可能自動(dòng)化了呢?路是存在的,只是有點(diǎn)復(fù)雜,感興趣的開(kāi)發(fā)者,可以參考博文“如何在華為云DevCloud流水線中運(yùn)行OWASP ZAP安全測(cè)試”。
流水線 CloudPipeline DevOps
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。