Jenkins多分支管道:如何获取最新的git标签?

时间:2019-11-04 11:02:38

标签: git jenkins

我的项目构建依赖于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>,什么也不输出。

那么,有人知道如何处理吗?我想念什么?

2 个答案:

答案 0 :(得分:0)

您可能没有在Jenkins中安装Git Tag Message Plugin

GitTagMessageExtension由该插件提供(如here一样)

确保在Jenkins插件中安装了以下插件。

Git Tag Message Plugin

下面是一个工作示例,该示例在所有分支(起源/ **)中搜索标签。 请记住,应该在持有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

尽管有一个与直觉相反的陷阱:勾选“发现标签”还不够,还必须选择“高级克隆行为”并勾选“获取标签”