Integrations-Git Workflow mit Jenkins / Hudson

8

Ich versuche, einen modifizierten Integration-Manager-Workflow zu implementieren, der dem in ProGit beschriebenen ähnelt.

Anstatt dass ein integration manager die Zusammenführungen durchführt, möchte ich, dass Entwickler lokal zusammengeführt werden, bevor sie ihren Code veröffentlichen, und ich möchte ein Quality Gateway , das unsere Standards für kontinuierliche Integration durchsetzt, wie ein Mindestmaß an Codeabdeckung und 100% -Tests Passing, bevor Code in das gesegnete Repository eingegeben wird, um von anderen Entwicklern ausgecheckt zu werden. Die Idee ist, dass der Code im gesegneten Repository immer den Mindeststandard erfüllt, den wir definieren und immer erstellt.

Ich möchte, dass Jenkins die Rolle des Qualitäts-Gateways übernimmt und nur Code an das gesegnete Repository weitergibt, wenn Builds erfolgreich sind.

Bisher habe ich das System so eingerichtet, dass es die folgenden öffentlichen Repos gibt: das gesegnete Repository, ein Repository auf dem Build-Server für Jenkins, das ein leeres Repo ist, auf das durch Gitosis zugegriffen wird, und natürlich die eigenen Repositories des Entwicklers.

Ich habe Entwickler, die aus dem gesegneten Repo ziehen und zum Integrations-Repo drängen. Jetzt versuche ich, Jenkins dazu zu bringen, erfolgreiche Builds aus dem Integration Repo in den gesegneten Repo zu schieben.

Bisher scheint mir nur die Option " Push Only If Build Succeeds " in den Git Publisher-Einstellungen der Post-Build-Aktionen in Jenkins 'Projektkonfiguration ähnlich zu sein. Mit diesen Optionen können Sie jedoch nicht die Push-URL oder die Remote-Adresse angeben, an die Push gesendet werden soll.

Wie ich es verstehe, würden die Git Publisher-Einstellungen die Klone von Repo Jenkins in ihren Arbeitsbereich zurück in Jenkins 'öffentliches Repo schieben, aber ich möchte zu einer anderen Fernbedienung, dem gesegneten Repository, wechseln.

Hat jemand irgendwelche Vorschläge, wie ich Jenkins dazu bringen kann, zum gesegneten Repo vorzudringen?

EDIT 0 : Ich habe versucht, einen Post-Schritt zu machen, um den Push-Befehl zu meinem gesegneten Repository auszuführen. Dies scheint zu funktionieren, da es keine Fehler gibt. Es werden jedoch keine Änderungen vorgenommen und die Protokolle zeigen, dass git denkt, dass alles auf dem neuesten Stand ist:

%Vor%

Ich weiß nicht, warum Git denkt, es gibt nichts zu schieben, weil es definitiv ist.

    
chrisbunney 18.11.2011, 13:54
quelle

2 Antworten

2

Wie wäre es mit der Jenkins-Aktion "Push Only If Build Succeeds" mit einem Post-Commit- oder Post-Receive-Hook im Integrationsrepository, um das gesegnete Repository zu pushen, wenn Jenkins nach einem erfolgreichen Build pusht?

    
Kkkev 18.11.2011 20:32
quelle
1

Haben Sie in Erwägung gezogen, Ihrem Workflow Gerrit hinzuzufügen? Änderungen werden an Gerrit weitergeleitet und Ihr CI führt dann einen Build aus und berichtet über Ihre Tests. Es kann so eingerichtet werden, dass andere Genehmigungen (wie autorisierte Code-Überprüfungen) benötigt werden, bevor es in Ihr gesegnetes Repository integriert wird. EGit verwendet es in seiner Entwicklung Ссылка . Es gibt andere Diskussionen über diesen Workflow, wie alblue s Blog.

    
Paul Webster 18.11.2011 18:00
quelle

Tags und Links