首页 > 解决方案 > Azure DevOps - 多个应用程序的 SemVer

问题描述

我有一个包含多个可执行项目的解决方案,我需要实现版本控制。主要和次要编号存储在 json 文件中,应生成补丁编号(递增)我想使用计数器功能:

$[counter(variables['version.MajorMinor'], 0)]

所以我想到了这样的事情(只是一个例子):

- job: GetVer
  displayName: 'Get Version'    
  steps:
  - task: PowerShell@2
    displayName: 'Get version'
    inputs:
      targetType: 'inline'
      script: |
        $arrayOfApps = @()
        foreach($file in Get-ChildItem $(System.DefaultWorkingDirectory) -Filter settings.json -Recurse | % { $_.DirectoryName })
        {
          $settingsJson = Get-Content ($file + '/settings.json') | Out-String | ConvertFrom-Json
          $arrayOfApps += $settingsJson
        }
        # So I have an array of objects (with a field called "Version") and it will be output variable
        Write-Host "##vso[task.setvariable variable=MyArray;isOutput=true]$arrayOfApps"
    name: result

如果我在下一份工作中只有一个版本,我可以这样做:

- job: SecondJob
  dependsOn: GetVer
  displayName: 'Try to increase version'
  variables:
    appVersion: $[ dependencies.GetVer.outputs['result.JUST_ONE_VERSION'] ]     
    patch: $[counter(variables['appVersion'], 0)]

但我有一个版本数组:result.MyArray,所以不能使用上面的构造。如何根据计数器为 MyArray 中的每个项目创建 appVersion 和补丁?我想使用模板来解决问题:

- template : azure-pipelines-mytemplate.yml
  parameters:
    Apps: MyArray

在模板中我会:

- ${{ each foundApp in parameters.Apps}}:
- job: SecondJob
  dependsOn: GetVer
  displayName: 'Try to increase version'
  variables:
    appVersion: foundApp.Version
    patch: $[counter(variables['appVersion'], 0)]

我不能使用模板,因为我们不能将包含动态数据的数组发送到模板。"result.MyArray" 只是一个字符串,所以这个:

- ${{ each foundApp in parameters.Apps}}:

不管用。

有没有办法处理这个?当然,我可以按日期等生成补丁号,但我希望它增加 +1。

十分感谢!

标签: powershellazure-devopsdevops

解决方案


推荐阅读