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