Outils pour utilisateurs

Outils du site


git:gitlab:gitlab-runner

Gitlab Runner

Aperçu

Exemple de docker-compose

gitlab: 
  image: gitlab/gitlab-ce 
  restart: unless-stopped 
  container_name: gitlab 
  hosname: git.formajc.nothus.fr # (alternative 2) 
  ports:
    # - "8080:80"
    # - "8443:443"
    - "8022:22"
  environment:
    GITLAB_OMNIBUS_CONFIG: |
    external_url 'https://git.formajc.nothus.fr' # (alternative 1) ici le domaine local est identique à celui extérieur, ce qui posera problème ; il est préférable de mettre un nom de résolution, propre aux réseaux internes Docker (exemple : 'gitlab') 
    # Add any other gitlab.rb configuration here, each on its own line
  volumes:
    - "./gitlab/config:/etc/gitlab" 
    - "./gitlab/logs:/var/log/gitlab" 
    - "./gitlab/data:/var/opt/gitlab" 

gitlab-runner:
  image: gitlab/gitlab-runner:ubuntu
  container_name: gitlab-runner 
  restart: unless-stopped
  depends_on:
    - gitlab
  volumes:
    - "./gitlab/config/ssl/git.formajc.nothus.fr.crt:/etc/gitlab-runner/certs/git.formajc.nothus.fr.crt:ro" 
    - "./gitlab/runner:/etc/gitlab-runner" 
    - "/var/run/docker.sock:/var/run/docker.sock" 

Enregistrement du runner

Lors de l'enregistrement, deux cas se présentent :

- soit le domaine local est correctement enregistré (ce qui n'est pas notre cas, la configuration initiale de Gitlab fait référence à un domaine externe). La commande de `register` se fait alors naturellement sans configuration supplémentaire ; 
- soit le domaine local est géré ailleurs (exemple Nginx, etc.) et alors le certificat "public" (accessible par Internet), est différent de celui généré et auto-signé localement. 

Résolution d'un cas de domaine local différent

Alternative 1 : surcharge locale

On vérifie que le point de montage entre Gitlab et Gitlab-Runner, permet d'accéder au certificat depuis le runner :

root@05cd1472cc62:/# ls /etc/gitlab-runner/certs/git.formajc.nothus.fr.crt 
/etc/gitlab-runner/certs/git.formajc.nothus.fr.crt

J'installe ensuite avec apt, les paquets dnsutils (pour obtenir la commande de résolution de domaine dig) et l'éditeur de texte nano. On résout le domaine local (au sein du réseau Docker), le service gitlab pour avoir l'adresse et surcharger la configuration des hôtes du conteneur :

root@05cd1472cc62:/# dig gitlab

; <<>> DiG 9.16.1-Ubuntu <<>> gitlab
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31333
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;gitlab.                                IN      A

;; ANSWER SECTION:
gitlab.                 600     IN      A       172.18.0.4

;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Wed Jun 09 07:51:17 UTC 2021
;; MSG SIZE  rcvd: 46

root@05cd1472cc62:/# echo "172.18.0.4 git.formajc.nothus.fr" >> /etc/hosts 

On peut alors lancer l'enregistrement qui se déroule sans problème :

root@05cd1472cc62:/# gitlab-runner register --tls-ca-file=/etc/gitlab-runner/certs/git.formajc.nothus.fr.crt 
Runtime platform                                    arch=amd64 os=linux pid=426 revision=7a6612da version=13.12.0
Running in system-mode.                            
                                                   
Enter the GitLab instance URL (for example, https://gitlab.com/):
https://git.formajc.nothus.fr/
Enter the registration token:
zuvkH8YReq7CsHKwaLXt
Enter a description for the runner:
[05cd1472cc62]: runner-1
Enter tags for the runner (comma-separated):

Registering runner... succeeded                     runner=zuvkH8YR
Enter an executor: parallels, ssh, docker+machine, docker-ssh+machine, docker, docker-ssh, virtualbox, kubernetes, custom, shell:
docker
Enter the default Docker image (for example, ruby:2.6):
debian
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

Alternative 2 : modifier le nom d'hôte DNS au sein de Docker

Docker-compose permet de fixer le hostname, ce qui résout au niveau du DNS Docker, le problème. Le montage du certificat local de Git - sans modifier le /etc/hosts - suffit.

Exemple de fichier de configuration

/etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
 
[session_server]
  session_timeout = 1800
 
[[runners]]
  name = "runner-1"
  url = "https://git.formajc.nothus.fr/"
  token = "**************"
  #tls-ca-file = "/etc/gitlab-runner/certs/git.formajc.nothus.fr.crt"
  tls-cert-file = "/etc/gitlab-runner/certs/git.formajc.nothus.fr.crt"
  tls-key-file = "/etc/gitlab-runner/certs/git.formajc.nothus.fr.key"
  environment = ["GIT_SSL_NO_VERIFY=true","ENV=value", "LC_ALL=en_US.UTF-8"]
  executor = "docker"
  pre_build_script = """
    echo "bonjour, ce message provient du 'pre_build_script' au sein de la configuration en dur du runner"
  """
#    apt-get update -y > /dev/null
#    apt-get install -y ca-certificates > /dev/null
#    cp /etc/gitlab-runner/certs/git.formajc.nothus.fr.crt /usr/local/share/ca-certificates/git.formajc.nothus.fr.c>
#    cp /etc/gitlab-runner/certs/git.formajc.nothus.fr.crt /usr/local/share/ca-certificates/ca.crt
#    update-ca-certificates --fresh > /dev/null
 
  [runners.custom_build_dir]
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  [runners.docker]
    tls_verify = false
    image = "debian:stable-slim"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = [
        "/cache",
#       "/etc/gitlab-runner/certs/git.formajc.nothus.fr.crt:/etc/gitlab-runner/certs/git.formajc.nothus.fr.crt:ro" 
    ]
    shm_size = 0
git/gitlab/gitlab-runner.txt · Dernière modification : 2024/01/06 13:02 de 127.0.0.1

Outils de la page