148 votes

Extraire plusieurs dépôts git dans le même espace de travail Jenkins

Utilisation de Jenkins 1.501 et du plugin Jenkins Git 1.1.26

J'ai 3 dépôts git différents, chacun avec plusieurs projets.

Maintenant, je dois extraire tous les projets des 3 dépôts git dans le même espace de travail sur un esclave Jenkins. J'ai défini chaque dépôt git dans : Gestion du code source : Plusieurs SCMs . Mais chaque fois qu'un repo est extrait, le repo précédent (et ses projets associés) est supprimé.

J'ai lu ceci :

http://jenkins.361315.n4.nabble.com/multiple-git-repos-in-one-job-td4633300.html

mais cela n'aide pas vraiment. J'ai essayé de spécifier le même dossier sous Sous-répertoire local pour le repo (facultatif) pour tous les dépôts mais cela donne le même résultat.

Si cela est tout simplement impossible avec Jenkins, je suppose qu'une étape de pré-construction ou un script pourrait être utilisé pour déplacer les projets au bon endroit. Il n'est pas possible de modifier la configuration de construction des projets.

86voto

GaRRaPeTa Points 927

Avec le plugin Multiple SCMs :

  • créez une entrée de référentiel différente pour chaque référentiel que vous devez extraire (projet principal ou projet dépendant).

  • pour chaque projet, dans le menu "advanced" (le deuxième menu "advanced", il y a deux boutons étiquetés "advanced" pour chaque dépôt), trouvez le champ de texte "Local subdirectory for repo (optional)". Vous pouvez y spécifier le sous-répertoire du répertoire "workspace" dans lequel vous souhaitez copier le projet. Vous pourriez faire correspondre le système de fichiers de mon ordinateur de développement.

Le "second menu avancé" n'existe plus, il faut utiliser le bouton "Ajouter" (dans la section "Comportements supplémentaires"), et choisir "Extraire vers un sous-répertoire".

  • si vous utilisez ant, comme maintenant le fichier build.xml avec les cibles de construction n'est pas dans le répertoire racine de l'espace de travail mais dans un sous-répertoire, vous devez refléter cela dans la configuration "Invoke Ant". Pour ce faire, dans "Invoke ant", appuyez sur "Advanced" et remplissez le texte d'entrée "Build file", y compris le nom du sous-répertoire où le build.xml est situé.

J'espère que cela vous aidera.

80voto

CIGuy Points 2748

L'extraction de plus d'un repo à la fois dans un seul espace de travail n'est pas possible avec Jenkins + Git Plugin.

Comme solution de rechange, vous pouvez soit avoir plusieurs travaux en amont qui extraient chacun un seul dépôt et le copient ensuite dans l'espace de travail de votre projet final (problématique à plusieurs niveaux), ou vous pouvez mettre en place une étape de script shell qui extrait chaque dépôt nécessaire dans l'espace de travail du travail au moment de la construction.

Auparavant, le plugin Multiple SCM pouvait aider à résoudre ce problème, mais il est désormais obsolète. Extrait de la page du plugin Multiple SCM : "Les utilisateurs doivent migrer vers https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin . Pipeline offre un meilleur moyen de se déconnecter de plusieurs SCM et est soutenu par l'équipe de développement de base de Jenkins."

58voto

Joker Points 915

Desde Plugin pour plusieurs SCMs est déprécié.

Avec Jenkins Pipeline il est possible d'extraire plusieurs dépôts git et de les construire ensuite avec gradle

node {   
def gradleHome

stage('Prepare/Checkout') { // for display purposes
    git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'

    dir('a-child-repo') {
       git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
    }

    env.JAVA_HOME="${tool 'JDK8'}"
    env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" // set java home in jdk environment
    gradleHome = tool '3.4.1' 
}

stage('Build') {
  // Run the gradle build
  if (isUnix()) {
     sh "'${gradleHome}/bin/gradle' clean build"
  } else {
     bat(/"${gradleHome}\bin\gradle" clean build/)
  }
}
}

Vous pouvez envisager d'utiliser submodules git au lieu d'un pipeline personnalisé comme celui-ci.

21voto

Heron Points 23

J'ai utilisé le Plugin pour plusieurs SCMs en conjonction avec le plugin Git avec succès avec Jenkins.

8voto

Arun Sangal Points 751

Jenkins : SCM multiple - déprécié. Plugin GIT - ne fonctionne pas pour les dépôts multiples.

Le scripting / le pipeline en tant que code - est la voie à suivre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X