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