Конвейер получить список тегов

Я пытаюсь получить последний тег из репозитория Jenkinsfile (используя декларативные конвейеры Blue Ocean), но он выдает ошибку.

Команда:

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?

Примечание. Я могу получить идентификатор фиксации и имя ветки. Не теги.


person Squirrel    schedule 29.11.2017    source источник


Ответы (3)


Решение описано здесь: 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 и т. д.

person Alexander Matyushentsev    schedule 26.04.2018
comment
Спасибо @Alexander, это именно то, что мне нужно, после 3 часов попыток понять, как получить тег в конвейере. - person lukass77; 06.02.2020

Проблема заключалась в том, что конвейеры не извлекают теги. Вам нужно зайти в расширенные настройки клонирования и включить выборку тегов.

person Squirrel    schedule 30.11.2017

<сильный>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
                          }
                    }
                }
            }
        }
    }
}

В приведенных выше двух примерах теги сортируются по дате тегирования. Мы можем использовать такие параметры, как размер объекта, дата автора, дата фиксации и дата тегирования.

Ссылки: https://www.nico.schottelius.org/blog/how-to-show-the-latest-git-tag/

person Pankaj Shinde    schedule 26.03.2019