Arbeitsabläufe und Workflows zu automatisieren bzw. so weit zu vereinfachen wie möglich, ist uns ein großes Anliegen. Aufgaben, die ein Script übernehmen kann, müssen nicht wie ein Mantra wiederholt werden. In unserem Continuous Integration System wird Sourcecode automatisiert compiliert und zu einem installierbaren Paket geschnürt. Einer der Trigger ist das Anlegen eines Tags in der Versionsverwaltung. Wird ein neuer Tag angelegt, wird die Software automatisch in dieser Version compiliert.

Subversion bietet hierfür die Möglichkeit an, auf diverse Trigger (Hooks) automatisiert Ereignisse auszuführen. Leider sind diese Trigger sehr allgemein gehalten. Ein weiteres Manko ist die Tatsache, dass Subversion die Konzepte von Branching, Tagging und dem Kopieren von Verzeichnissen intern exakt gleich behandelt. Lediglich die Konvention, dass Branches im Verzeichnis /branches kopiert werden und Tags im Verzeichnis /tags abgelegt werden unterscheidet ein Branch von einem Tag. Dieser Vorgang wird stets mit dem svn copy Befehl durchgeführt.

Um nun zu identifizieren, wann ein Entwickler einen Tag anlegt, mussten wir selbst ein Konzept entwickeln. Ein kleines Bash-Script übernimmt deshalb hier die Arbeit, welches im Repository unter hooks/pre-commit abgelegt wurde:

[gist id=1729504]

(Das Snippet dient hier nur zur Verdeutlichung. Fehlende Pfade, Variablen und Checks wurden zur Übersichtlichkeit weggelassen.)

In unserem Fall wird nach dem Anlegen eines Tags dieser Tag exportiert (svn export), auf den Build-Server kopiert (scp) und anschließend den Buildprozess angestoßen (mit curl über http).

Ein interessanter Nebeneffekt dieses Konzept ist die Kohärenz zwischen Programmcode und ausgelieferten Versionen. So lässt sich jederzeit ermitteln mit welcher Codebasis und welchen Codestand ein bestimmtes Release erstellt wurde. Dies macht das Suchen nach Fehlern deutlich einfacher.

Der Mechanismus kann natürlich auch auf andere Verzeichnisse und Aktionen angewendet werden. Beispielsweise das Verknüpfen von Branches mit Tickets aus der Ticketverwaltung oder das Verbieten von Änderungen an Tags (hier natürlich im pre-commit Hook).

1 Antwort
  1. BaesCLU
    BaesCLU sagte:

    439053 508398As I website possessor I believe the content material here is rattling great , appreciate it for your efforts. You should keep it up forever! Good Luck. 740037

    Antworten

Dein Kommentar

An Diskussion beteiligen?
Hinterlasse uns Deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.