Azure DevOps如何將繁重的手工部署轉(zhuǎn)化成安全可靠的自動(dòng)化流程?

來(lái)源: 微軟中國(guó)MSDN
作者:趙健
時(shí)間:2020-08-13
3322
Azure DevOps是微軟提供的,用于幫助開發(fā)者實(shí)現(xiàn)DevOps文化的工具集合,包含Azure Boards(看板,實(shí)現(xiàn)任務(wù)管理)、Azure Pipelines(持續(xù)集成持續(xù)發(fā)布)、Azure Repos(代碼管理)、Azure Test Plans(測(cè)試計(jì)劃管理)、Azure Artifacts(包管理)等在內(nèi)的全套工具鏈。

DevOps是生產(chǎn)力/生產(chǎn)過(guò)程/產(chǎn)品迭代的結(jié)合,以便持續(xù)向終端用戶輸出有價(jià)值的服務(wù)。因此可以認(rèn)為,DevOps并不是一種框架/服務(wù),更像是一種方法論/文化,可以幫助企業(yè)快速/高質(zhì)量/安全地實(shí)現(xiàn)產(chǎn)品的迭代及技術(shù)的革新。

細(xì)看會(huì)發(fā)現(xiàn),DevOps可以劃分成很多部分,包括溝通協(xié)作/任務(wù)管理、持續(xù)集成/持續(xù)部署、代碼管理、基礎(chǔ)設(shè)施即代碼、持續(xù)監(jiān)控等。隨著時(shí)機(jī)的成熟,市場(chǎng)的教育普及與工具鏈的成熟度越來(lái)越高,很多企業(yè)也實(shí)實(shí)在在看到了DevOps的價(jià)值。有數(shù)據(jù)顯示:采用或部分采用DevOps的公司,發(fā)布頻率提高了46倍,Bug修復(fù)時(shí)間提升了440倍,可以提前20%將產(chǎn)品推向市場(chǎng),出錯(cuò)率減少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(測(cè)試計(jì)劃管理)、Azure Artifacts(包管理)等在內(nèi)的全套工具鏈。

ia_5300000002 (1).jpg

借助Azure DevOps,用戶能夠快速開始實(shí)踐DevOps理念,而無(wú)需在意工具的選擇以及支持DevOps的基礎(chǔ)設(shè)施的維護(hù),將精力專注于業(yè)務(wù)的開發(fā)。

Azure DevOps除了支持內(nèi)置工具集,還支持很多開源工具,用戶可以結(jié)合自身的實(shí)際情況來(lái)選擇適合自己的工具。

ia_5300000003.jpg

接下來(lái),我們將通過(guò)一個(gè)案例模擬DevOps的持續(xù)集成/持續(xù)發(fā)布(CI/CD)過(guò)程,體驗(yàn)如何通過(guò)Azure DevOps將手工的網(wǎng)站更新操作自動(dòng)化。

Azure DevOps CI/CD演練

例如一家公司運(yùn)行著一個(gè)Python編寫的公司門戶,雖然內(nèi)容不多,但是需要經(jīng)常修改頁(yè)面內(nèi)容。

小A是網(wǎng)站開發(fā)人員,小B是網(wǎng)站運(yùn)維人員。每次更新內(nèi)容后,小A都需要將改好的代碼上傳到GitHub,小B拉取并手動(dòng)更新到對(duì)應(yīng)的Web服務(wù)器中。這一過(guò)程不僅需要大量手工工作,而且時(shí)不時(shí)會(huì)出現(xiàn)問(wèn)題,導(dǎo)致公司網(wǎng)站無(wú)法訪問(wèn)。

接下來(lái),我們嘗試將這個(gè)場(chǎng)景應(yīng)用在Azure DevOps中通過(guò)Pipelines實(shí)現(xiàn)程序自動(dòng)化發(fā)布。隨后,小A只需將代碼上傳到GitHub,就會(huì)自動(dòng)觸發(fā)一整套部署流程,部署到預(yù)生產(chǎn)環(huán)境,且增加了代碼檢查與同事核查,確保了發(fā)布的準(zhǔn)確性;而小B可以專心維護(hù)Azure DevOps Pipelines,確保運(yùn)行的準(zhǔn)確性,而無(wú)需手工完成部署任務(wù)。

在我們構(gòu)想的這個(gè)場(chǎng)景中,經(jīng)過(guò)DevOps的改造,原本耗時(shí)1小時(shí)的構(gòu)建/發(fā)布過(guò)程可以縮短到5分鐘!這極大提高了工作效率,同時(shí)可以將人為失誤風(fēng)險(xiǎn)降到最低。

第一步:構(gòu)建Python Web網(wǎng)站自動(dòng)化發(fā)布流程

實(shí)驗(yàn)的第一階段,我們將構(gòu)建一條CI/CD的Pipeline,隨后當(dāng)我們的代碼Merge到Master Branch后,會(huì)由CI/CD Pipeline進(jìn)行必要的測(cè)試打包工作,并發(fā)布到生產(chǎn)環(huán)境中,整個(gè)過(guò)程無(wú)需人工接入。本次實(shí)驗(yàn)將模擬一個(gè)基于Python Django開發(fā)的Web站點(diǎn),發(fā)布到Azure Web App中。

創(chuàng)建一條AzurePipeline for CI工作,名為zjPythonWeb-CI

1、點(diǎn)擊“New pipeline”,設(shè)置源代碼管理的GitHub鏈接,選擇創(chuàng)建一條空的Pipeline。

ia_5300000004.jpg

ia_5300000005.jpg

選擇Build所需的Build Agent Pool:

ia_5300000006.jpg

2、添加Build Pipeline的一系列任務(wù)

添加任務(wù)設(shè)置Build Agent上運(yùn)行的Python版本:

ia_5300000007.jpg

添加任務(wù)安裝PythonWeb必要的依賴項(xiàng),所有依賴項(xiàng)均放在GitHub中的requirements.txt內(nèi):

ia_5300000008.jpg

添加任務(wù)運(yùn)行必要的單元測(cè)試,所有測(cè)試的相關(guān)用例均存放在GitHub中的unit_tests內(nèi):

ia_5300000009.jpg

添加任務(wù)將測(cè)試結(jié)果發(fā)布到Azure Pipeline中的Test Tab:

ia_5300000010.jpg

接下來(lái)的三個(gè)任務(wù)會(huì)將PythonWeb代碼打包成ZIP文件,發(fā)送到Azure DevOps Artifact中,為后續(xù)部署工作做準(zhǔn)備

ia_5300000011.jpg

ia_5300000012.jpg

最后收尾,設(shè)置好CI Pipeline的觸發(fā)規(guī)則,達(dá)到持續(xù)集成的目的:

ia_5300000013.jpg

接下來(lái)我們?cè)囼?yàn)一下Pipeline zjPythonWeb-CI是否工作正常,從結(jié)果看起來(lái)一切正常。

ia_5300000014.jpg

創(chuàng)建一條Azure Pipeline for CD工作,名為zjPythonWeb-CD

1、點(diǎn)擊Pipeline-Releases創(chuàng)建一條部署的Pipeline:

添加CI Pipeline構(gòu)建的Artifact

ia_5300000015.jpg

2、添加Release Pipeline部署過(guò)程的一系列任務(wù)

添加任務(wù)在Azure App Service中安裝必要的Python Extension插件

ia_5300000016.jpg

添加任務(wù)將Build好的ZIP包發(fā)布到預(yù)先創(chuàng)建的Web App中

ia_5300000017.jpg

ia_5300000018.jpg

步驟中需要設(shè)置Generate web.config parameters,具體代碼如下

 -WSGI_HANDLER "django.core.wsgi.get_wsgi_application()" -DJANGO_SETTINGS_MODULE "python_webapp_django.settings" -PYTHON_PATH "$(AzureAppServiceManage2.LocalPathsForInstalledExtensions)\python.exe"  -PYTHON_WFASTCGI_PATH "$(AzureAppServiceManage2.LocalPathsForInstalledExtensions)\wfastcgi.py"  -appType python_Django

步驟中需要設(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ù)添加一系列測(cè)試任務(wù),確保部署的工作是正常運(yùn)行的

ia_5300000019.jpg

接下來(lái)我們?cè)囼?yàn)一下Pipeline zjPythonWeb-CD是否工作正常,從結(jié)果看起來(lái)一切正常

ia_5300000020.jpg

接下來(lái),小A如果需要更改頁(yè)面內(nèi)容就簡(jiǎn)單多了,他只需要更改頁(yè)面代碼,提交到GitHub即可;Azure Pipeline會(huì)監(jiān)聽GitHub的Commit,觸發(fā)CI/CD操作:

ia_5300000021.jpg

第二步:分離測(cè)試/生產(chǎn)環(huán)境

不過(guò),目前的Release Pipeline還有一個(gè)問(wèn)題:沒有做到測(cè)試生產(chǎn)隔離,無(wú)論測(cè)試結(jié)果如何,代碼都已經(jīng)部署到了環(huán)境中。接下來(lái)我們需要將環(huán)境分開,借用Web App Deploy Slot,當(dāng)測(cè)試沒有問(wèn)題,再將Staging環(huán)境與Production環(huán)境切換。

首先,我們將Release的階段改為Staging,同時(shí)去掉Pre approval,任何Build好的代碼都可以發(fā)布到Web App Staging的部署槽中:

ia_5300000022.jpg

另外再增添一個(gè)階段,名為Production,同時(shí)Enable Pre-Approval/Gate,只有當(dāng)代碼審核通過(guò),且Gate驗(yàn)證通過(guò)后,代碼才會(huì)部署到環(huán)境中:

ia_5300000023.jpg

ia_5300000024.jpg

ia_5300000025.jpg

這樣當(dāng)環(huán)境中有不符合策略的地方存在,即使人為Approve也不會(huì)部署到環(huán)境中,確保了應(yīng)用發(fā)布的安全可靠。

立即登錄,閱讀全文
原文鏈接:點(diǎn)擊前往 >
文章來(lái)源: 微軟中國(guó)MSDN
版權(quán)說(shuō)明:本文內(nèi)容來(lái)自于 微軟中國(guó)MSDN,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
隨著人工智能技術(shù)持續(xù)重塑企業(yè)運(yùn)營(yíng)方式,企業(yè)需要能夠處理海量數(shù)據(jù)的系統(tǒng),以支持實(shí)時(shí)洞察,同時(shí)幫助他們應(yīng)對(duì)跨IT和OT環(huán)境(包括云端、邊緣和本地)中運(yùn)營(yíng)、應(yīng)用、數(shù)據(jù)和基礎(chǔ)設(shè)施的協(xié)作難題。
Azure
微軟云
云服務(wù)
2024-12-17
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來(lái)
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來(lái)
.NET 9現(xiàn)已正式發(fā)布,它為.NET平臺(tái)的發(fā)展掀開了嶄新的一頁(yè),突破了性能、云原生開發(fā)和AI技術(shù)集成的邊界。
Azure
微軟云
云服務(wù)
2024-12-16
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
智能Microsoft Copilot副駕駛for Azure網(wǎng)絡(luò)服務(wù)現(xiàn)已推出公共預(yù)覽版。
Azure
微軟云
云服務(wù)
2024-12-10
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
一年前,我們正式推出了一款端到端數(shù)據(jù)平臺(tái),旨在幫助組織推動(dòng)人工智能轉(zhuǎn)型,并重新定義數(shù)據(jù)的連接、管理和分析方式。
Azure
微軟云
云服務(wù)
2024-12-09
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家