gitlab-runner per tags ansteuern

Datum

Bei der Einrichtung eines gitlab-runners kann man angeben, welcher Executor verwendet werden soll.

Vorbereitungen

Ich verwenden hierbei einen gitlab-runner mit Shell executor und einen weiteren mit Docker executor.
Hierbei ist vor allem darauf zu achten, dass entweder direkt bei der Einrichtung des gitlab-runners oder im Nachhinein für jeden der runner ein oder mehrere tags gesetzt werden.
Ich verwende hierbei das tag docker für den Docker executor und das tag shell für den Shell executor.

Wozu braucht man das überhaupt?

Mit dieser Unterteilung ist es möglich innerhalb einer Gitlab-CI Pipeline stages auf den entsprechenden gitlab-runnern auszuführen und somit sowohl Shell Befehle auszuführen als auch in docker Images zu arbeiten.

einfachstes Beispiel:
Innerhalb einer Pipeline ist es möglich sich per Shell executor und Dockerfile ein entsprechendes docker Image zu erstellen und dieses in der nächsten stage per Docker executor für Tests zu verwenden.

tags in der .gitlab-ci.yml

Die offizielle Dokumentation zur Verwendung von tags in der gitlab-CI findet sich hier: Using tags

Das von mir angesprochene Beispiel würde als .gitlab-ci.yml wie folgt aussehen:

1.) Als erstes die stage zur Erstellung des docker images


build image:
  stage: build image
  script:
    - docker build --no-cache -t <docker image name>:${CI_COMMIT_REF_SLUG}_${CI_PIPELINE_ID}
  tags:
    - shell

2.) Nun die stage um z.B. Tests in dem neu erstellten docker image durchzuführen:


testing:
  stage: testing
  image: <docker image name>:${CI_COMMIT_REF_SLUG}_${CI_PIPELINE_ID}
  script:
    - /bin/test_tool.sh
    ...
  tags:
    - docker

Beim durchlaufen der Pipeline erkennt man in der Augabe welcher gitlab-runner für die entsprechende stage verwendet.

bei der build image stage:

Running with gitlab-runner 12.1.0 (de7731dd)
  on Shell executor AUxbxyQE

und entsprechend bei der testing stage:

Running with gitlab-runner 12.1.0 (de7731dd)
  on Docker executor jSyHnqkS

Somit kann man selbst bei gitlab-runnern, welche dediziert für ein bestimmtes Projekt verwendet werden, diese noch z.B. für verschiedene Umgebungen per tag einrichten. Dies ist zum Beispiel praltisch wenn man sicher gehen will, dass man immer einen gitlab-runner für die production Umgebung verfügbar hat, sofern einer damit getaggt ist.

Autor
Kategorien gitlab-CI, Automatisierung

PRTG Map