Quo Vadis Continous Integration

Continous Integration ist ja eines der Buzzwords im Bereich der Software Entwicklung. Jeder der in letzter Zeit mit OpenSource Tools und/order Java entwickelt hat, kennt Jenkins. Jenkins ist ein solides Tool für Continous Integration und kann auch für Continous Delivery genutzt werden. Man kann z.B. einen Job für das Deployment einer neuen Version in der QS oder Prep Umgebung anlegen um das Veröffentlichen eines neuen Releases vorzubereiten. Dabei kann das Promotion Build Plugin in Kombination mit dem Build Pipeline Plugin (BMP) sehr nützlich sein.  Mehr Infos zu BMP gibt es in meiner Präsentation. Das Aufteilen großer Jobs zielt dabei immer darauf auf, Fehler schnelle zu finden:

Aber jeder kennt das Problem der Job-Konfiguration unter Jenkins. Es gibt keine Versionierung. Am Ende kopiert man alle Jobs um die vorherige Konfiguration zu erhalten. Besser ist da das Job DSL Plugin:  Die gesamte Jobkonfiguration erfolgt dabei mittels einer DSL, die man auch innerhalb der Versionskontrolle ablegen kann. Damit kann man einfach die Konfiguration mehrere Umgebung verwalten. Außerdem wird die Verwaltung von Build Pipelines oder branches einfacher.

Aber es gibt im OSS Umfeld noch eine sehr interessante Alternative: Travis CI ist eine cloud-basierte Lösung, die VM Vorlagen für jeden Build nutzt. In der Pro-Version sind auch private Repositories erlaubt. Die Grundidee bei Travis ist, dass für jeden Build ein neues Image deployt wird, dass immer frisch eingerichtet wird. Mittels eines Setups kann dann alles installiert werden. Damit kann man typische Probleme die mit dem Redeploymend oder fehlenden Rechten verbunden sind eliminieren.

Das Setup ist eine Ruby-Datei. Für meine OwnCloud app sind diese .travis.yml so aus:

language: php
php:
- 5.4
- 5.3
# optionally specify a list of environments, for example to test different RDBMS
env:
- DB=mysql
- DB=sqllite

before_install:
- sudo apt-get update -qq
- sudo apt-get install -qq apache2
- sudo apt-get install php5
- sudo apt-get install libapache2-mod-php5
- sudo /etc/init.d/apache2 restart

before_script:
- ./bin/ci/prepare.sh
script:
- sh -c "if [ '$DB' = 'mysql' ]; then ./bin/ci/prepare_mysql.sh; fi"
- sh -c "if [ '$DB' = 'sqllite' ]; then ./bin/ci/prepare_sqllite.sh; fi"
- phpunit --configuration phpunit_$DB.xml --coverage-text
- ./bin/sausage/vendor/bin/phpunit --path=./apps/roundcube/tests/integration/Selenium.php

Travis  kann wunderbar in GitHub eingebunden werden, siehe das fertige Beispiel.

Travis CI mag sicherlich nicht für die typische kommerziellen Projekte passen, aber es bietet einen interessanten neuen Ansatz und vielleicht gibt es ja bald ein Version zum Deployen auf der eigenen Infrastruktur.

This entry was posted in IT and tagged , , . Bookmark the permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.