1. 程式人生 > 其它 >[Azure DevOps] 編譯時自動修改版本號

[Azure DevOps] 編譯時自動修改版本號

1. 需求

在使用 Pipeline 自動化 CI/CD 流程的過程中,我還還需要自動修改程式集的版本號。這個功能 EdiWang 和LeoLaw 都寫文章講解過做法。不過我的專案基本都是 .Net Framework 專案,而且我的版本號規則也不一樣,所以這裡分享一下我的做法。

我用的規則版本號規則是 [Major].[Minor].[BuildId].0,其中:

  • 進行不相容的 API 更改時,Major 將會增加
  • 以後向相容方式新增功能時,Minor 將會增加
  • Buildid 是一個也稱為執行 ID 的內部不可變 ID, 它在整個組織中是唯一的。
  • 第 4 位保留不用

2. 使用變數組定義 'Major' 和 'Minor'

MajorMinor 只有在釋出新版後才會修改,因為同一個專案有幾個 Pipeline(測試用、釋出用等),所以我將它們定義在變數組中。定義變數組的過程如下:

  1. 開啟 Library 選項卡,然後點選 + Varible group
  2. 輸入 Variable group name,這裡我就隨便寫了個 'My variable group'。
  3. 啟用“Allow access to all pipelines”,允許所有 Pipeline 使用。
  4. 點選左下角的 + Add 按鈕新增變數。如果要加密儲存,可以選擇每個變數行末尾的鎖定圖示,這樣變數的 Value 會以 ******* 的方式顯示。
  5. 最後點選 Save 儲存。

建立變數組後,開啟要使用這個變數組的 Pipeline,然後切換到 Variables 選項卡,在左邊的列表中選中 Variable groups,在開啟的頁面中點選 Link variable group,然後在開啟的變數組列表中選中剛剛建立的變數組,點選 Link,完成後這個頁面顯示如下。

如果要在 YAML 上進行同樣的操作,只需要在 YAML 中新增這句:

variables:
- group: My variable group

3. 使用預定義的 Build.BuildId 變數

Azure Pipelines 提供了一批預定義變數,,用於在 Pipeline 的任務中共享常見資訊。詳細的預定義變數列表可以參考

預定義變數 - Azure Pipelines Microsoft Docs 這個文件。

要唯一地標識一個 Pipeline,可以參考 配置執行或生成號 這個文件中列出的變數,例如 $(Date:yyyyMMdd)$(Rev:.r) 輸出為 20200828.1,即 220年8月28日的第一次生成。

這裡我選擇了 Build.BuildId 作為版本號的第三位,它是每次一執行 Pipeline 都會遞增的一個整數變數,而且它在整個組織中是唯一的,很適合用來做版本號。

4. 使用擴充套件更新版本號

懶得考慮如何更新版本號的話,可以使用 MarketPlace 裡提供的擴充套件來處理。我選擇了 Richard Fennell’s Manifest Versioning Build Tasks Azure DevOps extension 這個擴充套件,安裝後在新增任務的列表裡輸入 "Version Assemblies" 找到 Version .NET Assemblies 這個任務並點選 Add 新增這個任務。

將新新增的 Task 拖動到 Build solution 的任務之前:

然後在任務的配置表單中的 Version Number 輸入框中,輸入:

$(AssemblyVersion).$(Build.BuildId).0

其中 AssemblyVersion 是在變數組中定義的變數,Build.BuildId 是 AzurePipelines 預定義的變數。

上面的操作在 YAML 中相當於:

name: '1.0.0.$(Rev:r)'

steps:
- task: richardfennellBM.BM-VSTS-Versioning-Task.Version-Assemblies-Task.VersionAssemblies@2
  displayName: Version the assemblies
  inputs:
    Path: '$(Build.SourcesDirectory)'
    VersionNumber: '$(AssemblyVersion).$(Build.BuildId).0'
    InjectVersion: true
    FilenamePattern: 'AssemblyInfo.*'
    OutputVersion: 'OutputedVersion'

5. 最後

Pipeline 執行完畢後,輸出的桌面應用程式的版本資訊如下,可以看到檔案版本和產品版本的版本號都已經改為 4.2.127.0

更多的資訊可以參考下面給出的連結:

Incremental Build Number for .NET Core via Azure DevOps

Azure Devops_Tfs 編譯的時候自動修改版本號 - LeoLaw - 部落格園