web-dev-qa-db-fra.com

Commander plusieurs dépôts Git dans le même espace de travail Jenkins

Utiliser Jenkins 1.501 et le plugin Jenkins Git 1.1.26

J'ai 3 dépôts différents git 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 SCM . Mais chaque fois qu'un référentiel est extrait, le référentiel 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 ça n'aide pas vraiment. J'ai essayé de spécifier le même dossier sous sous-répertoire local pour le dépôt (facultatif) pour tous les dépôts, mais le résultat obtenu est identique.

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

114
u123

Jenkins + Git Plugin ne permet pas d'extraire plus d'un dépôt à la fois dans un seul espace de travail.

En guise de solution de contournement, vous pouvez avoir plusieurs travaux en amont qui récupèrent chacun un référentiel, puis les copier dans votre espace de travail de projet final (problématique sur plusieurs niveaux), ou vous pouvez configurer une étape de script Shell pour extraire chaque référentiel nécessaire. l’espace de travail au moment de la construction.

Auparavant, le plug-in Multiple SCM pouvait aider à résoudre ce problème, mais il est maintenant obsolète. Depuis la page du plug-in Multiple SCM: "Les utilisateurs doivent migrer vers https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin . Pipeline offre un meilleur moyen de vérifier plusieurs GDS. , et est pris en charge par l’équipe de développement principale de Jenkins. "

64
CIGuy

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 de dépendance).

  • pour chaque projet, dans le menu "avancé" (le deuxième menu "avancé", il y a deux boutons intitulés "avancé" pour chaque référentiel), recherchez le champ de texte "Sous-répertoire local pour le référentiel (facultatif)". Vous pouvez spécifier le sous-répertoire dans le répertoire "workspace" où vous souhaitez copier le projet. Vous pouvez mapper le système de fichiers de mon ordinateur de développement.

Le "second menu avancé" n'existe plus, utilisez plutôt le bouton "Ajouter" (dans la section "Autres comportements") et choisissez "Extraire dans un sous-répertoire".

  • si vous utilisez ant, comme maintenant le fichier build.xml avec les cibles de construction non 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 "Avancé" et remplissez le texte "Construire le fichier", y compris le nom du sous-répertoire où se trouve le fichier build.xml.

J'espère que ça t'as aidé.

78
GaRRaPeTa

Depuis Plugin Multiple SCMs est obsolète.

Avec Jenkins Pipeline il est possible de commander plusieurs dépôts Git et après l'avoir construit 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 voudrez peut-être envisager d'utiliser git submodules au lieu d'un pipeline personnalisé comme celui-ci.

31
Joker

J'ai utilisé le Multiple SCMs Plugin conjointement avec le plugin Git avec Jenkins.

19

En fonction des relations entre les référentiels, une autre approche consiste à ajouter l'autre référentiel (référentiels) en tant que git sous-modules à l'un des référentiels. Un sous-module git crée une référence aux autres pensions. Ces dépôts de sous-modules ne sont pas clonés, sauf si vous spécifiez le drapeau --recursive lors du clonage du "superprojet" (terme officiel).

Voici la commande pour ajouter un sous-module au projet actuel:

git submodule add <repository URI path to clone>

Nous utilisons Jenkins v1.645 et git SCM fera immédiatement un clone récursif pour les superprojets. Voila vous obtenez les fichiers de superprojet et tous les fichiers repo dépendants (sous-modules) dans leurs propres répertoires respectifs dans le même espace de travail Jenkins.

Ne garantissant pas qu'il s'agit de l'approche correcte , il s'agit plutôt d'une approche.

5
mikehwang

Jenkins: Multiple SCM - obsolète. GIT Plugin - ne fonctionne pas pour plusieurs dépôts.

Script/pipeline en tant que code - est la voie à suivre.

4
Arun Sangal

J'ai aussi eu ce problème. Je l'ai résolu en utilisant des versions de déclencheur/appel sur d'autres projets. Pour chaque référentiel, j'appelle le projet en aval à l'aide de paramètres.

Projet principal:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, BRANCH, TAG
Use Custom workspace: ${PREFIX}/${MARKETNAME}
Source code management: None

Ensuite, pour chaque référentiel, j'appelle un projet en aval comme ceci:

Trigger/call builds on other projects: 
Projects to build: Linux-Tag-Checkout
Current Build Parameters
Predefined Parameters: REPOSITORY=<name>

Projet en aval: Linux-Tag-Checkout:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, REPOSITORY, BRANCH, TAG
Use Custom workspace:${PREFIX}/${MARKETNAME}/${REPOSITORY}-${BRANCH}
Source code management: Git
git@<Host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/Origin/tags/${TAG}
Branch Specifier: */tags/${TAG} 
1
Torbjörn Gard

Nous utilisons git-repo pour gérer nos multiples référentiels GIT. Il existe également un plugin Jenkins Repo permettant de récupérer tout ou partie des référentiels gérés par git-repo dans le même espace de travail Jenkins.

0
vladisld