Benutzer-Werkzeuge

Webseiten-Werkzeuge


infrastruktur:host:gitlab-runner

Gitlab Runner

Shared Gitlab Runner mit Docker Executor.

IP: 172.23.208.126

Nicht öffentlich erreichbar. Es reicht völlig aus, wenn der Runner ausgehende Verbindungen ins Internet aufbauen kann.

Installiert von Malte.

Verwendung

Der Gitlab Runner ist als Shared Runner in unserem Gitlab eingetragen und kann dort einfach verwendet werden. Zum Beispiel um eine LaTeX-Datei main.tex automatisch mit jedem Commit zu bauen und das PDF als Artefakt zum Download anzubieten, kann folgende .gitlab-ci.yml verwendet werden:

image: malteschmitz/latex

deploy:
  script:
    - latexmk -pdf main.tex
  artifacts:
    paths:
    - main.pdf

Installations-Log

Install Docker using the Repository

# Install packages to allow apt to use a repository over HTTPS
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
# Add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# Add repository
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
# Install
sudo apt-get install docker-ce docker-ce-cli containerd.io

Install Gitlab Runner using the Repository

# Add GitLab’s official repository
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
# Install
sudo apt-get install gitlab-runner

Register the Runner

Cronjob, um regelmäßig alle Docker-Images und -Container zu löschen, die älter als 10 Tage sind:

# m h  dom mon dow   command
01 0 * * * docker system prune --force --filter "until=240h" >>/usr/tmp/CleanUP.log 2>&1

Editiere /etc/gitlab-runner/config.toml um gleichzeitige Jobs zu erlauben:

concurrent = 4

IPv6 NAT für Docker aktivieren

Docker hat von alleine nur IPv4 NAT, sodass IPv6 für ausgehende Verbindungen in das Internet erstmal nicht funktioniert. Die Idee von Docker ist, dass man vorhandene IPv6 Adressen an die Container zuweist, denn NAT in IPv6 ist ganz böse. Ich finde es aber sehr praktisch, deswegen machen wir es mit der Firewall. Basierend auf dieser Anleitung.

If you needed ufw to NAT the connections from the external interface to the internal the solution is pretty straight forward. In the file /etc/default/ufw change the parameter DEFAULT_FORWARD_POLICY

DEFAULT_FORWARD_POLICY="ACCEPT"

Also configure /etc/ufw/sysctl.conf to allow ipv4 forwarding (the parameters is commented out by default). Uncomment for ipv6 if you want.

#net.ipv4.ip_forward=1
net/ipv6/conf/default/forwarding=1
#net/ipv6/conf/all/forwarding=1

The final step is to add NAT to ufw’s configuration. Add the following to /etc/ufw/before6.rules just before the filter rules.

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic through eth0 - Change to match you out-interface
-A POSTROUTING -s fd00::/64 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't
# be processed
COMMIT

Create /etc/docker/daemon.json

{
  "ipv6": true,
  "fixed-cidr-v6": "fd00::/64"
}

Allow ssh in the firewall rules

sudo ufw allow ssh

Enable the firewall

sudo ufw disable
sudo ufw enable
infrastruktur/host/gitlab-runner.txt · Zuletzt geändert: 19.08.2022 14:27 von Malte