Git Jenkins文件获取当前标记
是否有方法获取文件中作业的当前标记(如果没有,则为null)?背景是,当这个提交有一个标记时,我只想构建一些工件(android apk)。 我试过:Git Jenkins文件获取当前标记,git,jenkins,jenkins-2,Git,Jenkins,Jenkins 2,是否有方法获取文件中作业的当前标记(如果没有,则为null)?背景是,当这个提交有一个标记时,我只想构建一些工件(android apk)。 我试过: env.TAG_NAME 及 两者都始终为空-即使此()表示其他情况sh“git标记--排序版本:refname | tail-1>version.tmp” String tag=readFile'version.tmp' > p>我会考虑 RealStutdOut/而不是写入文件: sh(returnStdout:true,脚本:“git
env.TAG_NAME
及
两者都始终为空-即使此()表示其他情况sh“git标记--排序版本:refname | tail-1>version.tmp”
String tag=readFile'version.tmp'
> p>我会考虑<代码> RealStutdOut/<代码>而不是写入文件:
sh(returnStdout:true,脚本:“git tag--sort version:refname | tail-1”).trim()
所有其他答案在任何情况下都会产生输出,即使HEAD没有标记。然而,问题是返回当前标记,如果没有类似的标记,则返回“null”
git-tag--contains
当且仅当HEAD被标记时才产生标记名
对于Jenkins管道,它应该如下所示:
sh(returnStdout:true,脚本:“git-tag--contains”).trim()
我相信执行您所需操作的git命令是git-tag--points at=HEAD
这将列出所有指向当前提交或HEAD的标记,正如它在git中通常所调用的那样。因为HEAD也是默认参数,所以您也可以只做git标记——指向
执行并返回git标记的管道步骤每行一个,然后变为:
sh(returnStdout:true,script:“git tag--points”)
如果当前构建是一个标记构建--比如,当{buildingTag()}
为“true”时,那么(未记录的)环境变量BRANCH_NAME
包含正在构建的标记的名称。:
git tag --sort=-creatordate | head -n 1
与:
对于前缀/后缀/版本号,您可以使用简单的正则表达式来处理标记
其他解决方案:
git describe --tags --abbrev=0
当然,这是git中当前/最新的标记。独立于写作
sh(returnStdout: true, script: "git describe --tags --abbrev=0").trim()
至少在声明性管道中,TAG\u NAME
现在应该可以工作了
当
条件实际筛选此属性时<代码>分支机构名称
具有相同的值
stage('release') {
when {
tag 'release-*'
}
steps {
echo "Building $BRANCH_NAME"
echo "Building $TAG_NAME"
}
}
请参见OP用例后面的声明性管道的示例:“如果此特定提交附加了标记,请执行某些操作”:
就我而言,我有:
- 用于多个项目的一个存储库
- 每个都有自己的版本标签,如“MYPROJECT_1.4.23”
- 例如,我想使用标记“1.4.23”的第二部分来标记我的图像
我需要分析当前标记以检查它是否与我的管道项目有关(每个项目使用project\u NAME变量):
请注意,我是Jenkins和Groovy的新手,这可能写得更简单/干净(欢迎建议)
(使用Jenkins 2.268)如何设置一个等于该结果的变量?另外,一个更简单的脚本是通过设置一个变量,即def foo=sh(returnStdout:true,脚本:“git tag--sort version:refname | tail-1”)。trim()
此命令不会返回当前分支中的当前标记,但通常返回最新标记。这不应是可接受的答案。它不符合OP的要求。相反,弗洛里安的答案是肯定的git-tag--contains
或sh(returnStdout:true,脚本:“git-tag--contains”)。trim()
如果头部有多个标记,输出是什么?然后git命令生成多行输出。要考虑头部的多个标记,您可以执行类似于git-tag--contains | HEAD-1
的操作。
sh(returnStdout: true, script: "git describe --tags --abbrev=0").trim()
stage('release') {
when {
tag 'release-*'
}
steps {
echo "Building $BRANCH_NAME"
echo "Building $TAG_NAME"
}
}
def gitTag = null
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout(...)
script {
gitTag=sh(returnStdout: true, script: "git tag --contains | head -1").trim()
}
}
}
stage('If tagged') {
when {
expression {
return gitTag;
}
}
steps {
// ... do something only if there's a tag on this particular commit
}
}
}
}
def gitTag = null
def gitTagVersion = null
pipeline {
agent any
stages {
stage('Checkout') {
steps {
checkout(...)
script {
gitTag=sh(returnStdout: true, script: "git tag --contains | head -1").trim()
if(gitTag) {
def parts = gitTag.split('_')
if( parts.size()==2 && parts[0]==PROJECT_NAME ) {
gitTagVersion=parts[1]
}
}
}
}
}
stage('If tagged') {
when {
expression {
return gitTagVersion;
}
}
steps {
// ... do something only if there's a tag for this project on this particular commit
}
}
}
}