Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Drone CI — lekki self-hosted CI/CD dla projektów Git

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS i serwery

GitHub Actions jest wygodne, ale każde uruchomienie pobiera minuty z puli i każde zużycie kosztuje przy prywatnych repozytoriach. Jenkins jest potężny, ale rozbudowany — kilkaset MB JAR, Groovy DSL i dziesiątki wtyczek do skonfigurowania. Drone CI to złoty środek: kontenerowy CI/CD w Go, konfigurowany jednym plikiem YAML, działający na VPS za kilkanaście złotych. Ten artykuł przeprowadza przez instalację Drone Server i Docker Runner, integrację z Gitea przez OAuth, definiowanie pipeline .drone.yml i zarządzanie sekretami.

Instalacja Drone Server

Drone Server i Runner uruchamiamy przez Docker Compose. Server obsługuje UI, API i webhooki z repozytorium Git. Runner pobiera zadania z Servera i wykonuje je w kontenerach Docker.

# docker-compose.yml
version: "3.9"

services:
  drone-server:
    image: drone/drone:2
    container_name: drone-server
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./drone-data:/data
    environment:
      # Gitea OAuth (patrz nizej jak uzyskac)
      - DRONE_GITEA_SERVER=https://git.example.com
      - DRONE_GITEA_CLIENT_ID=GITEA_OAUTH_CLIENT_ID
      - DRONE_GITEA_CLIENT_SECRET=GITEA_OAUTH_CLIENT_SECRET
      # Konfiguracja serwera
      - DRONE_RPC_SECRET=losowy-secret-min-32-znaki
      - DRONE_SERVER_HOST=drone.example.com
      - DRONE_SERVER_PROTO=https
      # Opcjonalnie: tylko wybrani admini
      - DRONE_USER_FILTER=myuser,teamuser

  drone-runner:
    image: drone/drone-runner-docker:1
    container_name: drone-runner
    restart: unless-stopped
    depends_on:
      - drone-server
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_PROTO=http
      - DRONE_RPC_HOST=drone-server
      - DRONE_RPC_SECRET=losowy-secret-min-32-znaki
      - DRONE_RUNNER_CAPACITY=2      # max 2 rownoczesne pipeline
      - DRONE_RUNNER_NAME=vps-runner

Konfiguracja OAuth w Gitea

Drone loguje użytkowników przez OAuth z serwera Git. W Gitea tworzysz Application OAuth2 w ustawieniach konta lub (jako admin) globalnie.

# W Gitea UI:
# Settings → Applications → OAuth 2.0 Applications → Create OAuth2 Application
# Application Name: Drone CI
# Redirect URI: https://drone.example.com/login
# Kliknij "Create Application"
# Skopiuj Client ID i Client Secret → wklej do docker-compose.yml

# Dla GitHub zamiast Gitea:
# github.com → Settings → Developer Settings → OAuth Apps → New OAuth App
# Homepage URL: https://drone.example.com
# Authorization callback URL: https://drone.example.com/login
# Zamien DRONE_GITEA_* na DRONE_GITHUB_CLIENT_ID i DRONE_GITHUB_CLIENT_SECRET

# Uruchom Drone
docker compose up -d
# Otwórz https://drone.example.com → zaloguj sie przez Gitea OAuth

Plik .drone.yml — pipeline stages i steps

Pipeline definiujesz w pliku .drone.yml w root repozytorium. Każdy step wykonuje się w oddzielnym kontenerze Docker — możesz używać dowolnego obrazu z Docker Hub lub prywatnego rejestru Harbor.

---
kind: pipeline
type: docker
name: default

# Trigger: tylko na push do main i PR
trigger:
  branch:
    - main
    - develop
  event:
    - push
    - pull_request

steps:
  # Step 1: instalacja zależności
  - name: install
    image: node:20-alpine
    commands:
      - npm ci

  # Step 2: testy (równolegle z lintem po zainstalowaniu)
  - name: test
    image: node:20-alpine
    depends_on:
      - install
    commands:
      - npm test

  # Step 3: lint (równolegle z testem)
  - name: lint
    image: node:20-alpine
    depends_on:
      - install
    commands:
      - npm run lint

  # Step 4: build i push do Harbor (tylko main)
  - name: docker-build
    image: plugins/docker
    depends_on:
      - test
      - lint
    settings:
      registry: harbor.example.com
      repo: harbor.example.com/myproject/myapp
      tags:
        - latest
        - ${DRONE_COMMIT_SHA:0:8}
      username:
        from_secret: harbor_user
      password:
        from_secret: harbor_password
    when:
      branch:
        - main
      event:
        - push

  # Step 5: deploy przez SSH (tylko main)
  - name: deploy
    image: appleboy/drone-ssh
    depends_on:
      - docker-build
    settings:
      host: prod.example.com
      username: deploy
      key:
        from_secret: ssh_deploy_key
      script:
        - docker pull harbor.example.com/myproject/myapp:latest
        - docker compose -f /opt/myapp/docker-compose.yml up -d myapp
    when:
      branch:
        - main
      event:
        - push

Zarządzanie sekretami

# Instalacja Drone CLI
curl -L https://github.com/harness/drone-cli/releases/latest/download/drone_linux_amd64.tar.gz \
  | tar zx
sudo mv drone /usr/local/bin/drone

# Konfiguracja CLI (token z Settings → User → API Keys)
export DRONE_SERVER=https://drone.example.com
export DRONE_TOKEN=twoj-token-api

# Dodaj sekrety (dla konkretnego repozytorium)
drone secret add --repository owner/myapp --name harbor_user --data robot\$ci
drone secret add --repository owner/myapp --name harbor_password --data ROBOT_TOKEN
drone secret add --repository owner/myapp --name ssh_deploy_key --data @/path/to/id_rsa

# Secrets globalne (dla wszystkich repo organizacji)
drone orgsecret add myorg harbor_user robot\$ci

# Lista sekretów
drone secret ls --repository owner/myapp

Porównanie Drone CI vs Jenkins vs GitHub Actions

Cecha Drone CI Jenkins GitHub Actions
Min. RAM 256 MB (server) 512 MB (JVM) N/A (SaaS)
Koszt dla prywatnych repo Koszt VPS Koszt VPS $4/msc (2000 min free)
Format konfiguracji YAML (.drone.yml) Groovy (Jenkinsfile) YAML (.github/workflows/)
Izolacja kroków Każdy step = kontener Agenci, węzły, Docker Każdy job = VM lub kontener
Trudność setup Łatwa (Docker Compose) Średnia (wiele wtyczek) Brak (SaaS)
Marketplace wtyczek Drone Plugins (~100) Jenkins Plugins (1900+) GitHub Marketplace (20k+)
Zgodność z GitHub Actions Nie Nie Tak (natywne)

Najczęstsze pytania

Czym jest Drone CI i czym się różni od Jenkins? +
Drone CI to lekki, kontenerowy CI/CD napisany w Go. Każdy krok pipeline wykonuje się w oddzielnym kontenerze Docker — brak globalnych wtyczek, pełna izolacja, deterministyczne środowisko. Jenkins to dojrzalsze narzędzie z bogatszym ekosystemem wtyczek i GUI, ale wymaga więcej zasobów (JVM) i konfiguracji. Drone jest prostszy w setup i idealny dla małych i średnich projektów, Jenkins lepszy dla złożonych enterprise pipeline.
Jak Drone CI zarządza sekretami? +
Drone Secrets to zmienne środowiskowe zaszyfrowane w bazie Drone Server. Definiujesz je przez UI (Settings → Secrets) lub CLI (drone secret add). W .drone.yml odwołujesz się przez from_secret: nazwa_sekretu. Sekrety można ograniczyć do konkretnych zdarzeń (np. tylko dla push do main) i repozytoriów. Drone nie loguje wartości sekretów — nawet w debug mode pojawiają się jako ****.
Czy Drone CI działa z Gitea i GitLab? +
Tak — Drone ma oficjalne integracje przez OAuth dla: GitHub, GitLab, Gitea, Gogs i Bitbucket. Konfiguracja wymaga stworzenia OAuth Application na serwerze Git i przekazania client_id + client_secret do Drone Server. Po zalogowaniu przez OAuth użytkownicy widzą tylko swoje repozytoria i mogą aktywować CI jednym kliknięciem.
Co to jest Drone Runner i ile ich potrzeba? +
Drone Runner to agent, który faktycznie wykonuje pipeline. Drone Server tylko przyjmuje webhooki i kolejkuje zadania. Runnerów może być wiele — na różnych maszynach lub na tej samej (z różnymi limitami równoczesnych zadań). Drone oferuje kilka typów runnerów: Docker Runner (najpopularniejszy), SSH Runner (wykonuje komendy przez SSH na serwerze docelowym), Exec Runner (natywnie na hoście) i Kubernetes Runner.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.