Jenkins multibranch管道:如何获取最新的git标签?
我的项目构建依赖于git标记来确定用于工件的版本。我正在尝试创建一个Jenkins多分支管道。这意味着,我需要以某种方式得到Jenkins multibranch管道:如何获取最新的git标签?,git,jenkins,Git,Jenkins,我的项目构建依赖于git标记来确定用于工件的版本。我正在尝试创建一个Jenkins多分支管道。这意味着,我需要以某种方式得到 git descripe--tags 进入我的詹金斯管道。不管我对所有的“高级行为”做什么,我都会有一个超然的头脑和一个傻子说它没有什么可描述的 本文件 提到带有可选布尔参数的$class:GitTagMessageExtension,根据描述,该参数应提供我所需的内容,但我在管道代码段生成器中找不到它的等效项,并且在Jenkisfile中,我在 checkout(
git descripe--tags
进入我的詹金斯管道。不管我对所有的“高级行为”做什么,我都会有一个超然的头脑和一个傻子说它没有什么可描述的
本文件
提到带有可选布尔参数的$class:GitTagMessageExtension
,根据描述,该参数应提供我所需的内容,但我在管道代码段生成器中找不到它的等效项,并且在Jenkisfile中,我在
checkout(
[$class: 'GitSCM',
branches: [[name: '**']],
doGenerateSubmoduleConfigurations: false,
extensions: [
[$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
[$class: 'GitTagMessageExtension', useMostRecentTag:true]
],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'xxx', url: 'xxx']]
]
)
我犯了个错误
java.lang.UnsupportedOperationException: no known implementation of class hudson.plugins.git.extensions.GitSCMExtension is named GitTagMessageExtension
编辑:
正如@ioannis barakos所指出的,GitTagMessageExtension插件丢失了。然而,在安装之后
如果您勾选了“使用最新标记”选项,并且已选中修订
out没有与之关联的git标记,父提交将是
搜索git标记,上述规则将应用于
使用git标记提交第一个父级
不起作用。它只对分离的头部运行git descripe--tags
,而不导出任何内容
那么,有人知道怎么处理吗?我缺少什么?您的Jenkins中可能没有安装
Git标记消息插件
GitTagMessageExtension
由该插件提供(如中所示)
确保Jenkins插件中安装了以下插件
下面是一个在所有分支(origin/**)中搜索标记的工作示例。
请记住,应该在jenkins中配置一个credentialsId,其中包含jenkins帐户的用户名/密码,并且应该为下载/克隆位置设置一个RelativeTargetDirectory
类
script {
checkout([
$class: 'GitSCM',
branches: [[name: "origin/**"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[
$class: 'RelativeTargetDirectory',
relativeTargetDir: "/tmp/jenkins/git"],
[$class: 'CloneOption', depth: 0, noTags: false, reference: '', shallow: false],
[$class: 'GitTagMessageExtension', useMostRecentTag:true]
],
submoduleCfg: [],
userRemoteConfigs: [[
credentialsId: 'ioannis.barakos',
url: 'https://git.example.com/git/example'
]]
])
}
这完全是虚惊一场:我只是忘记了推git-push-tags
不过有一个反直觉的发现:勾选“发现标签”是不够的,还必须选择“高级克隆行为”并勾选“获取标签”谢谢,它现在没有失败,但它对分离的头部运行git descripe--Tags
,并且不导出任何内容(我更新了我的答案)你的标签在分支上?您可以在分支:[[name:'**']]
上设置分支。你试过了吗?在我的例子中,我在分支中有标签,它可以工作。Baracos:是的,我试过这个。可能我不够明确:即使当前提交没有标记,我也需要git标记(即,来自父分支的带有后缀的标记,如0.1.0-SNAPSHOT-9-ga2c5058
)。尝试使用分支:[[name:“origin/**]”]
在我的情况下,我可以用该分支配置克隆最新的标记。我添加了我的管道脚本以供参考很高兴听到您通过推标签解决了第二个问题。很高兴知道我的回答帮助你解决了原来的问题。您也可以在我的答案中添加您的答案作为注释,以帮助有类似问题的人在解决问题时遵循相同的流程。我也希望接受我的回答:)