Frage

Ich ziehe meine kontinuierliche Tests auf einem dedizierten server (autotest verlangsamt meinem lokalen laptop zu viel).Was ich möchte, ist für meinen Test-server (die zufällig ausgeführt werden, CruiseControl.rb) werden kontinuierlich immer meine neuesten (begangen) änderungen über Git -- im Idealfall, ohne änderungen an meinen eigenen workflow.Ich bin der einzige Entwickler an diesem Projekt zu arbeiten.

Bevor Sie die Test-server, die ich hatte:

  • My laptop as my main development system
  • Mehrere Zweige, die in meinem lokalen repository.
  • Eine Arbeitskopie, die auf einer der Zweige.Ich Schalter zwischen die Zweige Häufig (in der Regel für neue features).
  • Einen GitHub-account, zu dem ich Häufig push-Filialen gespiegelt remote-Niederlassungen.(Dies ist vor allem für die Verwendung eines offsite-Backups;Ich bin nicht mit jemandem zu teilen-code für mein Aktuelles Projekt).Ich versuche, push-to-GitHub-mindestens am Ende eines jeden Arbeitstages, obwohl ich gelegentlich vergessen.

Ich möchte zu halten, alles intakt.Auf top von, dass, ich jetzt haben:

  • Der test-server
  • ...läuft CruiseControl.rb
  • Ein Klon von meinem laptop repository auf meinem test-server.(Es ist derzeit nicht Klonen von GitHub)
  • Eine lokale Arbeitskopie auf den test-server, von dem CC ist building/testing.
  • Diese Arbeitskopie verweist auf einen bestimmten Git-Zweig (natürlich)

Ich habe versucht, meinen test-server automatisch erhalten, egal, in welcher Filiale ich arbeite auf meinem laptop arbeiten, kopieren und erstellen von, dass.(Das würde imitieren autotest ist kontinuierliche Prüfung, ohne Essen, ohne Systemressourcen).

Dinge, die ich versucht habe, ohne Erfolg:

  • git checkout origin/HEAD:diese ruft die Dateien in Ordnung, aber bricht CruiseControl, weil es nicht wie die "astfreie" Arbeitskopie.
  • git checkout --track -b a_branch Herkunft/a_branch:dies funktioniert gut, um Dateien und CC-mag es, aber es klebt den Test-server zu einem besonderen Zweig.Beim Wechsel Zweige auf dem laptop werde ich effektiv stoppen testen meiner aktuellen Arbeit.
  • git checkout --track -b my_testing_branch origin/HEAD:bekommt auch diese baubare Dateien, aber es leidet unter dem gleichen problem wie der obige Befehl.Erstellen einer Zweig origin/HEAD bekommt nur den KOPF für die "default" - Zweig, so dass es klebt auch.

Gibt es eine Möglichkeit, ich kann eine gute remote-continuous-testing-system (mit oder ohne git-Zweige), die nicht die großen änderungen, um meinen workflow?

War es hilfreich?

Lösung

Eine andere option ist zu schreiben Haken benachrichtigt den server testen des neuen Codes zu ziehen.Insbesondere, eines post-commit hook ist wahrscheinlich eine bessere route.Dann, jedes mal, wenn Sie sich verpflichten, Sie können informieren die test-server, was zu ziehen und von dem Zweig.

Andere Tipps

Sie könnten einen eigenen Testzweig, auf das Sie Ihr aktuelles Zweigwerk verschmelzen.
Sie können erzwingen, den Inhalt dieses Zweigs mit dem Ersatz verpflichten des aktuellen Arbeitszweig (siehe git merge es uns, was „ihre“ Frage).

Dann auf dem CI-Server, initialisieren Sie es mit:

 $ git fetch laptopRepo
 $ git checkout -b testingBranch laptopRepo/testingBranch

Es bedeutet ein erster Schritt auf dem Laptop Seite einig aktuelle Arbeit zu Test zu veröffentlichen.

Dies ist nicht die größte Lösung, aber es ist etwas ...

Der Testserver kann git remote show origin laufen, welcher Zweig zu sehen ist derzeit aktiv auf Ihrem Laptop. Zum Beispiel,

$ git remote show origin
* remote origin
  Fetch URL: blade:/var/scratch/code
  Push  URL: blade:/var/scratch/code
  HEAD branch: foo
  Remote branches:
    foo tracked
    bar tracked
    qux tracked

Also, der Ursprung Repository ist derzeit auf dem foo Zweig.

Ich habe nicht einen niedrigen Pegel Befehl gesehen, die Sie geben, die direkt so können Sie es analysieren müssen, um aus dieser (vielleicht jemand einen besseren Weg). Beispiel:

$ b=$(git remote show origin | grep "HEAD branch" | awk -F: '{print $2}')
$ echo $b
foo

Nun, da origin/foo wird origin/HEAD ähnlich handeln (keine lokale Niederlassung) und Ihr CruiseControl- nicht wie, dass Sie sollten wahrscheinlich nur eine lokale Niederlassung auf der Testmaschine erstellen und einfach hart zurückgesetzt es auf den neuesten Standort:

$ b=$(git remote show origin | grep "HEAD branch" | awk -F: '{print $2}')
$ git reset --hard origin/$b

Beachten Sie, ist dies leicht zerbrechlich, da HEAD mich nicht immer das, was Sie denken, es ist. Zum Beispiel wird während eines Fütterungsmaterial HEAD rückwärts und vorwärts bewegen. Wenn Ihre Schecks Testserver auf Ihrem Laptop während eines rebase HEAD könnte es einig ungültige oder unerwünschte Stelle bekommen.

Ich habe glaube bekam eine ziemlich gute Lösung durch Umkehrung der Beziehung zwischen den beiden Systemen.Anstatt den test-server zu ziehen aus den laptop-repository, hätte ich den laptop drücken Sie die änderungen aus, um die server getestet werden.

Zuerst füge ich eine Fernbedienung auf dem laptop-repo:

git remote add testing <url of testing server>

Dann, wenn ich code zum testen, ich mache ein push:

git push -f testing HEAD:master

Dies funktioniert aus welchem Zweig ich bin derzeit auf.-F sorgt dafür, dass ich Sie Blase Weg was ist schon in diesem Zweig;Ich nicht haben, um sorgen über jede Abstammung.

Diese wird nicht tatsächlich legte Sie den neuesten code in eine Arbeitskopie, sondern CruiseControl abrufen können sich lösen.Ich hätte auch einen server-side-Haken, die Aktualisierung der Arbeitskopie und läuft der test suite (würde ich Sie nicht sogar brauchen, CC an diesem Punkt).

Ich werde wahrscheinlich möchten Sie auch eine kombinierte commit+push-Befehl, um ein Skript oder ein alias;geben mir meine ein-Befehl commit & test.Wenn für einige Grund möchte ich ein commit ohne einen test drücken (oder Umgekehrt), dann muss ich diese Optionen auch.

scroll top