Toto je starší verze dokumentu!
Pokud chcete používat GitLab Runner s Docker executorem na vpsAdminOS, nejprve si nainstalujte Docker podle našeho návodu a GitLab runner podle oficiálního návodu.
Aby se Docker kontejnery připojily k internetu, je potřeba použít vlastní síť (viz bridge-coi
v návodu). Potom je nutné o této síťi říci runneru, do
/etc/gitlab-runner/config.toml
doplňte následující:
[[runners]] ... [runners.docker] ... network_mode = "bridge-coi"
Ve vlastní síti ovšem správně nefunguje linkování služeb ke kontejneru s testy/buildem. Ověřeny byly dvě možné řešení: používat výchozí síť dockeru a upravit si ji, nebo patchnout GitLab Runner, aby linkování správně nastavil.
Docker nad výchozím bridge nastavuje MASQUERADE
a my potřebujeme SNAT
. Nevím
o tom, že by to šlo v Dockeru přenastavit, takže iptables upravujeme skriptem po
spuštění docker.service
. Vytvořte/upravte /etc/systemd/system/docker.service.d/override.conf
a doplňte následující:
[Service] ExecStartPost=/usr/local/bin/docker-patch-default-network <veřejná IPv4 VPS>
Nyní vytvoříme ten skript:
cat <<EOF > /usr/local/bin/docker-patch-default-network #!/bin/sh if [ $# != 1 ] ; then echo "Usage: $0 <public IPv4 address>" exit 1 fi ip=$1 ORIG_RULE="POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE" NEW_RULE="POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j SNAT --to-source $ip" rule_exists() { local rule="$1" if $(iptables-save | grep -q "$rule") ; then echo y else echo n fi } while true ; do orig_exists=$(rule_exists "$ORIG_RULE") new_exists=$(rule_exists "$NEW_RULE") if [ "$orig_exists" == "y" ] ; then iptables -t nat -D $ORIG_RULE [ "$new_exists" == "n" ] && iptables -t nat -A $NEW_RULE exit 0 elif [ "$new_exists" == "y" ] ; then exit 0 else sleep 1 continue fi done EOF chmod +x /usr/local/bin/docker-patch-default-network
Zbývá už jen restartovat Docker:
systemctl daemon-reload systemctl restart docker.service
Pokud chcete používat vlastní docker network a mít v kontejneru dostupné služby, nezbývá než opravit GitLab Runner. Tento patch aplikujte vůči https://gitlab.com/gitlab-org/gitlab-runner. Je to opravdu skvělý zážitek, pro Fedoru 28 vypadá build takto:
make RPM_PLATFORMS=fedora/28 RPM_ARCHS=x86_64 DEB_PLATFORMS= BUILD_PLATFORMS="-os linux -arch amd64" make package-rpm-fpm ARCH=amd64 PACKAGE_ARCH=amd64
Výsledný balíček pak stačí nainstalovat:
dnf install out/rpm/gitlab-runner_amd64.rpm