如何在Azure Devops生成管道中用串联的版本变量替换令牌

时间:2019-08-31 15:29:05

标签: azure-devops yaml azure-pipelines gitversion

我的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)

“准备”作业当前正在运行GitVersion任务,因此它在其他作业中也存在。

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

1 个答案:

答案 0 :(得分:2)

问题出在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. 将版本映射到Dependend作业中的变量:

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

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