我的项目构建依赖于git标签来确定用于工件的版本。我正在尝试创建Jenkins多分支管道。这意味着,我需要以某种方式获得与
相同的输出 git describe --tags
进入我的Jenkins管道。不管我使用各种“高级行为”如何处理,我都会得到一个独立的HEAD和git,说它无话可说。
本文档https://jenkins.io/doc/pipeline/steps/workflow-scm-step/
提到了$class: GitTagMessageExtension
和一个可选的布尔参数useMostRecentTag
,根据描述它应该提供我所需要的,但是我在管道摘要生成器中找不到等效的布尔参数,并且在Jenkisfile中何时包括< / p>
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 describe --tags <commit-hash>
,什么也不输出。
那么,有人知道如何处理吗?我想念什么?
答案 0 :(得分:0)
您可能没有在Jenkins中安装Git Tag Message Plugin
。
GitTagMessageExtension
由该插件提供(如here一样)
确保在Jenkins插件中安装了以下插件。
下面是一个工作示例,该示例在所有分支(起源/ **)中搜索标签。
请记住,应该在持有jenkins帐户用户名/密码的jenkins中配置一个凭据id,并为下载/克隆位置设置一个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'
]]
])
}
答案 1 :(得分:0)
那都是虚假的警报:我只是忘记了git push --tags
尽管有一个与直觉相反的陷阱:勾选“发现标签”还不够,还必须选择“高级克隆行为”并勾选“获取标签”