web-dev-qa-db-fra.com

Jenkins pipeline git commande mise à jour de sous-module

Je veux mettre à jour le sous-module sur git clone.

Existe-t-il un moyen de faire cela avec la commande Jenkins pipeline Git?

Actuellement je fais ça ...

git branch: 'master',
    credentialsId: 'bitbucket',
    url: 'ssh://bitbucket.org/hello.git'

Il ne met toutefois pas à jour le sous-module une fois cloné

19
Passionate Developer

Avec le courant plugin Git , vous n'en avez même pas besoin.

Le plugin GIT supporte les référentiels avec des sous-modules qui ont eux-mêmes des sous-modules.
Ceci doit être activé cependant:

dans Configuration du travail -> Gestion du code source de la section, Git -> Bouton Avancé (sous Branches à construire) -> Mettre à jour récursivement les sous-modules

Mais le PO utilise pipeline.

Donc, une simple première étape de construction suffit:

git submodule update --init --recursive

Cependant, le PO ajoute:

Oui mais si j'utilise sh 'git submodule update --init --recursive', cela utilisera $HOME/id_rsa droite? Je souhaite transmettre ma clé privée pour cette commande si possible.

C'est possible: Dans le syntaxe Pipeline , vous pouvez définir des variables d'environnement .
Ce qui signifie que vous pouvez définir GIT_SSH_COMMAND _ ( avec Git 2.10 + ).
Cela vous permet de référencez votre propre clé privée .

pipeline {
    agent any

    environment {
        GIT_SSH_COMMAND = 'ssh -i /path/to/my/private/key'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
                sh 'git submodule update --init --recursive'
            }
        }
    }
} 

Si un clone implique une URL ssh, ce clone ssh utilisera la clé privée de droite.

23
VonC

La commande git en tant qu'étape de pipeline est plutôt limitée car elle fournit une implémentation par défaut du plus complexe commande checkout . Pour une configuration plus avancée, vous devez utiliser commande checkout , pour laquelle vous pouvez transmettre de nombreux paramètres, y compris la configuration souhaitée des sous-modules.

Ce que vous voulez utiliser ressemble probablement à ceci:

checkout([$class: 'GitSCM',
          branches: [[name: '*/master']],
          doGenerateSubmoduleConfigurations: false,
          extensions: [[$class: 'SubmoduleOption',
                        disableSubmodules: false,
                        parentCredentials: false,
                        recursiveSubmodules: true,
                        reference: '',
                        trackingSubmodules: false]], 
          submoduleCfg: [], 
          userRemoteConfigs: [[url: 'your-git-server/your-git-repository']]])

Dans la documentation, il est souvent fastidieux d’écrire ce type de lignes, je vous recommande donc d’utiliser plutôt Jenkins, très bon Snippet Generator (YourJenkins> yourProject> PipelineSyntax) pour générer automatiquement la ligne de paiement!

39
Pom12
checkout([
    $class: 'GitSCM', 
    branches: scm.branches, 
    doGenerateSubmoduleConfigurations: false, 
    extensions: [[
      $class: 'SubmoduleOption', 
      disableSubmodules: false, 
      parentCredentials: true, 
      recursiveSubmodules: true, 
      reference: '', 
      trackingSubmodules: false
    ]], 
    submoduleCfg: [], 
    userRemoteConfigs: scm.userRemoteConfigs
  ])
16
deepelement