Kør din egen Forgejo Runner på Codeberg: En udviklers guide til selvhostet CI/CD
Hvorfor køre din egen CI/CD-runner?
Mange har fået øjnene op for Codeberg som et godt alternativ til GitHub. Platformen bygger på Forgejo og drives af en non-profit, så den er både privatlivsvenlig og fællesskabsbaseret. Men som med de fleste non-profit-løsninger er der begrænsninger på den delte runner-infrastruktur.
Løsningen er at hoste sin egen Forgejo-runner. Fordelen er, at runneren opretter en udgående forbindelse til Codeberg. Derfor kan den køre på en VPS, en hjemmeserver eller endda på din bærbare computer uden port forwarding.
Sådan fungerer arkitekturen
En Forgejo-runner er en arbejdsproces, der modtager jobs fra Codeberg og udfører dem. For at beskytte din vært bruger vi Docker-in-Docker (DinD). Det betyder, at runneren starter isolerede containere uden at røre din hosts Docker-daemon.
Opsætning med Docker Compose
Vi bruger en simpel to-container-løsning:
version: '3.8'
services:
docker-in-docker:
image: docker:dind
container_name: 'docker_dind'
privileged: 'true'
command: ['dockerd', '-H', 'tcp://0.0.0.0:2375', '--tls=false']
restart: 'unless-stopped'
runner:
image: 'data.forgejo.org/forgejo/runner:12'
links:
- docker-in-docker
depends_on:
docker-in-docker:
condition: service_started
container_name: 'runner'
environment:
DOCKER_HOST: tcp://docker-in-docker:2375
user: 1001:1001
volumes:
- ./data:/data
restart: 'unless-stopped'
command: 'forgejo-runner daemon --config runner-config.yml'
Den første container giver et isoleret Docker-miljø,而 den anden er din Forgejo-runner, der kommunikere med den.
Forbered dit system
Før du starter containers, skal du oprette den rigtige mappenstruktur med korrekte tilladelser. Gå til den mappe, hvor du vil lagre konfigurationen – anbefalingen er /opt/forgejo-runner – og kør:
cd /opt/forgejo-runner
mkdir -p data/.cache
chown -R 1001:1001 data
chmod 775 data/.cache
chmod g+s data/.cache
Next, generate the default configuration file:
sudo sh -c 'docker run --rm data.forgejo.org/forgejo/runner:12 forgejo-runner generate-config > data/runner-config.yml'
Denne konfiguration er godt dokumenteret og klar til at blive customizeret.
Tilslutning til Codeberg
Når du går til Codeberg og navigere til Actions → Runners, kan you click "Create new runner". Du får et navn og en beskrivelse, og Codeberg giver dig en UUID og Token, som du skal skrive down. Dette er de nøgler, der lader runneren logge ind mod Codeberg.
Codeberg viser også et YAML-uddrag, der passer præcist to din konfiguration.
Indstilling af labels og kapacitet
Åbne din runner-config.yml og gør disse to ting:
1. Serverkonfigurationen: