Konfiguracja Forgejo Runner do komunikacji z VCS
Aplikacja VCS bazuje na open source-owym projekcie Forgejo i pozwala na integrację z zapewnianymi przez abonenta we własnym zakresie instancjami Forgejo Runner (w najnowszej dostępnej wersji LTS) w celu umożliwienia wykonywania procesów CI/CD (nazywanych w VCS Akcjami). Sposób korzystania z procesów CI/CD opisany jest w dokumentacji użytkownika Forgejo Actions (VCS może nie oferować wszystkich opisanych tam mechanizmów stąd zalecamy testowanie scenariuszy CI/CD w VCS przed podjęciem decyzji o ich produkcyjnym użyciu).
Przykład instalacji i konfiguracji Forgejo Runner v11 w powłoce konta root
osobnej maszyny wirtualnej z systemem Debian 13, korzystającej z jednej partycji dla wszystkich plików, w celu uruchamiania procesów CI/CD z VCS w serwisie demo:
- Zainstalować oprogramowanie potrzebne do korzystania z usług uruchamianych za pomocą docker-compose:
apt-get update && apt-get install docker-compose docker-cli docker.io
- Utworzyć katalog na dane aplikacji mitmproxy, która pozwalać będzie na dostęp do VCS za pomocą certyfikatu dla procesu Forejo Runner oraz procesów uruchamianych wewnątrz kontenerów CI/CD:
mkdir -p /etc/mitmproxy/cc chmod 0770 /etc/mitmproxy
- W pliku
/etc/mitmproxy/cc/vcs.demo.cybo.pl.pem
(w nazwie pliku należy umieścić pełną nazwę domenową integrowanej aplikacji VCS, tutajvcs.demo.cybo.pl
) umieścić treść niezaszyfrowanego klucza prywatnego w formacie PEM (pobraną z pliku439d.plain.key
) a następnie pod nią umieścić treść certyfikatu w formacie PEM (pobraną z pliku439d.crt
). Oba wskazane pliki znajdują się w archiwum439d.zip
. W utworzonym w ten sposób pliku znajdować się powinna treść zgodna z szablonem:
-----BEGIN PRIVATE KEY----- [...] -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE-----
- Utworzyć katalog na konfigurację i dane runnera:
mkdir -p /etc/runner/data/.cache chmod 0770 /etc/runner/data chmod 2770 /etc/runner/data/.cache chown -R 1001:1001 /etc/runner/data
- Utworzyć plik
/etc/runner/docker-compose.yml
o treści
services: proxy: image: 'mitmproxy/mitmproxy' container_name: 'proxy' restart: 'unless-stopped' ports: - '8080:8080' volumes: - '/etc/mitmproxy:/home/mitmproxy/.mitmproxy' - '/etc/ssl/certs:/etc/ssl/certs:ro' - '/usr/share/ca-certificates:/usr/share/ca-certificates:ro' - '/usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro' command: [ 'mitmdump', '--set', 'confdir=/home/mitmproxy/.mitmproxy', '--set', 'client_certs=/home/mitmproxy/.mitmproxy/cc', '--set', 'lock_list="/~d localhost|127\./400\"', '--set', 'ssl_verify_upstream_trusted_ca=/etc/ssl/certs/ca-certificates.crt' ] runner: image: 'data.forgejo.org/forgejo/runner:11' links: - proxy depends_on: proxy: condition: 'service_started' container_name: 'runner' environment: DOCKER_HOST: 'unix:///run/docker.sock' http_proxy: 'http://proxy:8080' https_proxy: 'http://proxy:8080' no_proxy: 'runner' user: '0:0' volumes: - '/run/docker.sock:/run/docker.sock' - '/etc/runner/data:/data' - '/etc/ssl/certs:/etc/ssl/certs:ro' - '/usr/share/ca-certificates:/usr/share/ca-certificates:ro' - '/usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro' restart: 'unless-stopped' command: '/bin/sh -c "while : ; do sleep 1 ; done ;"' networks: default: name: runner
- Utworzyć plik
/etc/runner/data/config.yml
o treści
runner: file: '.runner' capacity: 1 fetch_interval: '10s' report_interval: '5s' envs: https_proxy: 'http://proxy:8080' http_proxy: 'http://proxy:8080' cache: enabled: true dir: '' host: 'runner' port: 0 proxy_port: 0 container: force_pull: true network: 'runner' valid_volumes: - '/etc/ssl/certs' - '/usr/share/ca-certificates' - '/usr/local/share/ca-certificates' options: '--volume=/etc/ssl/certs:/etc/ssl/certs:ro --volume=/usr/share/ca-certificates:/usr/share/ca-certificates:ro --volume=/usr/local/share/ca-certificates:/usr/local/share/ca-certificates:ro ' host: workdir_parent:
- Uruchomić wstępnie kontenery aby wygenerowany został certyfikat CA mitmproxy:
cd /etc/runner docker-compose up -d # Po zakończeniu powyższego polecenia odczekać kilka sekund aby dać czas aplikacji mitmproxy na zainicjalizowanie swoich danych i certyfikatów. docker-compose down
- Dodać wygenerowany certyfikat CA mitmproxy do listy zaufanych ośrodków certyfikacji w systemie Debian (z której korzystać będą również aplikacje w kontenerach):
cp /etc/mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy-ca-cert.crt update-ca-certificates --fresh
- Uruchomić kontenery i wykonać rejestrację runnera w VCS korzystając z tym celu z tokena rejestracji dostępnego w Akcje > Runnery > Utwórz nowy runner > Registration token w ustawieniach aplikacji VCS lub w ustawieniach organizacji lub użytkownika lub repozytorium - w zależności od tego, który z tych obszarów ma być obsługiwany przez konfigurowany runner (poniższe zakłada token
aQI7SPIIGJ1qKWkkOSXCgZfLja5oIiva0URK9Edp
i rejestrację runnera w VCS pod nazwąrunner1
):
docker-compose up -d docker exec -it runner /bin/sh ~ $ forgejo-runner register INFO Registering runner, arch=amd64, os=linux, version=v11.1.1. WARN Runner in user-mode. INFO Enter the Forgejo instance URL (for example, https://next.forgejo.org/): https://vcs.demo.cybo.pl/ INFO Enter the runner token: aQI7SPIIGJ1qKWkkOSXCgZfLja5oIiva0URK9Edp INFO Enter the runner name (if set empty, use hostname: ac2e36e23181): runner1 INFO Enter the runner labels, leave blank to use the default labels (comma-separated, for example, ubuntu-20.04:docker://node:20-bookworm,ubuntu-18.04:docker://node:20-bookworm): # W tym miejscu można wpisać listę rozdzielonych przecinkami etykiet specyfikujących obsługiwane przez runnera obrazy kontenerów, które mają być dostępne dla procesów CI/CD lub pozostawić pustą wartość i wcisnąć Enter aby zaakceptować domyślne etykiety. INFO Registering runner, name=runner1, instance=https://vcs.demo.cybo.pl/, labels=[docker:docker://data.forgejo.org/oci/node:20-bullseye]. DEBU Successfully pinged the Forgejo instance server INFO Runner registered successfully. ~ $ exit docker-compose down
- W pliku
/etc/runner/docker-compose.yml
usunąć linię
command: '/bin/sh -c "while : ; do sleep 1 ; done ;"'
i zamiast niej umieścić linię
command: '/bin/sh -c "sleep 5; forgejo-runner daemon --config /data/config.yml"'
- Uruchomić kontenery (będą one automatycznie uruchamiane również po restartach systemu):
docker-compose up -d
- Na stronie VCS z listą runnerów, z której pobierany był token rejestracji runnera, sprawdzić czy widoczny jest aktywny runner o nazwie
runner1
.
Uwagi:
- Warto rozważyć wprowadzenie następujących zmian w ustawieniach dedykowanego do procesów CI/CD użytkownika technicznego w aplikacji VCS:
- zmienić wartość parametru
Maksymalna ilość repozytoriów
na0
aby użytkownik ten nie mógł tworzyć własnych repozytoriów, - włączyć opcję
Ograniczone konto
jeśli użytkownik ten nie powinien mieć dostępu do repozytoriów publicznych znajdujących się w VCS, - wyłączyć opcję
Może tworzyć organizacje
aby użytkownik ten nie mógł tworzyć organizacji.
- zmienić wartość parametru
- Procesy CI/CD uruchamiane w kontenerach przez runnera w oparciu o powyższą konfigurację mogą korzystać z mitmproxy (za pomocą zmiennych środowiskowych
https_proxy
ihttp_proxy
) co pozwala tym procesom (o ile potrafią korzystać z proxy) np. na sięganie do VCS z uprawnieniami klucza i certyfikatu z pliku/etc/mitmproxy/cc/vcs.demo.cybo.pl.pem
. - Po wygaśnięciu ważności certyfikatu umieszczonego w pliku
/etc/mitmproxy/cc/vcs.demo.cybo.pl.pem
, w celu dalszego korzystania z runnera należy zastąpić treść tego pliku treścią nowego klucza i certyfikatu w sposób analogiczny jak w trakcie opisanej wyżej instalacji a następnie zrestartować maszynę wirtualną Debian. - Powyższa konfiguracja parametrów
valid_volumes
ioptions
w pliku/etc/runner/data/config.yml
zakłada, że kontenery CI/CD tworzone przez runnera będą korzystać z listy zaufanych ośrodków certyfikacji hosta Debian i w analogiczny sposób jak robi to host Debian (zgodność ścieżek zawierających pliki certyfikatów CA).
Zobacz też: