Ich habe ja bereits berichtet, dass ich meine GitLab-Installation in einen Docker-Container verfrachtet habe. Nun möchte ich passend dazu natürlich auch meine GitLab-Runner in Docker-Containern laufen lassen. Was mir hierbei gut gefällt: Das restliche System ist von den für Build-Prozesse notwendigen Tools nicht zugemüllt.
GitLab Runner im Docker-Container laufen lassen
Wie in der originalen Anleitung zu lesen, ist es gar nicht schwer, einen GitLab-Runner im Docker-Container auszuführen:
1 2 3 4 5 6 |
docker run -d \ --name gitlab-runner \ --restart always \ -v /srv/docker/gitlab/gitlab-runner/config:/etc/gitlab-runner \ gitlab/gitlab-runner:latest |
Doch ich will natürlich noch einige zusätzliche Tools für PHP-Entwicklung in den Runner einbinden.
Ein PHP-Optimierter GitLab-Runner
Das tolle an Docker: Auf bestehenden Images aufbauen und diese erweitern. Mit einem Dockerfile.
Ich habe also mein eigenes Dockerfile geschrieben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
FROM gitlab/gitlab-runner:latest MAINTAINER Oliver Lippert RUN apt-get update RUN apt-get install -y php5 php-pear zip curl php5-mcrypt nodejs npm ncftp RUN php5enmod mcrypt RUN apt-get update RUN apt-get install -y php5-xsl RUN ln -s /usr/bin/nodejs /usr/bin/node RUN npm install -g less RUN sh -c 'wget -c http://static.phpmd.org/php/latest/phpmd.phar && chmod +x phpmd.phar && mv phpmd.phar /usr/local/bin/phpmd' RUN sh -c 'wget https://phar.phpunit.de/phploc.phar && chmod +x phploc.phar && mv phploc.phar /usr/local/bin/phploc' RUN sh -c 'pear channel-discover pear.pdepend.org && pear install pdepend/PHP_CodeSniffer_Standards_PDepend2 && pear install pdepend/PHP_Depend' RUN sh -c 'curl -sS https://getcomposer.org/installer | php -- --install-dir=bin --filename=composer' RUN sh -c 'wget https://phar.phpunit.de/phpcpd.phar && chmod +x phpcpd.phar && mv phpcpd.phar /usr/local/bin/phpcpd' RUN sh -c 'wget https://github.com/theseer/phpdox/releases/download/0.8.0/phpdox-0.8.0.phar && chmod +x phpdox-0.8.0.phar && mv phpdox-0.8.0.phar /usr/bin/phpdox' |
Kurz erklärt: Was hier passiert ist quasi das originale Docker-Kommando (siehe ganz oben). Es wird also das Docker-Image „gitlab/gitlab-runner:latest“ geladen. Dann werden zusätzliche Kommandos ausgeführt.
- Die Liste der verfügbaren Programme aktualisieren
- Neue Pakete installieren: php5, php5-pear, zip, curl, php5-mcrypt, NodeJS, npm und ncftp
- Das mcrypt-PHP-Modul aktivieren
- nochmals vergügbare Programme aktualisieren
- Neue Pakete installieren: php5-xsl
- NodeJS passend verlinken
- Den LessCSS-Precompiler über NodeJS installieren
- phpmd installieren
- phploc installieren
- Composer installieren
- phpcpd installieren
- phpdox installieren
Mit dieser Palette an Tools kann ich meine Projekte optimal bauen. Jetzt muss ich das Docker-Image nur noch erstellen und ausführen lassen:
1 2 3 4 5 6 7 |
docker build -t lipperts-web/gitlab-runner . docker run -d \ --name gitlab-runner-php-01 \ --restart always \ -v /srv/docker/gitlab/gitlab-runner-php-01/config:/etc/gitlab-runner \ lipperts-web/gitlab-runner:latest |
Nun läuft mein PHP-Optimierter GitLab-Runner. Jetzt muss er nur noch registriert werden, dazu führt man folgendes Kommando aus und befolgt die Anweisungen:
1 |
docker exec -it gitlab-runner-php-01 gitlab-runner Register |
Meinen Runner nutzen
Wenn Du dich um das Dockerfile nicht kümmern möchtest, aber meine Tool-Palette cool findet, kannst Du genau diesen Runner auf jedem Server installieren, dazu nutzt du statt dem obigen docker-build Kommande folgendes:
1 2 3 |
docker build \ -t lipperts-web/gitlab-runner \ http://lw-scm.de/lipperts-web/gitlab-runner-php.git |
Nun zieht dein Docker sich das Dockerfile aus meinem öffentlichen Repository und baut das Docker-Image.