[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 中添加这句:

Copy
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 输入框中,输入:

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

其中 AssemblyVersion 是在变量组中定义的变量,Build.BuildId 是 AzurePipelines 预定义的变量。

上面的操作在 YAML 中相当于:

Copy
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 - 博客园

posted @   dino.c  阅读(663)  评论(2编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示
CONTENTS