webentwicklung-frage-antwort-db.com.de

In Jenkins, wie man ein Projekt in ein bestimmtes Verzeichnis auscheckt (mit GIT)

Entschuldigen Sie den 'svn'-Stil - wir befinden uns in einem Migrationsprozess von SVN zu GIT (einschließlich unserer CI Jenkins-Umgebung).

Wir müssen Jenkins dazu bringen können, das GIT-Projekt (Repository?) In ein bestimmtes Verzeichnis auszuchecken (oder sollte ich sagen, klonen?). Wir haben einige Arten von Magie ausprobiert, aber es war nicht zu offensichtlich, um sie erfolgreich zu verstehen und anzuwenden.

Wenn wir im selben Jenkins-Projekt mehrere private GitHub-Repositorys in verschiedenen Verzeichnissen unter einem Projektstamm auschecken müssen, wie können wir das dann tun?

Wir haben GitHub Plugin installiert. Ich hoffe, wir haben die Dinge richtig formuliert.

55
viebel

Die Standardeinstellung Git-Plugin für Jenkins erledigt den Job ganz gut.

Nachdem Sie ein neues Git-Repository hinzugefügt haben (Projektkonfiguration> Quellcode-Verwaltung> aktivieren Sie die GIT-Option), navigieren Sie zum Ende der Plugin-Einstellungen, direkt über Repository-Browser region. Es sollte einen Erweitert Knopf geben. Nachdem Sie darauf geklickt haben, sollte ein neues Formular mit dem Wert Lokales Unterverzeichnis für repo (optional) angezeigt werden. Wenn Sie dies auf folder setzen, checkt das Plugin das Repository in den Ordner relativ zu Ihrem Arbeitsbereich aus. Auf diese Weise können Sie so viele Repositorys in Ihrem Projekt haben, wie Sie benötigen, und zwar alle an unterschiedlichen Orten.

Wenn das von Ihnen verwendete Projekt dies zulässt, können Sie alternativ GIT-Submodule verwenden, die externen Pfaden in SVN ähneln. Im GIT-Buch gibt es einen Abschnitt zu diesem Thema. Wenn dies nicht gegen eine Richtlinie verstößt, sind die Submodule recht einfach zu verwenden und bieten Ihnen eine leistungsstarke Möglichkeit, die Speicherorte, Versionen/Tags/Zweige, die importiert werden, zu steuern, UND sie stehen in Ihrem lokalen Repository zur Verfügung und bieten Ihnen eine bessere Portabilität.

Offensichtlich unterstützt das GIT-Plugin das Auschecken von Submodulen, sodass Jenkins sehr effektiv damit arbeiten kann.

39
Łukasz Rżanek

Ich bin mit @ Łukasz Rżanek einverstanden, dass wir Git-Plugin verwenden können

Aber ich benutze die Option: checkout to a sub direction was wie folgt aktiviert wird:
Kreuzen Sie in Source Code Management Git an
Klicken Sie auf Hinzufügen, wählen Sie Auschecken in ein Unterverzeichnis

enter image description here

46
biolinh

In der neuen Jenkins 2.0-Pipeline (zuvor als Workflow-Plugin bezeichnet) wird dies anders durchgeführt für:

  • Das Hauptverzeichnis
  • Andere zusätzliche Repositorys

Hier beziehe ich mich speziell auf die Multibranch Pipeline Version 2.9.

Hauptverzeichnis

Dies ist das Repository, das Ihr Jenkinsfile enthält.

Geben Sie im Bildschirm Configure für Ihr Pipeline-Projekt Ihren Repository-Namen usw. ein.

Verwenden Sie nicht Additional Behaviors> In ein Unterverzeichnis auschecken. Dadurch wird Ihr Jenkinsfile in das Unterverzeichnis gestellt, in dem Jenkins es nicht finden kann .

Checken Sie in Jenkinsfile das Haupt-Repository im Unterverzeichnis mit dir() aus:

dir('subDir') {
    checkout scm
}

Zusätzliche Repositories

Wenn Sie weitere Repositorys auschecken möchten, verwenden Sie den Generator Pipeline-Syntax, um automatisch ein Groovy-Code-Snippet zu generieren.

Im Bildschirm Configure für Ihr Pipeline-Projekt:

  1. Wählen Sie Pipeline-Syntax. Wählen Sie im Dropdown-Menü Sample StepCheckout: General SCM.
  2. Wählen Sie Ihr SCM-System aus, z. B. Git. Geben Sie die üblichen Informationen zu Ihrem Repository oder Depot ein.
  3. Beachten Sie, dass in der Multibranch-Pipeline die Umgebungsvariable env.BRANCH_NAME enthält den Filialnamen des Hauptrepositorys.
  4. Wählen Sie im Dropdown-Menü Additional Behaviors die Option In ein Unterverzeichnis auschecken
  5. Klicken Sie auf Groovy generieren. Jenkins zeigt das Groovy-Code-Snippet an, das dem von Ihnen angegebenen SCM-Checkout entspricht.
  6. Kopieren Sie diesen Code in Ihr Pipeline-Skript oder in Jenkinsfile.
33
John McGehee

Es lohnt sich, das Pipeline-Plugin zu untersuchen. Mit dem Plugin können Sie mehrere VCS-Projekte in relative Verzeichnispfade auschecken. Erstellen Sie zuvor ein Verzeichnis pro VCS-Prüfung. Geben Sie dann Befehle an den neu ausgecheckten VCS-Arbeitsbereich aus. In meinem Fall benutze ich git. Aber Sie sollten auf die Idee kommen.

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>'
        ......
    }
}
17
Jeremy Whiting

Wenn wir im selben Jenkins-Projekt mehrere private GitHub-Repositorys in mehreren separaten Verzeichnissen unter einem Projektstamm auschecken müssen. Wie können wir das bitte machen?

Das Jenkins Multiple SCMs Plugin hat das Problem der verschiedenen Repositories für mich sehr gut gelöst. Ich arbeite gerade an einem Projekt, das vier verschiedene Git-Repos in einem gemeinsamen Ordner auscheckt. (Ich zögere ein bisschen, Git-Superprojekte wie vorher vorgeschlagen von Łukasz Rżanek zu verwenden, da Git ohne Submodule komplex genug ist.)

6
Alberto