====== Gitlab Runner ====== Shared [[https://docs.gitlab.com/runner/|Gitlab Runner]] mit [[https://docs.gitlab.com/runner/executors/docker.html|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 [[https://git.chaotikum.org/|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 ===== [[https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository|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 [[https://docs.gitlab.com/runner/install/linux-repository.html|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 [[https://docs.gitlab.com/runner/register/index.html|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. [[https://gist.github.com/kimus/9315140|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 {{tag>infrasystem host case productive}}