2016-12-27 2 views
2

Ich schreibe, weil es etwas nicht klar ist, wie ich jenkins konfigurieren, um von Gerrit die Änderungen für den Aufbau meines Projekts zu holen.Jenkins und Gerrit Integration mit Google Repo scm

Es gibt eine Menge Tutorial/Beispiele im Netz, die sich darauf beziehen, wie man all diese Teile verbindet. Aber ich habe keine gefunden, die erklären, was ich machen möchte. Ich denke, es ist möglich, aber ... gut. Ich bin mir nicht sicher.

Mein Setup: Ich habe ein Repo-Manifest, das eine Menge verschiedener Module der endgültigen Anwendung enthält. Die App wurde auf diese Weise geschrieben, weil ich ein Modul ändern und durch ein anderes mit ähnlichem Code ersetzen kann, die eine andere Aufgabe ausführen. Zum Beispiel können sie für verschiedene Kunden personalisiert werden.

Ich habe einen Job in Jenkins, die jedes Commit in jedem Submodul fangen.

Ich verband Jenkins mit Gerrit und ich kann den Build mit Gerrit-Trigger starten.

Es funktioniert und ich kann meinen Master und den aktuellen Master bauen.

Mein Problem ist, dass wenn ich einen Patch zur Überprüfung senden Jenkins den Master, nicht den Patch, den ich gesendet habe. Ich möchte den letzten Patch testen, bevor ich ihn auf Master installiere.

Module können nicht eigenständig gebaut werden, da sie alle irgendwie verbunden sind, so dass ich nicht jeden Teil einzeln überprüfen kann.

Jemand konnte so etwas erreichen?

Antwort

1

Wenn der Gerrit-Trigger den Jenkins Job starten, können Sie das folgende vorzubereiten den Arbeitsbereich ausführen, bevor Sie den Build ausführen:

  1. Use "repo sync" alle Repositories
  2. Verwenden GERRIT_PROJECT zur Kasse und GERRIT_REFSPEC Gerrit Trigger-env Variablen und führen Sie die folgenden Befehle, um die Patchset des geänderten Repository zur Kasse:

    cd $ GERRIT_PROJECT

    git https holen: // USER @SERVER/a/$ GERRIT_PROJECT $ GERRIT_REFSPEC & & git Kasse FETCH_HEAD

    ODER

    git holen ssh: // USER @SERVER: 29418/$ GERRIT_PROJECT $ GERRIT_REFSPEC & & git Kasse FETCH_HEAD

+0

danke. Ich habe überprüft und eine kleine Änderung davon hat funktioniert. Die Änderung ist für die Anpassung meiner Umgebung. cd $ GERRIT_PROJECT git fetch ssh: // jenkins @ $ GERRIT_HOST: 29418/$ GERRIT_PROJEKT $ GERRIT_REFSPEC && git checkout FETCH_HEAD – andyinno

+0

Cool. Ich habe die Antwort bearbeitet, um die SSH-Option und das fehlende $ GERRIT_PROJECT an der URL hinzuzufügen. –

0

Der Schlüssel ist demnach die „Repositorys“>, um „Advanced ..“> „Refspec“ und die „Zweige zu bauen“> „Branchen Anforderung“ Felder in: Job> Konfigurieren> Quellcodeverwaltung> Git

Wenn Sie den "Master" Zweig dann eingestellt bauen:

Refspec = +refs/heads/master:refs/remotes/origin/master 

Branch Specifier = refs/heads/master 

Wenn Sie bauen wollen setzen Sie das Patchset dann:

Refspec = $GERRIT_REFSPEC:$GERRIT_REFSPEC 

Branch Specifieer = $GERRIT_REFSPEC 

Klicken Sie auf das "?" auf der rechten Seite des Feldes, um weitere Details zu sehen.

+0

Hallo Mar Celo, danke für deine Antwort. Ich sehe was du hier erzählst. Aber ... Konfigurieren> Quellcodeverwaltung> Git ... Ich benutze eine Google Repo CSM nicht direkt git. Also, wenn meine Änderung in einem Unterprojekt ist, sagen wir in einem Sub-Git-Modul von Repo. Ich muss alle Google Repos mit Reposync auschecken, aber auch den korrekten Patch, der auf Gerrit hochgeladen wurde. Ist deine Antwort nicht mit GIT und nicht mit Repo verbunden? – andyinno

+0

Entschuldigung, Sie haben Recht. Ich werde versuchen, eine andere Lösung zu veröffentlichen. –