J'essaie d'obtenir la dernière balise d'un repo Jenkinsfile (en utilisant Blue Ocean Declarative Pipelines) mais cela génère une erreur.

Commander:

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

Production attendue:

v2.4.1

Mais je reçois:

fatal: No names found, cannot describe anything.

Je suis entré dans l'espace de travail et j'ai exécuté la commande manuellement et j'ai reçu la même erreur fatale, mais lorsque je cloné manuellement, je suis en mesure d'obtenir la version. Est-ce que je manque quelque chose avec Jenkins Pipelines?

Remarque: je peux obtenir l'ID de validation et le nom de la branche. Pas les balises.

2
Squirrel 30 nov. 2017 à 00:59

3 réponses

Meilleure réponse

La solution est décrite ici: https://issues.jenkins-ci.org/browse/ JENKINS-45164

Au lieu d'utiliser checkout scm, utilisez:

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

Notez qu'il faudra en approuvant l'accès au script aux méthodes scm.branches, scm.userRemoteConfigs, etc.

1
Alexander Matyushentsev 26 avril 2018 à 16:28

1. Commande Git pour imprimer toutes les balises

  1. Cloner le projet dans un répertoire spécifique
  2. Allez dans ce répertoire
  3. Exécutez la commande suivante pour imprimer toutes les balises

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

2. Script de pipeline Jenkin pour imprimer toutes les balises

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
                          }
                    }
                }
            }
        }
    }
}

Ci-dessus deux exemples trient les balises par date de tagger, les options que nous pouvons utiliser sont, objectize, authordate, committerdate et taggerdate .

Références: https: //www.nico.schottelius .org / blog / comment-afficher-la-dernière-balise-git /

0
Pankaj Shinde 26 mars 2019 à 11:49

Le problème était que les pipelines ne récupéraient pas les balises. Vous devez accéder aux paramètres de clonage avancés et activer la récupération des balises.

1
Squirrel 30 nov. 2017 à 14:22
47562572