web-dev-qa-db-fra.com

Commander des sous-modules dans Jenkins avec le plugin d'organisation Github

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?

15
fabiim

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
    ])
}
16
Tuxlife

Dans le plugin d'organisation Github, ajoutez les comportements de sous-module avancés.

Org Setings Page

Et configurez-le comme ceci:

enter image description here


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

11
Ohad

Changez-le en ceci:

node {
    checkout scm
    sh 'git submodule update --init'
}

Utilisez bat au lieu de sh si Jenkins fonctionne sous Windows.

3
Crummy

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 :-)

1
sys0dm1n