[Azure DevOps] 編譯時自動修改版本號
- 2021 年 6 月 21 日
- 筆記
- Azure DevOps, WPF
1. 需求
在使用 Pipeline 自動化 CI/CD 流程的過程中,我還還需要自動修改程式集的版本號。這個功能 EdiWang 和LeoLaw 都寫文章講解過做法。不過我的項目基本都是 .Net Framework 項目,而且我的版本號規則也不一樣,所以這裡分享一下我的做法。
我用的規則版本號規則是 [Major].[Minor].[BuildId].0,其中:
- 進行不兼容的 API 更改時,
Major
將會增加 - 以後向兼容方式添加功能時,
Minor
將會增加 Buildid
是一個也稱為運行 ID 的內部不可變 ID, 它在整個組織中是唯一的。- 第 4 位保留不用
2. 使用變數組定義 ‘Major’ 和 ‘Minor’
Major
和 Minor
只有在發布新版後才會修改,因為同一個項目有幾個 Pipeline(測試用、發布用等),所以我將它們定義在變數組中。定義變數組的過程如下:
- 打開 Library 選項卡,然後點擊 + Varible group。
- 輸入 Variable group name,這裡我就隨便寫了個 ‘My variable group’。
- 啟用「Allow access to all pipelines」,允許所有 Pipeline 使用。
- 點擊左下角的 + Add 按鈕添加變數。如果要加密存儲,可以選擇每個變數行末尾的鎖定圖標,這樣變數的 Value 會以
*******
的方式顯示。 - 最後點擊 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 – 部落格園