📄 Drone CI
1. Общее описание
Drone — это современная система непрерывной интеграции (CI) с открытым исходным кодом, полностью построенная на контейнерах Docker. Она позволяет автоматизировать сборку, тестирование и деплой приложений через простую конфигурацию в файле .drone.yml
.
Основные особенности:
- Полностью построена на Docker.
- Поддержка GitHub, GitLab, Gitea, Bitbucket и других SCM.
- Простая YAML-ориентированная конфигурация.
- Возможность self-hosted.
- Поддержка плагинов, матричных билдов, условий и секретов.
- Бесплатна и открыта (есть коммерческая версия — Drone Enterprise).
2. Архитектура Drone
Компонент | Описание |
---|---|
Server | Основной сервер Drone, который обрабатывает события из репозитория и запускает пайплайны. |
Runner | Агент, который выполняет этапы пайплайна внутри контейнеров. Может быть разных типов: docker , exec , kubernetes . |
Repository | Источник кода (например, GitHub), где находится проект и .drone.yml . |
Pipeline | Последовательность шагов, описанных в .drone.yml , которые Drone запускает после коммита или пула реквеста. |
3. Основные понятия
Термин | Определение |
---|---|
Pipeline | Последовательность команд, разделённых на этапы. |
Step | Отдельный этап выполнения в pipeline. Каждый step — это отдельный Docker-контейнер. |
Secret | Защищённая переменная окружения, доступная только в runtime. |
Environment Variable | Переменная окружения, передаваемая в контейнер. |
Plugin | Преднастроенный Docker-образ для распространённых задач (например, уведомления, деплой). |
Matrix Build | Параллельное выполнение одного pipeline с разными параметрами. |
Trigger | Условие, при котором запускается pipeline (ветка, событие, пользователь). |
4. Установка и настройка
4.1 Установка сервера Drone
Пример установки через Docker:
docker run \
--volume=/var/lib/drone:/data \
--env=DRONE_GITHUB_CLIENT_ID=your_client_id \
--env=DRONE_GITHUB_CLIENT_SECRET=your_secret \
--env=DRONE_RPC_SECRET=your_rpc_secret \
--env=DRONE_SERVER_HOST=drone.example.com \
--env=DRONE_SERVER_PROTO=https \
--publish=80:80 \
--publish=443:443 \
--restart=always \
--detach \
drone/drone:latest
4.2 Настройка Runner (Docker)
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DRONE_RPC_URL=http://drone-server \
-e DRONE_RPC_SECRET=your_rpc_secret \
-p 3000:3000 \
--restart always \
drone/drone-runner-docker
4.3 Интеграция с GitHub
Создайте OAuth App в GitHub:
- Homepage URL: https://drone.example.com
- Authorization callback URL: https://drone.example.com/login
Используйте полученные client_id
и client_secret
в конфиге сервера.
5. Конфигурационный файл .drone.yml
Это главный файл, управляющий поведением Drone. Он должен находиться в корне репозитория.
Пример базового pipeline
kind: pipeline
type: docker
name: default
steps:
- name: build
image: golang:1.21
commands:
- go mod download
- go test ./...
Матричная сборка
matrix:
GO_VERSION:
- "1.19"
- "1.20"
- "1.21"
steps:
- name: build
image: golang:${GO_VERSION}
commands:
- go mod download
- go test ./...
Плагины
Пример отправки уведомления в Slack:
- name: notify slack
image: plugins/slack
settings:
webhook: https://hooks.slack.com/services/...
channel: general
username: drone
6. Управление секретами
Секреты можно добавлять через CLI или UI.
Пример через интерфейс:
- Перейдите в настройки репозитория в Drone.
- Добавьте секрет, например:
- Name:
API_KEY
- Value:
my-secret-key
Использование секрета в .drone.yml
:
steps:
- name: deploy
image: alpine
environment:
API_KEY:
from_secret: API_KEY
commands:
- echo $API_KEY
7. Работа с условиями
Вы можете фильтровать запуск пайплайнов по различным условиям:
when:
branch:
- main
event:
- push
Можно использовать:
- branch
: указывает, какие ветки триггерят билд.
- event
: какие события (push
, pull_request
, tag
и т.д.).
- environment
: для фильтрации по средам.
8. Best Practices
- Храните
.drone.yml
в репозитории. - Используйте матричные билды для тестирования под разные версии.
- Не храните секреты в конфиге — используйте систему Secrets.
- Разбивайте pipeline на логические шаги.
- Используйте кэширование (через volume) для зависимостей.
- Для сложных сценариев используйте собственные Docker-образы.
9. Полезные ссылки
- Официальный сайт Drone
- Документация Drone
- GitHub репозиторий Drone
- Drone Plugins Registry
- Установка Runner'ов
- Drone CLI
10. FAQ
❓ Можно ли использовать Drone без Docker?
Да, есть
exec
runner, который работает без Docker, но тогда теряется изоляция окружений.
❓ Как проверить конфигурацию .drone.yml
локально?
Используйте Drone CLI:
drone exec
❓ Как запустить билд вручную?
В UI нажмите кнопку "Rebuild", или используйте API.
❓ Поддерживает ли Drone Windows?
Ограниченная поддержка через Kubernetes runner.