it-swarm.com.de

Testen Sie mehrere Git-Repos in demselben Jenkins-Arbeitsbereich

Verwendung von Jenkins 1.501 und Jenkins Git Plugin 1.1.26

Ich habe 3 verschiedene Git-Repos mit jeweils mehreren Projekten.

Jetzt muss ich alle Projekte von den 3 Git-Repos in den gleichen Arbeitsbereich auf einem Jenkins-Slave auschecken. Ich habe jedes Git-Repo folgendermaßen definiert: Quellcodeverwaltung: Mehrere SCMs . Jedes Mal, wenn ein Repo ausgecheckt wird, wird das vorherige Repo (und die damit verbundenen Projekte) gelöscht.

Ich habe folgendes gelesen:

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

aber es hilft nicht wirklich. Ich habe versucht, den gleichen Ordner unter Lokales Unterverzeichnis für repo anzugeben (optional) , aber es gibt das gleiche Ergebnis.

Wenn dies mit Jenkins einfach nicht möglich ist, können die Projekte mit Hilfe von vorab erstellten Schritten/Skripten an den richtigen Ort verschoben werden. Es ist keine Option, die Build-Konfiguration der Projekte zu ändern.

114
u123

Mit Jenkins + Git Plugin ist es nicht möglich, mehrere Repos gleichzeitig in einem Arbeitsbereich auszuchecken.

Um dieses Problem zu umgehen, können Sie entweder mehrere Upstream-Jobs haben, die jeweils ein Repo auschecken und dann in den endgültigen Projektarbeitsbereich kopieren (auf mehreren Ebenen problematisch), oder Sie können einen Shell-Scripting-Schritt einrichten, bei dem jedes benötigte Repo ausgecheckt wird der Job-Arbeitsbereich zum Zeitpunkt der Erstellung.

Bisher konnte das Multiple SCM-Plug-In bei diesem Problem Abhilfe schaffen, das jetzt jedoch veraltet ist. Von der Multiple SCM Plugin Seite: "Benutzer sollten zu https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin migrieren. Pipeline bietet eine bessere Möglichkeit zum Auschecken mehrerer SCMs und wird vom Kernentwicklungsteam von Jenkins unterstützt. "

64
CIGuy

Mit dem Multiple SCMs Plugin:

  • erstellen Sie für jedes Repository, das Sie auschecken möchten (Hauptprojekt oder Abhängigkeitsprojekt), einen anderen Repository-Eintrag.

  • suchen Sie für jedes Projekt im Menü "Erweitert" (im zweiten Menü "Erweitert" für jedes Repository zwei Schaltflächen mit der Bezeichnung "Erweitert") das Textfeld "Lokales Unterverzeichnis für Repo (optional)". Dort können Sie das Unterverzeichnis im Verzeichnis "workspace" angeben, in das Sie das Projekt kopieren möchten. Sie können das Dateisystem meines Entwicklungscomputers zuordnen.

Das "zweite erweiterte Menü" ist nicht mehr vorhanden. Sie müssen stattdessen die Schaltfläche "Hinzufügen" (im Abschnitt "Zusätzliches Verhalten") verwenden und "In ein Unterverzeichnis auschecken" auswählen.

  • wenn Sie ant verwenden, da sich die Datei build.xml mit den Build-Zielen jetzt nicht im Stammverzeichnis des Arbeitsbereichs, sondern in einem Unterverzeichnis befindet, müssen Sie dies in der Konfiguration "Invoke Ant" widerspiegeln. Drücken Sie dazu unter "Invoke ant" auf "Advanced" und füllen Sie den Eingabetext "Build file" aus, einschließlich des Namens des Unterverzeichnisses, in dem sich die build.xml befindet.

Hoffentlich hilft das.

78
GaRRaPeTa

Da Multiple SCMs Plugin veraltet ist.

Mit Jenkins Pipeline ist es möglich, mehrere Git-Repos auszuchecken und nach dem Erstellen mit 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/)
  }
}
}

Möglicherweise möchten Sie Git-Submodule anstelle einer benutzerdefinierten Pipeline wie dieser verwenden.

31
Joker

Ich habe das Multiple SCMs Plugin in Verbindung mit dem Git Plugin erfolgreich mit Jenkins verwendet.

19

Abhängig von den Beziehungen der Repositorys besteht ein anderer Ansatz darin, das andere Repository (Repositorys) als Git-Submodule zu einem der Repositorys hinzuzufügen. Ein Git-Submodul erstellt einen Verweis auf die anderen Repos. Diese Submodul-Repos werden nur geklont, wenn Sie das --recursive Flag beim Klonen des "Superprojekts" (offizieller Begriff).

Hier ist der Befehl zum Hinzufügen eines Submoduls zum aktuellen Projekt:

git submodule add <repository URI path to clone>

Wir verwenden Jenkins v1.645 und der Git-SCM erstellt sofort einen rekursiven Klon für Superprojekte. Voila Sie erhalten die Superprojektdateien und alle abhängigen (Submodul-) Repodateien in ihren jeweiligen Verzeichnissen im selben Jenkins-Job-Arbeitsbereich.

Nicht, dass dies der richtige Ansatz ist, sondern ein Ansatz.

5
mikehwang

Jenkins: Multiple SCM - veraltet. GIT Plugin - funktioniert nicht für mehrere Repos.

Scripting/Pipeline als Code - das ist der richtige Weg.

4
Arun Sangal

Ich hatte auch dieses Problem. Ich habe es mit Trigger/Call Builds für andere Projekte gelöst. Für jedes Repository rufe ich das Downstream-Projekt mit Parametern auf.

Hauptprojekt:

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

Dann rufe ich für jedes Repository ein Downstream-Projekt wie folgt auf:

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

Downstream-Projekt: 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
[email protected]<Host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/Origin/tags/${TAG}
Branch Specifier: */tags/${TAG} 
1
Torbjörn Gard

Wir verwenden git-repo , um unsere mehreren GIT-Repositorys zu verwalten. Es gibt auch ein Jenkins Repo-Plugin , mit dem Sie alle oder einen Teil der von git-repo verwalteten Repositorys im selben Jenkins-Job-Arbeitsbereich auschecken können.

0
vladisld