Я видел этот вопрос , который идет в том же направлении, но не совсем. Проблема заключалась в том, что теги были просто неправильно вставлены.
В настоящее время я использую Jenkins для создания своих python проектов, используя setuptools_scm
, который в основном использует git describe
для получения (более или менее) разумный номер версии, даже если не на теге. Конвейер определяется с помощью начального задания в JobDSL следующим образом (сокращенно, чтобы добраться до основных пунктов):
import BuildProjects
BuildProjects.build_projects.each { def bproject ->
multibranchPipelineJob("tool/${bproject}") {
branchSources {
branchSource {
source {
git {
id('tool_${bproject}')
remote("${BuildProjects.scmBaseLocation}/${bproject}.git")
credentialsId(BuildProjects.scmUser)
traits {
gitBranchDiscovery()
gitTagDiscovery()
cloneOptionTrait {
extension {
shallow(false)
noTags(false)
reference('grmblwrx')
timeout(1)
}
}
}
}
}
}
}
}
}
Некоторые значения конфигурации взяты из BuildProjects
.
При запуске jenkins Я вижу, что он выбирает теги:
> git fetch --tags --progress -- ssh://git@git.my-company.net/tools.git +refs/heads/*:refs/remotes/origin/* # timeout=1
, и на самом деле я могу видеть теги при выводе их в свой Jenkinsfile с использованием блока
sh "git tag"
. Но использование
sh "git describe --tags"
дает
fatal: No tags can describe '<Commit hash>'.
Try --always, or create some tags.
Я где-то читал, что это может быть из-за разреженной проверки: фиксации между тегом и текущим HEAD могут отсутствовать. При ближайшем рассмотрении я обнаружил в своих журналах
> git config core.sparsecheckout # timeout=10
> git checkout -f <Commit hash> # timeout=10
сразу после показанной выше строки git fetch
. Похоже, что моя конфигурация в JobDSL не соблюдается. Есть идеи?