git description --tags не работает при сборке конвейера Jenkins - PullRequest
2 голосов
/ 17 января 2020

Я видел этот вопрос , который идет в том же направлении, но не совсем. Проблема заключалась в том, что теги были просто неправильно вставлены.

В настоящее время я использую 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 не соблюдается. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 04 февраля 2020

С тех пор как я опубликовал свой вопрос, мы обновили наш экземпляр Jenkins и некоторые плагины, особенно плагин git. По какой-то причине, это "просто работает" сейчас. Я не могу воспроизвести старую настройку без особых проблем, поэтому не могу легко понять, что послужило причиной «исправления».

0 голосов
/ 03 февраля 2020

Если верно, что с 2018 года git плагин 3.4.0, конвейер Jenkins по умолчанию клонируется с узким refspe c и без тега.
Это было проиллюстрировано в allegro/axion-release-plugin выпуск 195 и задокументировано в allegro/axion-release-plugin PR 198 .

Как видно из raster-foundry/raster-foundry PR 4233 , проверьте ваш шаг checkout scm и его клонОпции :

node {
  try {
    // Checkout the proper revision into the workspace.
    stage('checkout') {
      checkout([
        $class: 'GitSCM',
        branches: scm.branches,
        extensions: scm.extensions + [[$class: 'CloneOption', noTags: false, reference: '', shallow: false]],
        userRemoteConfigs: scm.userRemoteConfigs
      ])
    }
    ...

Попробуйте с noTags: false, reference: '', shallow: false и посмотрите, сохраняется ли проблема.

...