1. 程式人生 > >使用Azure Pipelines來實現Teams App的CI

使用Azure Pipelines來實現Teams App的CI

我在之前的文章裡介紹瞭如何一步步配置CI/CD來部署Teams App( 之前的文章 ),隨著Azure DevOps的發展,微軟推出了Azure Pipelines。在這篇文章中,主要介紹什麼是Azure Pipelines,以及如何使用Azure Pipelines來進行Teams App的構建、測試和部署工作負載

什麼是Azure Pipelines

微軟釋出了Azure Pipelines,他們新的 CI/CD 服務,是 Azure DevOps 產品的一部分。Azure Pipelines 可用於構建、測試和部署工作負載,並可以讓各種語言、專案型別和平臺協同工作。

作為 Visual Studio Team Services(VSTS)的後續產品,Azure DevOps 由幾個元件組成,Azure Boards、Azure Repos、Azure Test Plans、Azure Artifacts和 Azure Pipelines。Azure DevOps 提供了端到端服務,用於共享程式碼、跟蹤工作並提供類似於其他服務(如Atlassian Stack)的解決方案。 這些元件都是 Azure DevOps 鏈中的一個連結,Azure Pipelines 實現了 CI/CD 管道的角色。 此外,Azure Pipelines 具有以前在 VSTS 中可用的所有功能,並補充了一些新功能:

  • Azure Pipelines 是一項獨立服務,可以獨立於其他 Azure DevOps 元件使用。
  • 可以直接通過 GitHub Marketplace 獲取和配置新的管道。
  • 更好地與 GitHub 整合,包括拉取請求的構建和跟蹤程式碼提交及其相關問題。
  • 通過容器作業來支援原生容器。
  • 開源專案可以免費使用 Azure Pipelines。
  • 相比 VSTS,Azure Pipelines 提供了更加靈活的免費使用限制。

如何利用Azure Pipelines來構建Build

之前的文章中,提到如何利用Azure DevOps來Build、Deploy應用到Azure上,實現CI/CD的整個部署過程,簡單回顧下配置的步驟:

1、在Azure DevOps中新建Repo, 本地Clone,Push程式碼
2、在Azure DevOps中並編譯生成一個 .NET Core應用, 配置持續整合環境
3、將Azure新增到Azure DevOps的Service Endpoint(僅限中國區的Azure)
4、在Azure中建立App Service
5、配置Azure DevOps中構建的應用Release到Azure App Service

下面,一步步的演示,如何使用Azure Pipelines構建一個新的Build,其中一個檔案azure-pipelines.yml,是整個Azure Pipelines服務的關鍵, 我們將逐個分析整個yml配置的含義

一、配置build pipelines

1、進入到Azure Devops, 看到整個的功能模組導航,和之前已經有很大的變化,這裡我們略過新建Repos,Check in程式碼的過程, 找到 “Pipelines”,點選 “Build”,新建New build pipelinespipelines_step1

2、這裡“Location” 選擇 “Azure Repos” pipelines_step2

3、選擇專案程式碼的Repos pipelines_step3

4、Build的配置模板,選擇“ASP.NET Core”, pipelines_step4

5、配置完成,開始整個Build的過程 pipelines_step5

到此整個自動化Build的過程就已經配置好了,和之前最大的一個不同是,回到Code Repos, 看到在我們的專案程式碼中,自動生成了一個名為azure-pipelines.yml檔案
azure-pipelines_yml

開啟這個yml檔案,看下里面的配置引數

pool:
  vmImage: 'vs2017-win2016'

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

- task: [email protected]
  inputs:
    command: publish
    publishWebProjects: False
    projects: 'MicrosoftTeams.OutgoingWebhook.csproj'
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

二、Azure Pipelines中yml檔案釋義

1、首先,pool vmImage引數

pool:
  vmImage: 'vs2017-win2016'

這裡的pool vmImage引數表示:Build Environment, 其中的可選項有 ‘ubuntu-16.04’、’macOS-10.13’、’vs2017-win2016’,在Microsoft-hosted agents中有不同 的系統環境及其版本供選擇

2、variables

  variables:
  buildConfiguration: 'Release'

這裡的buildConfiguration引數表示: Build的版本是Release版本

3、steps

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'

這裡的script: dotnet build表示:執行build的工作指令碼,命令,並且進行build的輸出配置,或者使用.NET Core task的模式進行配置,如下:

steps:
- task: [email protected]
  inputs:
    command: restore
    projects: '**/*.csproj'
    feedsToUse: config
    nugetConfigPath: NuGet.config    # Relative to root of the repository
    externalFeedCredentials: <Name of the NuGet service connection>

在restore之前,如果我們想要在Microsoft-hosted agent指定 .Net Core SDK的版本進行Build,可以在yml配置中加入如下配置
```yml
- task: [email protected]
  inputs:
    version: '2.1.300' # replace this value with the version that you need for your project

4、task

- task: [email protected]
  inputs:
    command: publish
    publishWebProjects: False
    projects: 'MicrosoftTeams.OutgoingWebhook.csproj'
    arguments: '--configuration $(BuildConfiguration) --output $(Build.ArtifactStagingDirectory)'
    zipAfterPublish: True

其中task表示:使用.NET Core task的進行模式執行任務構建, command則別是構建的執行的命令,比如常用的build、test、publish等

三、總結

從上面的yaml的指令碼配置,結合微軟的官方文件, 如下截圖:
yaml_model

designer_model

我們可以這樣去理解,相當於以前從視覺化的介面進行CI的配置(截圖中的Designer模式),現在在Azure Pipelines中使用yaml檔案進行配置(截圖中的YAML模式),這進一步方便了對CI過程的配置,當我們需要改變 我們的CI行為,比如增減組建,步驟等,直接修改配置檔案,當push程式碼,merge到分支後,則整個構建流程會按照新的配置檔案進行構建,這無疑提供了更大的靈活性。

參考文件