2014-09-26 5 views
6

Ich habe einen Job in Jenkins für ein Projekt auf GitHub, die ich möchte ausgelöst werden, wenn eine neue Zweigstelle erstellt oder eine bestehende Zweigstelle entfernt wurde. Ist das möglich?Trigger in Jenkins erstellen, wenn git Zweige erstellt oder gelöscht werden

Hinweis: Der Jenkins-Server befindet sich intern in einer Firma, daher können wir keine Web-Hooks von GitHub verwenden.

+0

Wie Sie eine Verbindung (Protokoll) auf GitHub von Jenkins lesen wollen? – Technext

+0

Sollte nicht zu schwer sein, ein Skript dafür zu schreiben. Basierend auf dem Befehl ls http://stackoverflow.com/questions/10911923/get-list-of-git-branches-for-a-repo-hosted-on-github –

+0

@Technext über SSH, weil es ein privates Repository ist. – Tobias

Antwort

3

Ich kann an einen Ansatz denken, den Sie verwenden können.

Mithilfe von Job DSL Plugin können Sie Projekte mit Groovy erstellen oder löschen. Es ist nicht schwer, Github-Scans hinzuzufügen und daraus Jobs zu erstellen. Das Gute daran ist, dass auch gelöschte Jobs erkannt werden.

I.e. Installieren Job DSL-Plugin, erstellen Sie einen Samen Job (Freistil) mit einem normalen Auslöser, und fügen Sie so etwas wie die unten in den Skript ..

def project = 'nbn/griffon-maven-plugin' 
def branchApi = new URL("https://api.github.com/repos/${project}/branches") 
def branches = new groovy.json.JsonSlurper().parse(branchApi.newReader()) 


branches.each { 
    def branchName = it.name 
    job { 
     name "${project}-${branchName}".replaceAll('/','-') 
     scm { 
      git("git://github.com/${project}.git", branchName) 
     } 
     steps { 
      maven("test -Dproject.name=${project}/${branchName} ") 
     } 
    } 
} 
+0

Heh, eigentlich ist es der Jobs-DSL-Job, den ich ausführen will, wenn Zweige erstellt oder zerstört werden. Im Moment läuft es nur in Intervallen, und das funktioniert auch gut. Ich fragte mich nur, ob ich es nur laufen lassen konnte, wenn es einen Grund dafür gab. – Tobias

+0

Sie müssten immer noch so oder so abfragen. Job-DSL sollte nicht zu viel Aufwand beim Parsing der gesamten Konfiguration haben und sollte richtig prüfen, also ist Technext-Erklärung zwar gut, aber es ist wahrscheinlich nur Overhead, der irgendwie aufrechterhalten werden muss. Wenn Sie Vorschläge für Job DSL haben, zögern Sie nicht, einen oder zwei Kommentare abzugeben. –

2

Sie können versuchen, diesen Ansatz, wenn es dir gut aussieht. :)

vereinbaren, zu cron auf dem Build-Maschine die folgende Aufgabe auszuführen:

  1. Fetch Liste der Zweig aus dem Repository Git und speichern sie in einer Datei, sagen branch_list

    Wir Verwenden Sie Gitolite und greifen Sie auf Verzweigungsnamen mit dem Befehl git ls-remote zu.

    git ls-remote [email protected]:repository_name

    Zum Beispiel

    [[email protected] ~]$ git ls-remote [email protected]:repository_name 
    08a119f0aec5d4286708d2e16275fcd7d80d2c25  HEAD 
    a91ef29f1be5bfe373598f6bb20d772dcc65b8ca  refs/heads/dev-mob 
    d138356cf752a46fd8c626229809c9eaae63a719  refs/heads/dev-ssorel 
    e7d7e2c617c4a42b299b29c0119283813800f1bb  refs/heads/dev-omni 
    3193b36d678f1af2dcc3a291c6313f28ede97149  refs/heads/dev-pay 
    72fd9d8586708011c763cd7bc4f7bd2a3513a12f  refs/heads/dev-sell 
    39455fc2672039a7f325e9cafe3777ed563368ef  refs/heads/dev-apis 
    a22eb000ffa1ac0fbbf51b6bc8aea31b040567a3  refs/heads/dev-front 
    78a63105ec754d7ba758af97d542e749ceb9c533  refs/heads/dev-tpsp 
    82d99796690b6c562872ea68655c74ebc3f0abfb  refs/heads/mainline 
    fd82522f9999cedb11e245b515d480187c2e9cc6  refs/heads/master 
    

    auszufiltern, nur die Zweignamen, können Sie verwenden:

    [[email protected] ~]$ git ls-remote [email protected]:repository_name | grep -v HEAD | cut -d/ -f3 | sort > branch_list_latest 
    
  2. Sie ein Diff mit dem letzten geholt Datei zB branch_list. Wenn es einen Unterschied gibt, dann triggern Sie den Build. Sie können entweder diff oder cmp Befehl verwenden.

    git ls-remote [email protected]:repository_name | grep -v HEAD | cut -d/ -f3 | sort > branch_list_latest 
    
    if ! cmp -s branch_list branch_list_latest; then 
        mv branch_list_latest branch_list 
        echo "Files differ which means branch created or removed. Triggering build..." 
        # Trigger build command 
    fi 
    

Cron hält die Liste der Zweige nach dem bestimmten Intervall Abrufen. Sie können das Intervall nach Ihren Bedürfnissen definieren.

0

Wo ich jetzt bin haben wir zwei langlebige Zweige, und der Rest ist fast ausschließlich kurzlebige Feature-Zweige.

Wir haben bereits Arbeitsplätze für die langlebigen Branchen.

Für die Funktion Zweige Ich habe bei

https://pythonhosted.org/jenkins-autojobs/

und

sah

http://entagen.github.io/jenkins-build-per-branch/

und stellte fest, dass sie für unseren Gebrauch beide etwas zu kompliziert sind.

Stattdessen habe ich einen Job mit dem Branch-Specifier "* _build" für die Konvention, dass, wenn Sie einen Zweig mit der Endung "_build" drücken, wird es von Jenkins gebaut werden. Im nächsten Schritt wird daran erinnert, dass, wenn Sie überprüfen, besser ist die Pull-Anforderung genannt werden „xyz ..._ bauen“ :)

Best, Anders