gpt4 book ai didi

azure-pipelines - 每个项目自动递增发布版本号

转载 作者:行者123 更新时间:2023-12-04 17:38:08 25 4
gpt4 key购买 nike

请帮助我为 Azure 中的管道构建任务获取自动递增的修订号。

假设有 major.minor.patch.revision 编号。 major.minor.patch 在存储在源代码管理中的版本文件中设置。这允许源代码维护者定义软件版本并且不更改构建任务定义(或其参数)。我想避免在构建新版本之前更新版本参数值。

但是我希望每次构建版本时自动增加修订。使 major.minor.patch 相同成为可能。

版本文件是一个包含major.minor.patch内容的纯文本文件。我在构建管道中有 powershell 脚本任务。它读取版本文件并存储为构建变量,如下所示:

$fv = Get-Content versionFile

$buildNumber = $env:BUILD_BUILDNUMBER
if ($buildNumber -eq $null)
{
$buildIncrementalNumber = 0
}
else
{
$splitted = $buildNumber.Split('.')
$buildIncrementalNumber = $splitted[$splitted.Length - 1]
}

Write-Host ("##vso[task.setvariable variable=versionFromFile]$fv.$buildIncrementalNumber")
Write-Host ("from file $fv incremental .$buildIncrementalNumber")
Write-Host ("##vso[task.setvariable variable=build.updatebuildnumber]$fv.$buildIncrementalNumber")

如您所见,它从 versionFile 读取并从 BUILDNUMBER 变量中获取 .N 部分以获得修订值。并将结果值存储到 versionFromFile 变量。

而且我希望为特定项目的每个构建自动更新最新版本。只是不要为每次提交到 master 分支而启动的每个构建更新版本源文件。

我试过使用 build number format然而问题在于,如果 Build number format 的主要部分发生更改,$(Rev:.r) 将被重置。这意味着对于数字格式 $(BuildDefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r) Rev 每天从零开始。

$(BuildId)是一个不可清除的唯一值(从零开始)

我尝试在内部版本号格式字符串中使用 versionFromFile 变量,但似乎内部版本号是在管道启动时计算的,并且无法在中使用自定义(脚本)变量值内部版本号。

我想再创建一个文件,如 revisionFile 并将修订值存储在该文件中。然而,我将需要在每次构建和提交时更新 revisionFile

是否有任何其他选项可以让项目的构建自动递增计数?我遇到了一个如何从 powershell 脚本更新构建管道变量的示例,但它与管道链接,因此拥有两个构建管道将为(可能)不同的版本产生相同的值。

PS 有可能通过 outputing "##vso[build.updatebuildnumber]1.2.3.4" to the log during the build 更新内部版本号但是 Rev 值是在任何任务有机会更新内部版本号之前计算的。

有 Git 和 Tfs 项目,所以如果能为这两种类型的源代码管理提供相同的解决方案就好了。

最佳答案

似乎已经有了答案: https://developercommunity.visualstudio.com/content/problem/240373/vsts-build-revision-does-not-increment-after-calli.html

Create a new variable: patch: $[counter('versioncounter',100)] Then, instead of using $(Rev:rrr), you would use $(patch).

我定义了两个测试变量:

test1: $[counter('versioncounter',1)]

test2: $[counter('versioncounter2',100)]

在构建管道中

这是日志:

构建 1 agent1 日志

[section]Starting: Prepare job Job_1 Variables:
test1: Parsing expression: Evaluating: counter('versioncounter', 1) Expanded: 1 Result: '1'
test2: Parsing expression: Evaluating: counter('versioncounter2', 100) Expanded: 100 Result: '100'

在此构建管道中为另一个代理生成相​​同的 test1 和 test2 值

然后我又执行了一次构建管道,这是日志

构建 2 agent1 日志

[section]Starting: Prepare job Job_1 Variables:
test1: Parsing expression: Evaluating: counter('versioncounter', 1) Expanded: 2 Result: '2'
test2: Parsing expression: Evaluating: counter('versioncounter2', 100) Expanded: 101 Result: '101'

我假设计数器值是根据第一个参数为键生成的

[del]这正是我要的[/del]

upd1 我试过在现实生活中运行这个

问题是 $[counter('versioncounter',1)] 仅用于构建变量初始化。我试过在 PS 脚本中使用它,如下所示

- powershell: |
$fv = Get-Content versionFile
$buildIncrementalNumber = $[counter($fv,1)]

但失败了:

$[counter : The term '$[counter' is not recognized as the name of a cmdlet, 
function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At E:\buildagent\networkProxy\_work\_temp\d22e789f-bed0-465a-b447-60f634d73c38.
ps1:3 char:27
+ $buildIncrementalNumber = $[counter($fv,1)]
+ ~~~~~~~~~
+ CategoryInfo : ObjectNotFound: ($[counter:String) [], ParentCon
tainsErrorRecordException
+ FullyQualifiedErrorId : CommandNotFoundException

是否可以从构建 power shell 脚本访问 $counter 魔法?

upd2 必须使用两个作业从文件中读取版本并使用 $counter 魔法获取增量数字。 #1802 issue 中有moswald 答案使用两个作业。

所以我已经像下面这样实现了它:

jobs:
- job: versionJob #reads version number from the source file
steps:
- powershell: |
$fv = Get-Content versionFile
Write-Host ("##vso[task.setvariable variable=versionFromFile;isOutput=true]$fv")
displayName: 'version from file'
name: setVersionStep


- job: buildJob # consumes version number, calculates incremental number and set version using assemblyinfo.cs
dependsOn: versionJob
variables:
versionFromFile: $[ dependencies.versionJob.outputs['setVersionStep.versionFromFile'] ] # please note that spaces required between $[ and dependencies
buildIncrementalNumber: $[ counter(dependencies.versionJob.outputs['setVersionStep.versionFromFile'],1) ] #can't use $versionFromFile here


steps:
- powershell: |
Write-Host ($env:versionFromFile)
Write-Host ($env:versionFromFile + '.' + $env:buildIncrementalNumber)
displayName: 'version from file output'

here is yaml变量文档

PS: jobs 部分之前不需要声明$variableFromFile

关于azure-pipelines - 每个项目自动递增发布版本号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55745224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com