日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)

發(fā)布時間:2023/12/4 asp.net 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在上文中我介紹了ASP.NET Core應(yīng)用程序容器化時需要注意的幾個問題,并給出了一個案例應(yīng)用程序:tasklist。今天接著上文的內(nèi)容,繼續(xù)了解一下如何使用Azure DevOps進行ASP.NET Core應(yīng)用程序的持續(xù)集成。為了便于討論,本文會將持續(xù)集成(Continuous Integration)縮寫為CI,而將持續(xù)部署(Continuous Deployment)縮寫為CD。

Azure DevOps前身是Visual Studio Team Services(VSTS),從2018年9月10日開始,VSTS改名為Azure DevOps,原來VSTS所提供的服務(wù)也作了相應(yīng)的調(diào)整。有關(guān)Azure DevOps的介紹,可以參考https://azure.microsoft.com/en-us/blog/introducing-azure-devops/。

容器化應(yīng)用程序的CI/CD流程

下圖展示了基于微軟技術(shù)架構(gòu)的容器化應(yīng)用程序的CI/CD流程:

大致流程如下:

  • 開發(fā)人員通過Visual Studio Team Services Backlog(也就是最新的Azure Boards)獲取一些開發(fā)任務(wù)

  • 開發(fā)人員使用Visual Studio進行應(yīng)用程序開發(fā)

  • 開發(fā)的代碼保存在Visual Studio Team Services Git(也就是最新的Azure Repos)

  • Visual Studio Team Services CI(也就是最新的Azure Pipelines)從代碼庫獲取代碼,進行編譯和持續(xù)集成

  • 編譯產(chǎn)生的容器被推送到Azure Container Registry

  • Visual Studio Team Services CD(也就是最新的Azure Pipelines)觸發(fā)持續(xù)部署,從Azure Container Registry獲取容器鏡像,然后部署到Azure Container Service中(這里使用托管的Kubernetes服務(wù)作為例子)

  • Azure Application Insights對運行的應(yīng)用程序進行跟蹤分析,并將結(jié)果反饋給開發(fā)人員

  • 開發(fā)人員將結(jié)果記錄到Visual Studio Team Services Backlog(也就是最新的Azure Boards)中

  • 這個過程還是比較容易理解的。圖片來自https://azure.microsoft.com/en-us/solutions/architecture/cicd-for-containers/。對于tasklist而言,我所采用的持續(xù)集成/持續(xù)部署方案跟上圖流程差不多,所不同的是,我沒有使用Azure Repos,而是使用眾所周知的GitHub,我也沒有使用Azure Container Registry,而是使用Docker Hub。接下來,我們一起了解一下Azure DevOps Pipeline持續(xù)集成的配置過程。

    基于Azure DevOps為tasklist搭建持續(xù)集成環(huán)境

    首先使用你的微軟賬號(Microsoft Account)登錄Azure DevOps,默認還是會進入經(jīng)典的VSTS界面,此時點擊屏幕右上角的大頭貼圖標(biāo),選擇Preview features:

    然后在Preview features中打開New Navigation選項即可進入Azure DevOps的新界面:

    接下來,我們可以點擊界面右上角的Create project按鈕來創(chuàng)建一個新的項目。在創(chuàng)建新項目的界面中,輸入項目名稱和描述,然后決定是否公開該項目,之后在Advanced部分可以選擇版本控制方案(Git或者Team Foundation Version Control),并且選擇一個開發(fā)流程。這里我將項目命名為tasklist-demo,版本控制方案使用Git,開發(fā)流程就選擇Agile(其實在我們的案例中,這并不重要)。一切就緒之后,點擊Create按鈕創(chuàng)建項目。

    項目創(chuàng)建成功之后,就自動進入了如上圖所示的項目儀表板(Dashboard),此時我們可以在Boards里創(chuàng)建一些開發(fā)任務(wù),然后通過Repos界面來初始化我們的代碼庫。不過,這兩個步驟我們都不需要做,因為我們的代碼已經(jīng)在GitHub中了,我們可以直接進入Pipelines,定義我們的項目構(gòu)建過程。

  • 在Pipelines項目下,點擊Builds,然后點擊New pipeline按鈕。在創(chuàng)建Build Pipeline的第一步,需要選擇代碼來源。Azure DevOps提供各種選擇:Azure Repos Git、GitHub、GitHub Enterprise、Subvision、Bitbucket Cloud以及External Git。對于tasklist而言,我們選擇使用GitHub。此時,如果你還沒有創(chuàng)建GitHub連接,則需要新建一個。如下圖指定GitHub連接的名稱,然后通過OAuth或者GitHub訪問token進行安全認證:

  • 在認證成功后,即可選擇需要編譯的代碼庫,并指定需要編譯的代碼所在的分支(Branch)。在一切就緒后,點擊Continue按鈕繼續(xù):

  • 接下來,在Select a template頁面中,點擊Empty job來創(chuàng)建一個空的構(gòu)建任務(wù),當(dāng)然,也可以根據(jù)需要,在預(yù)定的構(gòu)建模板中進行選擇

  • 在新建的Buid Pipeline中,可以看到,所有操作的第一步就是獲取源代碼,這一步已經(jīng)在上面定義好了,不過還可以在這個界面中進行一些高級設(shè)置,比如可以指定在簽出代碼時,將submodule也同時簽出

  • 我們需要關(guān)注的就是Agent Job,一個Build Pipeline中,可以包含多個Agent Job,也就是執(zhí)行過程需要Build Agent支持的Job;也可以包含多個Agentless Job,也就是執(zhí)行過程不需要Build Agent支持的Job。Agent Job的執(zhí)行需要依賴某種環(huán)境,比如托管的Linux環(huán)境,或者是裝有VS2017的Windows環(huán)境。而Agentless Job的執(zhí)行則不需要這樣的環(huán)境,比如,調(diào)用RESTful API,或者設(shè)置一個定時器,延遲后續(xù)Job的執(zhí)行等。對于tasklist而言,我們需要一個Linux的環(huán)境來執(zhí)行Docker容器構(gòu)建,因此,可以選擇Hosted Ubuntu 1604的Agent Pool,于是,當(dāng)代碼構(gòu)建開始執(zhí)行時,Azure DevOps會從Hosted Ubuntu 1604的Agent池中,選擇一個Agent執(zhí)行構(gòu)建

  • 接下來,在這個新建的Agent Job中,點擊加號(+),然后在列出的所有任務(wù)模板中,選擇Docker Compose,并點擊Add按鈕,將它添加到Agent的任務(wù)中。事實上,Azure DevOps Pipelines提供了非常多的任務(wù)模板,比如,你可以選擇一個執(zhí)行單元測試的模板并將其添加到Agent Job中,然后根據(jù)自己的需要,配置單元測試的運行參數(shù),這樣的話,Agent Job就能幫你完成單元測試

  • 在定義Docker Compose Command的界面中,注意將Container Registry Type切換為Container Registry,然后通過點擊New按鈕,新建一個Docker Registry連接。由于我們選用Docker Hub作為Registry,因此,選擇Docker Hub,填上自己的賬號和密碼后,確認能夠連接就可以了:

  • 在Docker Compose File文本框中,輸入tasklist代碼庫中docker-compose.yml文件的路徑,也可以點擊“…“按鈕,在彈出的對話框中選擇該文件:

  • 在Action下拉框中,指定所執(zhí)行的操作為Build service images,然后,在Additional Image Tags中,可以指定$(Build.BuildNumber),表示使用當(dāng)前的構(gòu)建編號為構(gòu)建產(chǎn)生的容器鏡像打上tag,同時可以選擇Include Latest Tag選項,表示當(dāng)前構(gòu)建的容器鏡像為最新版本(打上latest Tag)。完成這部分設(shè)置之后,參數(shù)大致如下:

  • 在完成了上述步驟之后,我們已經(jīng)可以完成整個tasklist App的編譯了??梢钥吹?#xff0c;在Azure DevOps中設(shè)置Build Pipeline進行代碼編譯是非常簡單的。由于我們已經(jīng)定義了用于代碼編譯的Docker Compose文件,所以,只需要在Pipeline中添加一個Docker Compose的編譯任務(wù)即可?,F(xiàn)在測試一下,看看編譯是否能夠成功完成:

  • 到目前為止,我們只是成功編譯了tasklist的容器鏡像,還沒有將鏡像推送到Docker Hub。在容器鏡像被推送到Docker Hub之后,我們才能夠?qū)⑷萜鞑渴鸬紸zure Container Service中運行。要推送編譯好的容器鏡像,只需要重復(fù)以上6到10步,在Agent Job下再添加一個Docker Compose的任務(wù),所不同的是,Action需要修改為Push service images,保持其它配置不變。保存完P(guān)ipeline之后,再次觸發(fā)編譯:

  • 打開Docker Hub,看看鏡像是否已經(jīng)成功推送:

  • 最后一步,就是要將tasklist代碼庫中的yml文件作為編譯結(jié)果(Artifacts)公布出來,這樣做是為了在下一步做Azure Kubernetes Service(AKS)部署的時候,能夠獲取到部署的定義文件并根據(jù)該文件的內(nèi)容進行部署。使用上述第6步的方法,添加一個Copy Files的任務(wù)和一個Publish Build Artifacts的任務(wù)。Copy Files的任務(wù)設(shè)置如下:

    Publish Build Artifacts的任務(wù)設(shè)置如下:

  • 再次啟動Build Pipeline,可以看到,tasklist已經(jīng)成功編譯:

    所需的編譯結(jié)果文件(yml文件)也復(fù)制成功:

  • 在Triggers頁面,可以選擇Enable continuous integration選項,此時每當(dāng)有新的代碼簽入代碼庫,就會觸發(fā)一次新的構(gòu)建。當(dāng)然,還有一些高級選項,比如選擇代碼分支等,還可以啟用Pull request validation,這些內(nèi)容與持續(xù)集成的流程有關(guān),我們可以在今后學(xué)習(xí),在這里,我們先勾選Enable continuous integration選項

  • 總結(jié)

    本文首先簡單介紹了容器化應(yīng)用程序的CI/CD流程,然后基于Azure DevOps,為tasklist案例建立了一個Build Pipeline,成功完成了tasklist App的編譯以及Docker容器鏡像的發(fā)布,最后,啟用了持續(xù)集成功能,使得每次代碼變更提交都會觸發(fā)CI過程。這部分設(shè)置與開發(fā)過程以及持續(xù)集成的流程有關(guān),不同的項目進行持續(xù)集成的方式也會有所不同,我們可以單獨在其它篇章中進行深入討論學(xué)習(xí)。在接下來的第三部分,讓我們一起看看,如何把編譯好的tasklist容器部署到Azure Kubernetes Service中。

    相關(guān)文章:

    • ASP.NET Core應(yīng)用程序容器化、持續(xù)集成與Kubernetes集群部署(一)

    • 微軟發(fā)布Azure Pipelines,開源項目可無限制使用CI/CD

    • 持續(xù)集成配置之Nuget

    原文地址:?http://sunnycoding.cn/2018/10/09/dockerize-aspnetcore-cicd-with-azure-devops-and-kubernetes-part2/


    .NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

    總結(jié)

    以上是生活随笔為你收集整理的ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。