Znalostní Báze

Informace o sdružení vpsFree.cz, návody a nejčastější dotazy.

Uživatelské nástroje

Nástroje pro tento web


navody:server:gitlab_runner

GitLab Runner

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.

Úprava výchozí sítě

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

Patch GitLab Runneru

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ý balíček pro Fedoru 28, Ubuntu 18.04, který je již zkompilovaný s výše uvedeným patchem:

Fedora 28 https://gitlab.com/petrparolek/gitlab-runner/-/jobs/75415294/artifacts/download

Ubuntu 18.04 https://gitlab.com/petrparolek/gitlab-runner/-/jobs/75415293/artifacts/download

navody/server/gitlab_runner.txt · Poslední úprava: 2018/06/17 14:42 autor: parolek