如何在 Azure Devops 构建管道中用串联版本变量替换令牌

How to replace a token with a concatenated version variable in an Azure Devops Build Pipeline

我的 Azure DevOps 构建管道使用 GitVersion 对构建工件进行版本控制。存在任务会设置 GitVersion 变量,该变量可以访问 GitVersion.MajorMinorPatch 等等。不过,我想要做的是将此变量与 BuildID 连接起来。使用以下命令设置工件名称效果很好:

name: $(GitVersion.MajorMinorPatch).$(BuildID)

下一步我想将版本写入各种配置文件。我安装了 ReplaceToken 插件,它用变量 "Version".

的内容替换了特定的令牌(在我的例子中是#{Version}#)

创建一个名为 Version 且值为“$(GitVersion.MajorMinorPatch).$(BuildID)”的变量只是将变量替换为字符串而不是计算值。我已经尝试在 GitVersion 任务之后运行的作业中设置变量,因此在创建变量时它应该已经存在。

例如

- job: 'Frontend'
  dependsOn: 'Preparation'
  variables:
    Version: $('GitVersion.MajorMinorPatch')

  steps:
  - bash: echo $(Version)

"Preparation" 作业当前是 运行 GitVersion 任务,因此它存在于其他作业中。

如何将串联的 GitVersion/BuildId-Version 放入配置文件?

问题出在 GitVersion 变量的范围上。我只能在执行任务的作业中访问它。

解决方法:

  1. 在 powershell 脚本中连接版本 (GitVersion.MajorMinorPatch + Build.BuildId) 并将其导出到存在 GitVersion 的作业中。

    - powershell: echo "##vso[task. variable=Version;isOutput=true]$env:VERSION.$env:BUILD_ID"
      env:
        VERSION: $(GitVersion.MajorMinorPatch)
        BUILD_ID: $(Build.BuildId)
      name: SetVersion
      displayName: Set Version
    
  2. 将版本映射到依赖作业中的变量:

    - job: 'Frontend'
      dependsOn: 'Preparation'
      variables:
        Version: $[ dependencies.Preparation.outputs['SetVersion.Version']]
    

现在变量版本应该出现在作业中