使用Azure DevOps Pipeline实现.Net Core程序的CD
上一次我們講了使用Azure DevOps Pipeline實現(xiàn).Net Core程序的CI。這次我們來演示下如何使用Azure DevOps實現(xiàn).Net Core程序的CD。
實現(xiàn)本次目標我們除了Azure DevOps外還需要:
一臺安裝了Docker的主機
一個 Docker Hub 賬號
上一次我們的CI實現(xiàn)了:
發(fā)布>編譯>單元測試
這次我們要實現(xiàn)剩下的幾個步驟:
生成鏡像>推送鏡像>部署
創(chuàng)建Docker鏡像倉庫
我們生成的鏡像需要有個存放的地方。各大云廠商其實都有這種服務,這次直接使用Docker Hub提供的公共倉庫服務。
創(chuàng)建一個倉庫名叫:azdevoptest。
創(chuàng)建Dockerfile
我們的代碼創(chuàng)建為鏡像需要一個Dockerfile來描述如何構建這個鏡像。在項目根目錄下新建一個文件命名為Dockerfile注意不帶任何后綴名。以下為Dockerfile的內(nèi)容:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build WORKDIR /app COPY /. /app RUN dotnet restore WORKDIR /app/devops_test RUN dotnet publish -o ./out -c Release EXPOSE 5000 ENTRYPOINT ["dotnet", "out/devops_test.dll"]配置Servic Connections
選擇ProjectSetting菜單,選擇Service connections。Service connections用來存儲跟外部服務相關的賬號密碼等信息,這里我們需要配置2個service。
Docker Hub的信息
主機SSH的信息
配置Docker Registry service
我們的pipeline需要給Docker hub推送鏡像,所以需要一些必要的信息,比如賬號密碼等信息。
點擊"New Service"找到Docker Register項目點擊下一步
選擇DockerHub,填寫對應的賬號密碼
配置SSH service
我們的pipeline在完成鏡像推送后需要通過SSH登錄到主機運行命令把新的鏡像跑起來。
填寫主機IP端口等信息。
修改pipeline
上次我們的pipeline已經(jīng)定義好了CI的步驟,這次需要在上次的基礎上繼續(xù)完善CD的功能。
BuildAndPush Task
找到上次的pipeline選擇編輯功能,在右邊的Task列表里找到DockerTask,點擊出現(xiàn)配置界面
在Container register里選擇前面在service connections配置的docker-hub服務。
repository填寫我們在docker hub上新建的倉庫:kklldog/azdevoptest 。注意:倉庫名稱要把用戶名寫全了不然推不上去。
tags填寫:latest 。
command:選擇buildAndPush 。build跟push本是兩步操作,這里直接合并為一步。
SSH Task
添加完BuildAndPush Task后同樣的方法再次添加SSH Task。
SSH service connection里選擇前面我們配置好的ssh service。
Run 這里選擇Commands。
Commands 填寫需要執(zhí)行的命令:
簡單解釋下這個命令:
刪除運行的容器;刪除鏡像;拉取最新的鏡像;使用新的鏡像運行一個容器。
完整的pipeline
到此我們的pipeline已經(jīng)配置好了,以下是完整的pipeline.yml代碼。
# ASP.NET Core (.NET Framework) # Build and test ASP.NET Core projects targeting the full .NET Framework. # Add steps that publish symbols, save build artifacts, and more: # https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core trigger: - master pool:vmImage: 'ubuntu-18.04' variables:solution: '**/*.sln'buildPlatform: 'Any CPU'buildConfiguration: 'Release' steps: - task: DotNetCoreCLI@2inputs:command: 'restore' - task: DotNetCoreCLI@2displayName: Buildinputs:command: buildprojects: '**/*.csproj'arguments: '--configuration $(buildConfiguration)' - task: DotNetCoreCLI@2inputs:command: testprojects: '**/*Tests/*.csproj'arguments: '--configuration $(buildConfiguration)' - task: Docker@2inputs:containerRegistry: 'docker-hub'repository: 'kklldog/az_devop_test'command: 'buildAndPush'Dockerfile: '**/Dockerfile'tags: latest - task: SSH@0inputs:sshEndpoint: 'azvm-ssh'runOptions: 'commands'commands: |docker rm -f az_devop_testdocker rmi -f kklldog/az_devop_testdocker pull kklldog/az_devop_testdocker run -d -p 5000:5000 --name az_devop_test kklldog/az_devop_testreadyTimeout: '20000'運行一下
手動運行一個這個pipeline,點擊pipeline可以看到實時的日志,等到最后可以看到每一步都成功了,說明我們的pipeline配置成功了。
訪問一下容器對應的端口,我們的網(wǎng)站已經(jīng)可以訪問了。修改一下代碼,然后提交,每次都會自動部署最新的代碼到主機。
總結
以上通過2篇文章簡單的介紹了Azure DevOps Pipeline如何實現(xiàn)CICD功能。Azure DevOps Pipeline給我的感覺是比較易用的,配置yml其實都是圖形化的上手難度會比較小。另外它跟Github有深入的集成,可以使用Github的賬號直接登錄。況且它還是個免費服務,大家可以試試。
關注公眾號一起玩轉技術
總結
以上是生活随笔為你收集整理的使用Azure DevOps Pipeline实现.Net Core程序的CD的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初识ABP vNext(9):ABP模块
- 下一篇: 双城生活,一种相对无奈且幸福的选择