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é
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.
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!
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: false,
extensions: [[
$class: 'SubmoduleOption',
disableSubmodules: false,
parentCredentials: true,
recursiveSubmodules: true,
reference: '',
trackingSubmodules: false
]],
submoduleCfg: [],
userRemoteConfigs: scm.userRemoteConfigs
])