管道获取标签列表

问题描述 投票:2回答:3

我试图从repo Jenkins文件中获取最新的标签(使用Blue Ocean Declarative Pipelines),但它会抛出错误。

命令:

def tag = sh(script: 'git describe --tags $(git rev-list --tags --max-count=1)', returnStdout: true).trim()

预期产量:

v2.4.1

但我得到:

fatal: No names found, cannot describe anything.

我进入工作区并手动执行命令并收到相同的致命错误,但是当我手动克隆时,我能够获得该版本。我错过了Jenkins Pipelines的一些东西吗?

注意:我能够获取提交ID和分支名称。不是标签。

jenkins jenkins-pipeline jenkins-blueocean
3个回答
0
投票

解决方案在这里描述:https://issues.jenkins-ci.org/browse/JENKINS-45164

而不是使用checkout scm使用:

checkout([
    $class: 'GitSCM',
    branches: scm.branches,
    doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
    extensions: [[$class: 'CloneOption', noTags: false, shallow: false, depth: 0, reference: '']],
    userRemoteConfigs: scm.userRemoteConfigs,
])

注意,它需要通过批准脚本访问方法scm.branches,scm.userRemoteConfigs等


1
投票

问题是管道不提取标签。您必须进入高级克隆设置并启用提取标记。


0
投票

1. Git命令打印所有标签

  1. 将项目克隆到特定目录中
  2. 去那个目录
  3. 运行以下命令以打印所有标记

git for-each-ref --sort = -taggerdate --format'%(tag)'refs / tags

2. Jenkin管道脚本打印所有标签

def latestTag
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                script {
                    dir('git-source-code') {
                          git(
                            url: "http://35.202.231.233:8082/cicd-test/pegasus-api-gateway.git",
                            credentialsId: 'pankaj.shinde.gitlab.credentials',
                            branch: "master"
                          )      
                          def tagList = sh(returnStdout: true, script: "git for-each-ref --sort=-taggerdate --format '%(tag)' refs/tags").split()
                          tagList.each { nxtTag ->
                              echo nxtTag
                          }
                    }
                }
            }
        }
    }
}

以上两个示例按标记日期对标记进行排序,我们可以使用的选项是,objectsize,authordate,committerdate和taggerdate。

参考文献:https://www.nico.schottelius.org/blog/how-to-show-the-latest-git-tag/

© www.soinside.com 2019 - 2024. All rights reserved.