Azure DevOps如何获取自定义内部版本号格式到YAML构建管道?

Kam*_*nov 9 azure azure-devops

我有一个内部版本号格式“ $(BuildDefinitionName)-$(Rev:.r)”,可以将其放入可视设计器选项中,并且效果很好。但是,现在我想开始使用新的YAML构建管道,但是我无法弄清楚如何将这种自定义内部版本号格式与“替换令牌”任务一起使用。

jfa*_*eyx 22

除了选择的答案,您还可以使用以下函数来应用自定义版本号

steps:
  - script: echo "##vso[build.updatebuildnumber]$(CustomValue)"
Run Code Online (Sandbox Code Playgroud)

如此处所述:Azure DevOps Logging Commands

我发现这在我的情况下很有帮助,我想从我的二进制文件中读取语义版本并将其应用于构建的名称。

编辑 2020-02-12

为了进一步详细说明如何利用该updatebuildnumber函数,以下是从 NodeJS API 中的 package.json 文件中提取 SemVer 并使用它来更新 Azure DevOps 内部版本号的示例。此示例使用 Azure DevOps 中的 yaml 样式构建。

例子:

构建编号更新

DevOps yaml 脚本...

- job: GetSemVer
  displayName: Get Semantic Version from Application
  timeoutInMinutes: 3
  continueOnError: false
  steps:
  - task: NodeTool@0
    inputs:
      versionSpec: '12.13.0'
    displayName: Install Node
    continueOnError: false  
  - bash: |
      APPSEMVER=$(node -pe "require('./package.json').version")
      echo "##vso[task.setvariable variable=version;isOutput=true]$APPSEMVER"      
    name: App 

- job: CreateBuildVersion
  displayName: Create Build Identifier
  dependsOn: GetSemVer
  timeoutInMinutes: 2
  continueOnError: false
  variables:
    appVersion: $[ dependencies.GetSemVer.outputs['App.version'] ]
    buildIncrement: $[counter(variables['appVersion'], 0)] # create a counter that is used to increment build run for same app version
    buildVersion: "$(appVersion)$(optionalBuildTag)-$(buildIncrement)"
  steps:
    - bash: echo "##vso[build.updatebuildnumber]$(buildVersion)" # Update build number in Pipeline UI 
Run Code Online (Sandbox Code Playgroud)

首先,在 中job: GetSemVer,我从 package.json 中提取语义版本并创建一个将传递给下一个作业的变量...

- bash: |
  APPSEMVER=$(node -pe "require('./package.json').version")
  echo "##vso[task.setvariable variable=version;isOutput=true]$APPSEMVER"
name: App
Run Code Online (Sandbox Code Playgroud)

接下来,job: CreateBuildVersion我使用GetSemVerjob 中的应用程序版本创建一个局部变量 titled appVersion,一个构建运行计数器, titled buildIncrement。每次为同一应用程序 semver 运行构建时,构建运行计数器都会增加。计数器将包含在我们将提供给 Azure DevOps 的内部版本号中,如果我们为同一应用程序版本多次执行内部版本,则有助于避免命名冲突。

appVersion: $[ dependencies.GetSemVer.outputs['App.version'] ]
buildIncrement: $[counter(variables['appVersion'], 0)] # create a counter that is used to increment build run count for same app version
Run Code Online (Sandbox Code Playgroud)

然后,我构造了一个buildVersion变量,它由应用程序的 semver、一个可选的构建标记(例如,用于开发环境的“-alpha”)(从 DevOps 中的环境变量注入)和构建运行计数组成。例如“1.1.6-alpha-0”

buildVersion: "$(appVersion)$(optionalBuildTag)-$(buildIncrement)"
Run Code Online (Sandbox Code Playgroud)

最后,我通过build.updatebuildnumber用我的新buildVersion变量调用函数来更新 azure 中的内部版本号。

- bash: echo "##vso[build.updatebuildnumber]$(buildVersion)" # Update build number in Pipeline UI
Run Code Online (Sandbox Code Playgroud)

注意:您可以根据自己的喜好组织上述步骤。我们将获取 SemVer 与构建 buildVersion 分开,因为我们使用不同的语言和框架,这使得从一个应用程序到下一个应用程序获取 SemVer 是不同的。所以,这一步对我们来说经常改变。但是,您可以在一项“工作”中完成所有这些步骤。


Kam*_*nov 8

似乎是“系统自动插入了一些变量”。这些预定义的变量可以从https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=vsts找到。就我而言,我可以使用

name: $(BuildDefinitionName)-$(Rev:.r)
resources:
- repo: self
queue:
name: Hosted VS2017
variables:
testing: $(Build.BuildNumber)

steps:
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: testing'
inputs:
PathtoPublish: Testing

ArtifactName: Testing
Run Code Online (Sandbox Code Playgroud)

作为我的构建 YAML。

  • 更多信息:[运行编号 - Azure Pipelines](https://docs.microsoft.com/en-us/azure/devops/pipelines/process/run-number?view=azure-devops&tabs=yaml) (3认同)