我正在尝试从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.
我进入工作区并手动执行命令并收到相同的致命错误,但是当我手动克隆时,我能够获得该版本。我错过了詹金斯管道的东西吗?
注意:我可以获取提交ID和分支名称。不是标签。
答案 0 :(得分:1)
问题是管道无法获取标签。您必须进入高级克隆设置并启用提取标记。
答案 1 :(得分: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等
答案 2 :(得分:0)
1。 Git命令以打印所有标签
git for-each-ref --sort = -taggerdate --format'%{tag)'参考/标签
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/