am 4. Februar 2011
Ich hatte ja vor kurzem das Vergnügen drei Vorträge von Martin Fowler zu hören, da er einen Abend Zeit hatte uns Hamburgern ein wenig zu erzählen. Da ich Gurus immer mal wieder gerne zuhöre, war ich natürlich dabei. Der Vortrag war auch ok, aber eigentlich hat mich der Vortrag, der vorgelagert war, viel mehr interessiert. Es ging um Continuous Integration und Continuous Deployment. Ja ich weiß, alter Hut.
Solche Vorträge sind für mich immer ein Erfolg, wenn man eine neue Sache dabei lernt. Und was soll ich sagen? Es ist passiert. Es wurde das Konzept der Build-Pipeline vorgestellt, was ich recht einfach und trotzdem spannend fand. Ich passe das ganze mal für die PHP/Webentwicklungs-Welt an.
Wir kennen alle Selenium und wissen, dass das Ausführen echt schmerzhaft sein kann. Schmerzhaft im Sinne der Dauer. Ein ausführliches Testsetup kann da schon mal 30min dauern. Das ist natürlich Zeit, die man nicht hat. Was passiert also? Man ruft die Tests nur ab und zu auf.
Hat man einen Continuous Integration Server, wie zum Beispiel Bamboo, Cruise Control oder Hudson, dann will mal möglichst schnell Feedback über das Stück Code, dass man gerade eingecheckt hat. Eine halbe Stunde warten will niemand. Unit Tests sind schnell, also werden nur diese dort eingehängt.
Für mich war das immer Fakt und deswegen habe ich auch gar nicht mehr lange drüber nachgedacht: Alles was lange dauert, hat im Build nicht zu suchen. Tja, da war ich wohl zu kurzsichtig. Wer sagt denn, dass es nur einen Build geben kann. Die Idee der Build-Pipeline ist also geboren.
Ich versuch das mal kurz zu beschreiben. Wir haben einen ersten Build-Durchgang. Dieser führt alle Unit Tests aus, sobald etwas comitted wurde. So wie das immer passiert. Ist dieser Build fehlerfrei durchgelaufen, wird die nächste Runde angetriggert. Hier werden jetzt alle Selenium-Tests ausgeführt. Wenn die Selenium-Tests durch sind, werden noch zeitintensivere Tests ausgeführt. Lasttests zum Beispiel. Jedes mal wenn einer von den langen Tests durchgelaufen ist, wird geprüft, ob ein Test vorher in der Pipeline schon positiv durchlief und baut dann gleich wieder.
Ich finde die Idee auf jeden Fall sehr gut, was sie überhaupt verständlich? Eigentlich wollte ich ja ein paar Grafiken dazupacken, aber irgendwie wurde es dann doch so spät, dass keine Zeit mehr war. Werde auch versuchen das bei uns mal umzusetzen und danach die Skripte hier zur Verfügung zu stellen.