Azure DevOps如何將繁重的手工部署轉(zhuǎn)化成安全可靠的自動化流程,微軟azure云搭建服務(wù)器Azure DevOps如何將繁重的手工部署轉(zhuǎn)化成安全可靠的自動化流程DevOps是生產(chǎn)力/生產(chǎn)過程/產(chǎn)品迭代的結(jié)合,以便持續(xù)向終端用戶輸出有價(jià)值的服務(wù)。因此可以認(rèn)為,DevOps并不是一種框架/服務(wù),更像是一種方法論/文......
DevOps是生產(chǎn)力/生產(chǎn)過程/產(chǎn)品迭代的結(jié)合,以便持續(xù)向終端用戶輸出有價(jià)值的服務(wù)。因此可以認(rèn)為,DevOps并不是一種框架/服務(wù),更像是一種方法論/文化,可以幫助企業(yè)快速/高質(zhì)量/安全地實(shí)現(xiàn)產(chǎn)品的迭代及技術(shù)的革新。
細(xì)看會發(fā)現(xiàn),DevOps可以劃分成很多部分,包括溝通協(xié)作/任務(wù)管理、持續(xù)集成/持續(xù)部署、代碼管理、基礎(chǔ)設(shè)施即代碼、持續(xù)監(jiān)控等。隨著時(shí)機(jī)的成熟,市場的教育普及與工具鏈的成熟度越來越高,很多企業(yè)也實(shí)實(shí)在在看到了DevOps的價(jià)值。有數(shù)據(jù)顯示:采用或部分采用DevOps的公司,發(fā)布頻率提高了46倍,Bug修復(fù)時(shí)間提升了440倍,可以提前20%將產(chǎn)品推向市場,出錯率減少5倍,收入增加了20%。
Azure DevOps是微軟提供的,用于幫助開發(fā)者實(shí)現(xiàn)DevOps文化的工具集合,包含Azure Boards(看板,實(shí)現(xiàn)任務(wù)管理)、Azure Pipelines(持續(xù)集成/持續(xù)發(fā)布)、Azure Repos(代碼管理)、Azure Test Plans(測試計(jì)劃管理)、Azure Artifacts(包管理)等在內(nèi)的全套工具鏈。
借助Azure DevOps,用戶能夠快速開始實(shí)踐DevOps理念,而無需在意工具的選擇以及支持DevOps的基礎(chǔ)設(shè)施的維護(hù),將精力專注于業(yè)務(wù)的開發(fā)。
Azure DevOps除了支持內(nèi)置工具集,還支持很多開源工具,用戶可以結(jié)合自身的實(shí)際情況來選擇適合自己的工具。
接下來,我們將通過一個案例模擬DevOps的持續(xù)集成/持續(xù)發(fā)布(CI/CD)過程,體驗(yàn)如何通過Azure DevOps將手工的網(wǎng)站更新操作自動化。
Azure DevOps CI/CD演練
例如一家公司運(yùn)行著一個Python編寫的公司門戶,雖然內(nèi)容不多,但是需要經(jīng)常修改頁面內(nèi)容。
小A是網(wǎng)站開發(fā)人員,小B是網(wǎng)站運(yùn)維人員。每次更新內(nèi)容后,小A都需要將改好的代碼上傳到GitHub,小B拉取并手動更新到對應(yīng)的Web服務(wù)器中。這一過程不僅需要大量手工工作,而且時(shí)不時(shí)會出現(xiàn)問題,導(dǎo)致公司網(wǎng)站無法訪問。
接下來,我們嘗試將這個場景應(yīng)用在Azure DevOps中通過Pipelines實(shí)現(xiàn)程序自動化發(fā)布。隨后,小A只需將代碼上傳到GitHub,就會自動觸發(fā)一整套部署流程,部署到預(yù)生產(chǎn)環(huán)境,且增加了代碼檢查與同事核查,確保了發(fā)布的準(zhǔn)確性;而小B可以專心維護(hù)Azure DevOps Pipelines,確保運(yùn)行的準(zhǔn)確性,而無需手工完成部署任務(wù)。
在我們構(gòu)想的這個場景中,經(jīng)過DevOps的改造,原本耗時(shí)1小時(shí)的構(gòu)建/發(fā)布過程可以縮短到5分鐘!這極大提高了工作效率,同時(shí)可以將人為失誤風(fēng)險(xiǎn)降到最低。
第一步:構(gòu)建Python Web網(wǎng)站自動化發(fā)布流程
實(shí)驗(yàn)的第一階段,我們將構(gòu)建一條CI/CD的Pipeline,隨后當(dāng)我們的代碼Merge到Master Branch后,會由CI/CD Pipeline進(jìn)行必要的測試打包工作,并發(fā)布到生產(chǎn)環(huán)境中,整個過程無需人工接入。本次實(shí)驗(yàn)將模擬一個基于Python Django開發(fā)的Web站點(diǎn),發(fā)布到Azure Web App中。
創(chuàng)建一條AzurePipeline for CI工作,名為zjPythonWebCI
1、點(diǎn)擊“New pipeline”,設(shè)置源代碼管理的GitHub鏈接,選擇創(chuàng)建一條空的Pipeline。
選擇Build所需的Build Agent Pool:
2、添加Build Pipeline的一系列任務(wù)
添加任務(wù)設(shè)置Build Agent上運(yùn)行的Python版本:
添加任務(wù)安裝PythonWeb必要的依賴項(xiàng),所有依賴項(xiàng)均放在GitHub中的requirements.txt內(nèi):
添加任務(wù)運(yùn)行必要的單元測試,所有測試的相關(guān)用例均存放在GitHub中的unittests內(nèi):
添加任務(wù)將測試結(jié)果發(fā)布到Azure Pipeline中的Test Tab:
接下來的三個任務(wù)會將PythonWeb代碼打包成ZIP文件,發(fā)國際快遞Azure DevOps Artifact中,為后續(xù)部署工作做準(zhǔn)備
最后收尾,設(shè)置好CI Pipeline的觸發(fā)規(guī)則,達(dá)到持續(xù)集成的目的:
接下來我們試驗(yàn)一下Pipeline zjPythonWebCI是否工作正常,從結(jié)果看起來一切正常。
創(chuàng)建一條Azure Pipeline for CD工作,名為zjPythonWebCD
1、點(diǎn)擊PipelineReleases創(chuàng)建一條部署的Pipeline:
添加CI Pipeline構(gòu)建的Artifact
2、添加Release Pipeline部署過程的一系列任務(wù)
添加任務(wù)在Azure App Service中安裝必要的Python Extension插件
添加任務(wù)將Build好的ZIP包發(fā)布到預(yù)先創(chuàng)建的Web App中
步驟中需要設(shè)置Generate web.config parameters,具體代碼如下
WSGIHANDLER django.core.wsgi.getwsgiapplication() DJANGOSETTINGSMODULE pythonwebappdjango.settings PYTHONPATH $(AzureAppServiceManage2.LocalPathsForInstalledExtensions)\python.exe PYTHONWFASTCGIPATH $(AzureAppServiceManage2.LocalPathsForInstalledExtensions)\wfastcgi.py appType pythonDjango
步驟中需要設(shè)置的Deploy腳本如下
@echo off
if NOT exist $(AzureAppServiceManage2.LocalPathsForInstalledExtensions)/python.exe (
echo Python extension not available 2
EXIT /b 1
)
echo Installing dependencies
call $(AzureAppServiceManage2.LocalPathsForInstalledExtensions)/python.exe m pip install U setuptools
call $(AzureAppServiceManage2.LocalPathsForInstalledExtensions)/python.exe m pip install r requirements.txt
添加任務(wù)添加一系列測試任務(wù),確保部署的工作是正常運(yùn)行的
接下來我們試驗(yàn)一下Pipeline zjPythonWebCD是否工作正常,從結(jié)果看起來一切正常
接下來,小A如果需要更改頁面內(nèi)容就簡單多了,他只需要更改頁面代碼,提交到GitHub即可;Azure Pipeline會監(jiān)聽GitHub的Commit,觸發(fā)CI/CD操作:
第二步:分離測試/生產(chǎn)環(huán)境
不過,目前的Release Pipeline還有一個問題:沒有做到測試生產(chǎn)隔離,無論測試結(jié)果如何,代碼都已經(jīng)部署到了環(huán)境中。接下來我們需要將環(huán)境分開,借用Web App Deploy Slot,當(dāng)測試沒有問題,再將Staging環(huán)境與Production環(huán)境切換。
首先,我們將Release的階段改為Staging,同時(shí)去掉Pre approval,任何Build好的代碼都可以發(fā)布到Web App Staging的部署槽中:
另外再增添一個階段,名為Production,同時(shí)Enable PreApproval/Gate,只有當(dāng)代碼審核通過,且Gate驗(yàn)證通過后,代碼才會部署到環(huán)境中:
這樣當(dāng)環(huán)境中有不符合策略的地方存在,即使人為Approve也不會部署到環(huán)境中,確保了應(yīng)用發(fā)布的安全可靠。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部