1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Drone CI - self-hosted CI/CD

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

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS i serwery

⚡ W skrócie · 8 min czytania

-   Drone CI: instalacja server i runner Docker, konfiguracja OAuth GitHub/Gitea, plik .drone.yml (stages, steps, secrets), porównanie z Jenkins i GitHub Actions.
-   Instalacja Drone Server.
-   Konfiguracja OAuth w Gitea.
-   Plik .drone.yml - pipeline stages i steps.
-   Zarządzanie sekretami.

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.

Contabo

VPS pod Drone CI server + runner - Docker i tanie zasoby

VPS + Docker

[Aktywuj rabat →](/out/contabo/#reklama "Contabo")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo/)

ProSerwer.pl

Polski VPS pod Drone CI - pipeline w Polsce, zgodność z RODO

Polski VPS

[Aktywuj rabat →](/out/proserwer-pl/#reklama "ProSerwer.pl")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/proserwer/)

Mikr.us

Budżetowy VPS dla małych projektów z Drone CI i Gitea

Budżetowy

[Aktywuj rabat →](/out/mikrus/#reklama "Mikr.us")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus/)

## Powiązane strony

-   [Gitea - self-hosted Git server](/baza-wiedzy/gitea-self-hosted-git/)
-   [Jenkins CI/CD na VPS - instalacja i pipeline](/baza-wiedzy/jenkins-cicd-vps/)
-   [Harbor - prywatny rejestr Docker](/baza-wiedzy/harbor-docker-registry/)
-   [Wszystkie artykuły](/baza-wiedzy/)
-   [GitLab Runner self-hosted: konfiguracja i best practices
    
    Instalacja, rejestracja i optymalizacja self-hosted GitLab Runner: shell vs docker executor, stages, artifacts, cache,…
    
    ](/baza-wiedzy/gitlab-runner-self-hosted/)
-   [Mattermost - self-hosted komunikator dla zespołów deweloperskich
    
    Mattermost na VPS: instalacja Docker Compose, konfiguracja SMTP i LDAP, webhooks GitHub/GitLab/Jira, Elasticsearch…
    
    ](/baza-wiedzy/mattermost-self-hosted/)
-   [SonarQube - analiza jakości kodu i wykrywanie błędów
    
    SonarQube Community: instalacja Docker, sonar-project.properties, integracja GitHub Actions i Jenkins, Quality Gates,…
    
    ](/baza-wiedzy/sonarqube-analiza-kodu/)
-   [Jaki VPS wybrać?](/jaki-vps-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 10 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)