2016-07-07 8 views

Antwort

-3

Sie haben die git URL in Ihrer Mutter Job speichern und die Parameter für das Kind Phase

oder Sie können einfach das Projekt auf Ihrem Root-Job und Arbeit bildet dort passieren klonen.

Verwenden Sie die https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin sein das Jenkins git Plugin

+2

Das ist mehr für Freestyle-Jobs als Multibranch-Pipeline. – BitwiseMan

+0

So arbeite ich mit jenkins – CodeWizard

+1

Vereinbart, für Freestyle-Jobs, was Sie beschreiben, ist richtig. Aber Multibranch Pipepline funktioniert anders. Da die Frage speziell für Pipelineaufträge mit mehreren Branches gilt, gilt Ihre Antwort nicht. – BitwiseMan

11

Sie sind richtig, das scm Objekt hat die Informationen, die Sie benötigen.

Wenn git als Quellcodeverwaltung in einem Pipeline-Projekt (oder Multibranch-Pipeline-Projekt) verwendet wird, ist die globale Variable scm eine Instanz von GitSCM. Das bedeutet, dass 'scm.getUserRemoteConfigs()' eine Liste von UserRemoteConfig Instanzen zurückgibt. Diese Instanzen haben den Namen der Git Remote, URL und Refspec. Sie können über diese Liste iterieren, um eine passende Fernbedienung zu finden, oder einfach die erste nehmen, wenn Sie sicher sind, dass Sie nur eine URL haben.

def scmUrl = scm.getUserRemoteConfigs()[0].getUrl() 

NOTES

  • RejectedAccessException - Die getUserRemoteConfigs und getUrl Methoden werden beide org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException werfen, bis Sie sie manuell genehmigen, unter "Jenkins Manage -> In-Prozess-Script Zulassung". Die einzige Möglichkeit, die ich gefunden habe, besteht darin, das Skript auszuführen, eine Zugriffsausnahme auslösen zu lassen, die eine Methode zu genehmigen, die die Ausnahme verursacht hat, und für jede Methode zu wiederholen, bis keine Zugriffsausnahmen mehr ausgelöst werden. Glücklicherweise ist die Einstellung serverweit, Sie müssen das also nur einmal pro jenkins-Controller tun, nicht für jeden Pipeline-Job.

  • GitHub - während sie mit einer GitHub Testen -sourced mehrfach verzweigten Rohrleitung, getUserRemoteConfigs zurück UserRemoteConfig zwei Instanzen, ein für normale Verzweigungen und eine andere für Pull-Anforderungen. Diese hatten die gleiche URL, also keine große Sache, aber etwas zu beachten. Zum Beispiel in einem Projekt über eine HTTPS-basierte Verbindung:

    echo scm.getUserRemoteConfigs() 
    
    "[ 
        +refs/heads/*:refs/remotes/origin/* => https://github.com/bitwiseman/project.git (origin), 
        +refs/pull/*/head:refs/remotes/origin/pr/* => https://github.com/bitwiseman/project.git (origin) 
    ]" 
    
+0

Danke, das ist genau das, was ich gesucht habe. –

+3

Ihre Antwort hat mir auch klar gemacht, dass die URL verfügbar wäre, indem Sie die Datei '' '.git/config''' analysieren. Dies hat den Vorteil, das RejectedAccessException-Problem zu vermeiden, erhöht jedoch die Komplexität des Buildskripts. –

+0

woher bekommt jenkins diese https-URL? 'git remote -v' gibt die SSH URL wie erwartet aus. Ich bin ziemlich enttäuscht darüber, wie triviale Dinge wie ein Submodul-Update riesige Workarounds benötigen. Multibranch-Pipeline fühlt sich für Prime-Time überhaupt nicht bereit ... – andsens

8

durch einen Kommentar in Antwort Inspiriert von @BitwiseMan, ich habe einen (Hacky) Weg gefunden, die URL ohne RejectedAccessException zu erhalten:

checkout scm 
def url = sh(returnStdout: true, script: 'git config remote.origin.url').trim() 

Bitte beachten Sie, dass es nach erfolgen muss. Grundsätzlich müssen Sie in einem ausgecheckten Git Repository sein (d. H. .git/config Datei darin hat)

+0

Das funktioniert. In meinem Fall verwende ich dies, um zu vermeiden, die URL in der pom.xml eines Maven-Projekts zu konfigurieren. Ich würde sagen, dass das automatische Entdecken der URL auf diese Art und Weise weniger hacky ist, als die URL im Maven-Projekt zu pflegen (was zu unübersichtlichen Fehlern führen kann, wenn es falsch ist). – drrob

Verwandte Themen