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íti ří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
Další možností instalace je stáhnout zkompilovaný rpm balíček pro Fedoru, který je již zkompilovaný s výše uvedeným patchem:
https://gitlab.com/petrparolek/gitlab-runner/-/jobs/73839653/artifacts/download