So checken Sie in Jenkins ein Projekt in ein bestimmtes Verzeichnis aus (mit GIT)
Lesezeit: 7 Minuten
viebel
Entschuldigung für den ‘svn’-Stil – wir befinden uns in einem Migrationsprozess von SVN zu GIT (einschließlich unserer CI Jenkins-Umgebung).
Was wir brauchen, ist in der Lage zu sein, Jenkins dazu zu bringen, das GIT-Projekt (Repository?) in ein bestimmtes Verzeichnis auszuchecken (oder sollte ich sagen, klonen?). Wir haben einige Refspecs-Magie ausprobiert, aber es war nicht zu offensichtlich, um sie erfolgreich zu verstehen und zu verwenden.
Wenn wir außerdem im selben Jenkins-Projekt mehrere private GitHub-Repositories in mehrere separate Verzeichnisse unter einem Projektstamm auschecken müssen, wie können wir das bitte tun?
Wir haben das GitHub-Plugin installiert. Hoffe, wir haben die Dinge richtig formuliert.
John McGehee
In der neuen Jenkins 2.0-Pipeline (früher Workflow-Plug-in genannt) wird dies anders gemacht für:
Das Hauptlager
Andere zusätzliche Repositories
Hier beziehe ich mich speziell auf die Multibranch Pipeline Version 2.9.
Hauptlager
Dies ist das Repository, das Ihre enthält Jenkinsfile.
Im Konfigurieren Bildschirm für Ihr Pipeline-Projekt, geben Sie Ihren Repository-Namen ein usw.
Verwende nicht Zusätzliche Verhaltensweisen > In ein Unterverzeichnis auschecken. Dies wird Ihre setzen Jenkinsfile im Unterverzeichnis wo Jenkins es nicht finden kann.
In Jenkinsfilechecken Sie das Haupt-Repository im Unterverzeichnis mit aus dir():
dir('subDir') {
checkout scm
}
Zusätzliche Repositories
Wenn Sie weitere Repositories auschecken möchten, verwenden Sie die Pipeline-Syntax -Generator, um automatisch ein Groovy-Code-Snippet zu generieren.
Im Konfigurieren Bildschirm für Ihr Pipeline-Projekt:
Wählen Pipeline-Syntax. Im Beispielschritt Dropdown-Menü, wählen Sie Kasse: Allgemeiner SCM.
Wählen Sie Ihr SCM-System aus, z Git. Geben Sie die üblichen Informationen zu Ihrem Repository oder Depot ein.
Beachten Sie, dass in der Multibranch-Pipeline die Umgebungsvariable env.BRANCH_NAME enthält den Zweignamen des Haupt-Repositorys.
Im Zusätzliche Verhaltensweisen Dropdown-Menü auswählen Checken Sie in ein Unterverzeichnis aus
Klicken Generieren Sie Groovy. Jenkins zeigt das Groovy-Code-Snippet an, das dem von Ihnen angegebenen SCM-Checkout entspricht.
Kopieren Sie diesen Code in Ihr Pipeline-Skript oder Jenkinsfile.
Eigentlich denke ich, dass die Antwort von @davey_dev die richtige ist. Wenn Sie zuerst in ein Unterverzeichnis mit der dir('subDir') Schritt dann wird das Repo in ein anderes Unterverzeichnis von subDir geklont und Sie erhalten subDir/[repo name]/[contents]. Ich suchte nach einem Weg, um zu kommen dubDir[contents] also mit der relativeTargetDir war der richtige Weg, es zu tun.
– Mig82
2. Juni 17 um 14:47 Uhr
Wenn Sie dies mit dem Haupt-Repository tun, möchten Sie möglicherweise auch das verwenden skipDefaultCheckout Option wie in diesem Beitrag gezeigt, um zu vermeiden, zweimal auszuchecken devops.stackexchange.com/a/1074
– tvt173
21. Mai 18 um 20:41 Uhr
biolinh
Ich stimme @Łukasz Rżanek zu, dass wir verwenden können git-plugin
Aber ich verwende Option: Checkout in eine Unterrichtung, was wie folgt aktiviert ist:
In Quellcodeverwaltungkreuzen Sie Git an
Klicken Sie auf die Schaltfläche Hinzufügen, wählen Sie Auschecken in ein Unterverzeichnis
Sie können jedoch keine unterschiedlichen Ordner für unterschiedliche Repos festlegen.
– Pawel Leonow
9. Juni 16 um 12:45 Uhr
In meinem Fall klont mein Jenkins-Job nur Code aus einem Repository. Ich habe nicht versucht, diesen Fall zu machen, den Sie sagten.
– biolinh
10. Juni 16 um 7:02 Uhr
Was ist, wenn wir nicht wollen, dass es ein Unterverzeichnis ist? können Sie “../other_dir” verwenden – Um meine eigene Frage zu beantworten, können Sie ein relatives Auschecken verwenden und in der Build-Shell mit “cd ../other_dir” in dieses Verzeichnis wechseln.
– amleszk
7. Februar 20 um 18:01 Uhr
Lukasz Rżanek
Der Standard git-plugin denn Jenkins macht den Job ganz gut.
Nach dem Hinzufügen eines neuen Git-Repositorys (Projektkonfiguration > Quellcodeverwaltung > Aktivieren Sie die GIT-Option) zum Projekt, navigieren Sie zum Ende der Plugin-Einstellungen, direkt darüber Repository-Browser Region. Es sollte eine geben Fortschrittlich Taste. Nachdem Sie darauf geklickt haben, sollte ein neues Formular erscheinen, mit einem Wert, der als beschrieben wird Lokales Unterverzeichnis für Repo (optional). Setzen Sie dies auf folder bewirkt, dass das Plugin das Repository in den Ordner relativ zu Ihrem Arbeitsbereich auscheckt. Auf diese Weise können Sie in Ihrem Projekt so viele Repositories haben, wie Sie benötigen, alle an separaten Orten.
Wenn das von Ihnen verwendete Projekt dies zulässt, können Sie alternativ GIT-Untermodule verwenden, die externen Pfaden in SVN ähneln. Im GIT-Buch es gibt einen Abschnitt zu genau diesem Thema. Wenn dies nicht gegen eine Richtlinie verstößt, sind Submodule ziemlich einfach zu verwenden und bieten Ihnen eine leistungsstarke Möglichkeit, die Speicherorte, Versionen/Tags/Zweige zu steuern, die importiert werden, UND sie werden in Ihrem lokalen Repository verfügbar sein und Ihnen auch eine bessere Portabilität bieten.
Offensichtlich unterstützt das GIT-Plugin das Auschecken von Submodulen, sodass Jenkins recht effektiv mit ihnen arbeiten kann.
Es gibt nur eins Lokales Unterverzeichnis für Repo Die Einstellung gilt für alle Repositories, daher ist dies nicht wirklich geeignet, um mehrere Repositories zu verwalten. Sehen issue.jenkins-ci.org/browse/JENKINS-13086.
– Ubuntudroid
4. Juni 13 um 13:15 Uhr
Ich sehe diese Option nicht einmal mit dem Git-Plugin 2.4.2. Diese Antwort ist 4 Jahre alt, also wurde die Option vielleicht entfernt? ( Ich sehe jedoch das “Auschecken in ein Unterverzeichnis”, wie in einer anderen Antwort von @biolinh erwähnt, aber das gilt für alle Repositories.
– Zitrax
9. März 16 um 13:11 Uhr
„Checkout to subdirectory“ befindet sich im Abschnitt „Additional Behaviours“ des Git-Plugins. Das beschränkt Sie jedoch immer noch auf nur ein einziges Git-Repository pro Job. Wenn Sie mehr als ein Git-Repository pro Job benötigen, verwenden Sie die Jenkins-Pipeline.
– Mark Waite
23. März 17 um 1:31 Uhr
Es lohnt sich, das Pipeline-Plugin zu untersuchen. Mit dem Plugin können Sie mehrere VCS-Projekte in relative Verzeichnispfade auschecken. Vorher ein Verzeichnis per VCS-Checkout anlegen. Geben Sie dann Befehle an den neu ausgecheckten VCS-Arbeitsbereich aus. In meinem Fall verwende ich git. Aber Sie sollten die Idee bekommen.
node{
def exists = fileExists 'foo'
if (!exists){
new File('foo').mkdir()
}
dir ('foo') {
git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
......
}
def exists = fileExists 'bar'
if (!exists){
new File('bar').mkdir()
}
dir ('bar') {
git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
......
}
def exists = fileExists 'baz'
if (!exists){
new File('baz').mkdir()
}
dir ('baz') {
git branch: "<ref spec>", changelog: false, poll: false, url: '<clone url>'
......
}
}
Alberto
Wenn wir außerdem im selben Jenkins-Projekt mehrere private GitHub-Repositories in mehrere separate Verzeichnisse unter einem Projektstamm auschecken müssen. Wie können wir das bitte machen?
Der Jenkins Multiple SCMs-Plugin hat das mehrere Repositories Problem für mich sehr gut gelöst. Ich habe gerade an einem Projekt-Build gearbeitet, der vier verschiedene Git-Repos in einem gemeinsamen Ordner auscheckt. (Ich zögere etwas, Git-Superprojekte zu verwenden, wie zuvor von Łukasz Rżanek vorgeschlagen, da Git ohne Submodule komplex genug ist.)
Mehrere SCM zeigen keine Änderungen für jeden Build an, es gibt einen Fehler und sie haben ihn bereits 1,5 Jahre lang nicht behoben 🙁
– Pawel Leonow
9. Juni 16 um 12:33 Uhr
Schweigenj
Suchen Sie repoName aus der URL und checken Sie dann in das angegebene Verzeichnis aus.