Gitlab und Docker Registry

Seit Version 8.8 hat Gitlab eine Container Registry um fuer Repositories auch Container fuer Docker nutzen zu koennen. Wenn man die Continuous Integration zusammen mit Docker benutzt ist das natuerlich sehr praktisch, wenn man fuer das Projekt schon die zugehoerigen Images hochladen kann. Doch viel interessanter ist es, wenn man schon als Teil des Build Prozesses gleich den kompletten Container baut. Dazu habe ich mir ein paar Notizen gemacht und dieses Projekt angelegt: Docker Test.

Zuerst brauchen wir ein Dockerfile, also eine Datei, die beschreibt wie ein Container erstellt wird.

FROM ubuntu

RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get install -y build-essential

Danach wird in der Datei .gitlab-ci.yml erstellt. Dort defeniere ich einen Schritt um das Dockerfile zu einem Image zu bauen.

Wenn man normalerweise einen Container bauen und hochladen moechte muss man folgende Schritte ausfuehren:

  • In die Registry einloggen
  • Den Container bauen
  • Container hochladen.
build_container:
  stage: build_container
  script:
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com
    - docker build -t registry.gitlab.com/rayendumeldust/docker-test:latest .
    - docker push registry.gitlab.com/rayendumeldust/docker-test:latest
  only:
    changes:
    - Dockerfile

Wie man sehen kann werden die drei Schritte im script Tag abgearbeitet. Die restlichen Optionen sind fuer folgendes da:

  • stage definiert den Schritt, in dem der build_container Schritt ausgefuehrt wird.
  • only ist so konfiguriert, dass der Job nur ausgefuehrt wird, wenn die Datei Dockerfile veraendert wurde. So spart man sich unnoetige Schritte waehrend dem Bauen.

Den Container sollte man jetzt in seinem Projekt finden: https://gitlab.com/rayendumeldust/docker-test/container_registry. Wenn man dem Image einen bestimmten Tag geben will, um zum Beispiel einen speziellen Branch zu benutzen, kann man vordefinierte Umgebungsvariablen anhaengen.

Jetzt muss man natuerlich beim bauen des Codes auch den gerade erstellten Container verwenden. Das kann man machen indem man das richtige image definiert:

build:
  image: registry.gitlab.com/rayendumeldust/docker-test:latest
  stage: build
  script:
    - make all

Die komplette CI Konfiguration kann man hier finden.