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"
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.
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!
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.
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