Bre*_*ett 14 gitversion azure-devops azure-pipelines
我正在尝试使用由 GitVersion 在成功构建结束时的 GIT 提交确定的当前版本号设置标签。感觉我不能成为第一个这样做的人,但我正在努力寻找有用的东西。
Azure Devops Pipeline 在成功时获取源以“标记源”中有一项功能。我已经设置了它并设置为由我拥有的代理任务之一设置的变量(GitVersion)
我可以在调试日志中看到这个变量是由我添加到管道的 GitVersion 组件设置的。
2019-12-06T20:54:20.2390794Z ##[debug]Processed: ##vso[task.setvariable variable=GitVersion.MajorMinorPatch;]2.98.0
Run Code Online (Sandbox Code Playgroud)
但是,如果我就这样保留它,我会得到一个创建为“v$(GitVersion.MajorMinorPatch)”的标记,这意味着在创建标记时该变量不再存在。
标签格式帮助工具提示说
“标签格式可以是用户定义或预定义变量的组合,其范围为“全部”。例如:'$(Build.DefinitionName) $(Build.DefinitionVersion) $(Build.BuildId) $(Build .BuildNumber) $(My.Variable)'"
所以我猜问题是在管道期间创建的这个变量没有 All 的范围。
然后我尝试向“GitVersion.MajorMinorPatch”的管道添加一个管道变量,希望这是在正确的范围内,并希望当“task.setvariable”命令运行时,这会将这个变量值设置得更高范围变量。
但是在这种情况下,我只是创建了一个标签“v”。
所以我有点卡住了。不知何故,我需要能够在范围 ALL 上动态创建或设置一个变量,并使用我想在此处标记的值。
我真的很感激对此的任何想法。
Pau*_*her 24
如果是做yaml管道,可以添加以下步骤
- checkout: self
persistCredentials: true
## Rest of pipeline ##
- script: |
git tag $(GitVersion.NugetVersionV2)
git push origin $(GitVersion.NugetVersionV2)
workingDirectory: $(Build.SourcesDirectory)
Run Code Online (Sandbox Code Playgroud)
所述persistCredentials允许标记被自动传递到其他的git命令。注意 的分配workingDirectory,否则我有一个错误,该位置不是 git 存储库。
对于带注释的标签而不是轻量级标签,语法看起来像这样......
- script: |
git tag -a <tagname> -m <message>
Run Code Online (Sandbox Code Playgroud)
要获取用户/日期,您还需要设置用户名/电子邮件,例如
- script: |
git config --global user.name "BuildService"
git config --global user.email "autobuild@fabrikam.com"
git tag -a <tagname> -m <message>
Run Code Online (Sandbox Code Playgroud)
为此,需要为项目集合构建服务器 帐户(而不是项目构建服务帐户 组)分配对存储库的贡献权限
我可以在调试日志中看到该变量是由我添加到管道中的 GitVersion 组件设置的。
GitVersion.MajorMinorPatch从日志中看到的变量是一个步骤级变量,这意味着它的生命周期仅从当前GitVersion任务开始。
正如您所指的定义,它的范围必须涵盖所有人。这意味着它必须是一个全局变量。例如系统默认的预定义变量,以及在变量选项卡中指定的自定义变量。
GitVersion task事实上,基于编译和工作逻辑,该GitVersion.MajorMinorPatch值是生成并存储为当前构建的build number:
因此,将值标记GitVersion.MajorMinorPatch到存储库的最方便的方法是使用$(Build.BuildNumber):
v$(Build.BuildNumber)
这是我的结果:
更新:
GitVersion.MajorMinorPatch要将任务生成的变量添加GitVersion到Variables中,请将以下脚本应用到PowerShell任务中:
$connectionToken="{PAT Token}"
$urlget = "https://dev.azure.com/{org}/{project}/_apis/build/definitions/$(System.DefinitionId)?api-version=5.1"
$base64AuthInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$getdef = Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method GET -ContentType application/json -Uri $urlget
Write-Host Pipeline = $($getdef | ConvertTo-Json -Depth 100)
$bvalue=@"
{
"value": "$(GitVersion.MajorMinorPatch)"
}
"@
$getdef.variables | add-member -Name "GitVersion.MajorMinorPatch" -value (Convertfrom-Json $bvalue) -MemberType NoteProperty -Force -PassThru
$getdef = $getdef | ConvertTo-Json -Depth 100
$getdef | clip
$urlput = "https://dev.azure.com/{org}/{project}/_apis/build/definitions/$(System.DefinitionId)?api-version=5.1"
$putdef = Invoke-RestMethod -Uri $urlput -Method PUT -Body $getdef -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
Run Code Online (Sandbox Code Playgroud)
正如我之前提到的,我仍然不认为可以$(GitVersion.MajorMinorPatch)在Tag format.
仍然强烈建议你打电话$(Build.BuildNumber)标记$(GitVersion.MajorMinorPatch)价值
| 归档时间: |
|
| 查看次数: |
12930 次 |
| 最近记录: |