Muh*_*eed 6 git git-tag azure-devops azure-pipelines
在Azure Pipelines中,我启用了git标签来触发管道,如下所示:
trigger:
branches:
include:
- '*'
tags:
include:
- '*'
Run Code Online (Sandbox Code Playgroud)
现在,我想知道是否有一种方法可以通过编程确定:
Ale*_*ski 17
要检查提交是否来自标签,请使用:
startsWith(variables['Build.SourceBranch'], 'refs/tags/')
Run Code Online (Sandbox Code Playgroud)
詹姆斯·瑟利:
使用以下命令获取标签名称:
$tags = git tag --sort=-creatordate
$tag = $tags[0]
Run Code Online (Sandbox Code Playgroud)
这会为带注释和未注释的标签正确排序标签,因此第一个结果是最近的标签。
我已经删除了原始答案,并用 James Thurley 的正确答案替换了它。我会删除我的答案,但您似乎无法删除已接受的答案。
git describe
可以为您提供给定 git 哈希的(最接近的)标签名称,Azure 可以为您提供当前哈希$(Build.SourceVersion)
。
使用--exact-match
to 限制git describe
只使用来自特定提交的标签:
git describe --exact-match $(Build.SourceVersion)
Run Code Online (Sandbox Code Playgroud)
如果有标签,它将在标准输出上返回:
$ git describe --exact-match d9df242
v1.0.0
Run Code Online (Sandbox Code Playgroud)
如果没有标签,git describe --exact-match
则以退出代码 128 退出:
$ git describe --exact-match cc1f9d2
fatal: no tag exactly matches 'cc1f9d23854c37dec000485c6c4009634516a148'
$ echo $?
128
Run Code Online (Sandbox Code Playgroud)
因此,您可以在测试中使用它,或者只是让管道中的任务失败,而不仅仅是在标记的修订上触发。
接受的答案 usinggit tag -l v*
对我不起作用,因为它没有正确订购标签,而是给1.1, 1.11, 1.12, 1.2, 1.3, etc
.
我发现这样做更好:
$tags = git tag --sort=-creatordate
$tag = $tags[0]
Run Code Online (Sandbox Code Playgroud)
这会为带注释和未注释的标签正确排序标签,因此第一个结果是最近的标签。
此处的其他答案涵盖了问题的第一部分,因此正如 Alex Kaszynski 已经指出的那样,您可以使用 YAML 条件:
startsWith(variables['Build.SourceBranch'], 'refs/tags/')
Run Code Online (Sandbox Code Playgroud)
现在获取标签名称比提出问题时要容易一些:
Build.SourceBranchName
Run Code Online (Sandbox Code Playgroud)
此变量包含最后一个 git ref 路径段,因此例如,如果标签为refs/tags/1.0.2
,则此变量将包含1.0.2
: 标签名称。
归档时间: |
|
查看次数: |
1869 次 |
最近记录: |