Собствен Forgejo Runner на Codeberg: Практическо ръководство за CI/CD
Защо да си хостваш собствен CI/CD runner?
Ако търсиш алтернатива на GitHub, вероятно вече си попадал на Codeberg. Платформата е изградена върху Forgejo и се поддържа от неправителствена организация, която държи на поверителността и общността. Въпреки това, както всяко малко звено без търговска цел, Codeberg разчита на ограничени ресурси за своите споделени runners.
Решението е просто — пусни свой собствен Forgejo runner. Има една голяма практическа преднина: runner-ът прави връзка навън, към Codeberg. Затова работи без проблем на VPS, домашен сървър или дори на лаптоп. Не се налага да отваряш портове.
Как работи всичко
Преди да започнем техническата част, е добре да разберем структурата. Forgejo runner е работник, който чака задачи от Codeberg и ги изпълнява. За да защитим хоста, ще използваме Docker-in-Docker (DinD). Това означава, че runner-ът създава изолирани контейнери, кова без да пипа Docker на основната машина.
Docker Compose конфигурация
Създаваме два контейнера:
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'
Единият контейнер предоставя изолиран Docker среда,而另一个是你的Forgejo runner.
Подготовка на системата
Създайте директория за конфигурацията (препоръчително /opt/forgejo-runner) и настройте правата:
cd /opt/forgejo-runner
mkdir -p data/.cache
chown -R 1001:1001 data
chmod 775 data/.cache
chmod g+s data/.cache
Засега не се пуска container-ът, а се генерира само конфигурацията:
sudo sh -c 'docker run --rm data.forgejo.org/forgejo/runner:12 forgejo-runner generate-config > data/runner-config.yml'
Регистриране на runner-а в Codeberg
Сега трябва да свържем runner-а с Codeberg. Влизате в настройките на акаунта или организацията, намирате Actions → Runners и създавате нов runner. Тук ще получите UUID и Token, които трябва да записвате веднага — те