J'ai un travail de construction dans Jenkins créé par le plugin Github Organization . Le Jenkinsfile
pour cette version extrait le code à l'aide de checkout scm
ce qui est bon car il détermine la branche/révision correcte à extraire lors de la construction des modifications déclenchées par PR ou des push vers la branche principale.
Comment puis-je faire ceci:
node {
checkout scm
}
sous-modules de paiement?
La solution avec sh 'git submodule...'
ne fonctionne que pour les référentiels sans authentification spéciale.
Nous utilisons la solution suivante dans notre configuration:
node {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: true,
extensions: scm.extensions + [[$class: 'SubmoduleOption', parentCredentials: true]],
userRemoteConfigs: scm.userRemoteConfigs
])
}
Dans le plugin d'organisation Github, ajoutez les comportements de sous-module avancés.
Et configurez-le comme ceci:
Comme l'a souligné @oeuftete, vous devrez peut-être également ajouter le comportement "Checkout over SSH" (et fournir des informations d'identification de clé) si le ou les sous-modules utilisent le protocole SSH.
Comme indiqué ici: https://wiki.jenkins.io/display/JENKINS/Git+Plugin
Changez-le en ceci:
node {
checkout scm
sh 'git submodule update --init'
}
Utilisez bat
au lieu de sh
si Jenkins fonctionne sous Windows.
Nous avons eu un problème similaire, l'utilisateur Jenkin utilise https pour extraire de Github, mais le sous-module utilise SSH et nous voulons gérer les demandes d'extraction avec Jenkins. J'ai fait l'étape de paiement ci-dessous en espérant que cela aidera quelqu'un ici:
stage('Checkout') {
if(env.BRANCH_NAME == "develop" || env.BRANCH_NAME == "master") {
checkout([
$class: 'GitSCM',
branches: scm.branches,
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'SubmoduleOption',
disableSubmodules: false,
parentCredentials: true,
recursiveSubmodules: true,
reference: '',
trackingSubmodules: false],
[$class: 'CleanBeforeCheckout'],
[$class: 'CleanCheckout']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'jenkins-ssh',
url: '[email protected]:<AccountName>/<RepoName.git>']]
])
}
else if (env.CHANGE_ID) {
checkout([
$class: 'GitSCM',
branches: [[name: "FETCH_HEAD"]],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'SubmoduleOption',
disableSubmodules: false,
parentCredentials: true,
recursiveSubmodules: true,
reference: '',
trackingSubmodules: false],
[$class: 'CleanBeforeCheckout'],
[$class: 'CleanCheckout']],
submoduleCfg: [],
userRemoteConfigs: [[credentialsId: 'jenkins-ssh',
refspec: "+refs/pull/${CHANGE_ID}/head:refs/remotes/Origin/${BRANCH_NAME} +refs/heads/${CHANGE_TARGET}:refs/remotes/Origin/${CHANGE_TARGET}",
url: '[email protected]:<AccountName>/<RepoName.git>']]
])
}
}
Peut-être y a-t-il un moyen plus simple de le faire, je serais heureux d'avoir de vos nouvelles :-)