Slide 1

Slide 1 text

Поднимаем свой CI/CD Gitea + Drone

Slide 2

Slide 2 text

О чём поговорим: • Зачем тратить время на свою инфраструктуру, почему бы просто не взять готовое? • Какие вообще существуют варианты? • Поднимем свои инстансы Gitea и Drone • Настроим Android-приложение 2

Slide 3

Slide 3 text

Зачем держать свою инфраструктуру? • Стоимость • Гибкость • Безопасность 4

Slide 4

Slide 4 text

Зачем держать свою инфраструктуру? 5 SaaS Self-hosted Стоимость ежемесячная зависит от использования (или фиксированная) стоимость железа + стоимость поддержки Гибкость ограничена сервисом (железо, доступные интеграции, телефоны/эмуляторы, …) ограничена временем/фантазией/ бюджетом Безопасность 2FA настройки доступа ограниченные логи зависит

Slide 5

Slide 5 text

Зачем держать свою инфраструктуру? 6 SaaS Self-hosted Стоимость Гибкость Безопасность (очень субъективная оценка для команд из <10 человек)

Slide 6

Slide 6 text

Какие вообще есть варианты? 7

Slide 7

Slide 7 text

CI/CD Что вообще от них нужно? • Реагировать на какой-то триггер • Выполнять последовательность действий • Упрощать некоторые из этих действий: • Нотификации • Хранение результатов • Публикация 8

Slide 8

Slide 8 text

Travis CI • SaaS • Бесплатный план: 10000 кредитов (за минуту – 10/Linux, 20/Windows, 50/macOS) • Цена: от $69/месяц за 1 параллельную сборку • Интеграция: GitHub, Bitbucket, Gitlab • Конфигурация: yaml 9

Slide 9

Slide 9 text

Circle CI • SaaS / enterprise • Бесплатный план SaaS: 2500 кредитов/неделя (10/Linux, 20/Windows, 50/macOS) • Цена SaaS: от $30/месяц • Интеграция: GitHub, Bitbucket • Конфигурация: yaml 10

Slide 10

Slide 10 text

Bitrise CI • SaaS • Бесплатный план: 2500 кредитов/неделя (10/ Linux, 20/Windows, 50/macOS) • Цена: от $40/месяц за 2 человек в команде и 1 параллельную сборку • Интеграция: GitHub, Gitlab, Bitbucket (+ SSO на платных планах) • Конфигурация: yaml + GUI • Только мобильные приложения 11

Slide 11

Slide 11 text

GitHub Actions • SaaS / enterprise • Бесплатный план SaaS: 2000 кредитов/месяц (1/ Linux, 2/Windows, 10/macOS) • Цена SaaS: от $19/месяц • Интеграция: любой Git-сервер • Конфигурация: yaml • Можно добавить свой runner бесплатно • Доступен enterprise вариант 12

Slide 12

Slide 12 text

Gitlab CI • SaaS / opensource self-hosted / enterprise • Бесплатный план SaaS: 400 минут/месяц • Цена SaaS: от $19/месяц • Интеграция: любой Git-сервер • Конфигурация: yaml • в SaaS доступны только Linux runner’ы • но можно добавить свой runner • Selfhosted довольно тяжёлый: 6-8 Gb RAM 13

Slide 13

Slide 13 text

TeamCity • enterprise • Бесплатный план: 3 runner’а и 100 конфигураций • Цена: $299/runner на год, либо entreprise лицензия от $1999/год • Интеграция: любая VCS • Конфигурация: Kotlin DSL + GUI 14

Slide 14

Slide 14 text

Jenkins • opensource, MIT • Интеграция: любая VCS • Конфигурация: Groovy DSL + GUI • Монстроузность создает проблемы: • Больно поддерживать • Поощряет плохие привычки 15

Slide 15

Slide 15 text

Drone СI • SaaS / personal / enterprise • Бесплатный план SaaS: доступен для opensource проектов • Цена SaaS: только enterprise • Интеграция: GitHub, Bitbucket, Gitea • Конфигурация: yaml (+ starlark, jsonnet) • и сам сервер, и runner – opensource с собственной лицензией • минималистичны • не требуют много ресурсов 16

Slide 16

Slide 16 text

Поднимаем свою инфраструктуру 17

Slide 17

Slide 17 text

Где держать? • где-то у себя • AWS / Azure / GCP • Hetzner • DigitalOcean • Linode 18

Slide 18

Slide 18 text

Контейнеры • Легче обновлять и поддерживать • Очень удобны для СI 19

Slide 19

Slide 19 text

Контейнеры 20 Железо ОС Ядро Приложения

Slide 20

Slide 20 text

Контейнеры 21 Железо ОС Ядро Приложения ОС Ядро Приложения Виртуальная машина

Slide 21

Slide 21 text

Контейнеры 22 Железо ОС Ядро Приложения

Slide 22

Slide 22 text

Контейнеры 23 Железо ОС Ядро Приложения Приложения 1 Приложения 2 Контейнер Контейнер

Slide 23

Slide 23 text

Docker • Просто позволяет разворачивать, упаковать и дистрибутировать контейнеры • Дефолтные настройки для контейнера не дадут сделать что-то очень плохое • меняя что-то лучше понимать какой эффект от этого будет • Чтобы упростить поддержку/развертывание есть Docker Compose 24

Slide 24

Slide 24 text

Docker Compose 25 docker run \ --volume=/var/lib/drone:/data \ --env=DRONE_GITEA_SERVER={{DRONE_GITEA_SERVER}} \ --env=DRONE_GITEA_CLIENT_ID={{DRONE_GITEA_CLIENT_ID}} \ --env=DRONE_GITEA_CLIENT_SECRET={{DRONE_GITEA_CLIENT_SECRET}} \ --env=DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} \ --env=DRONE_SERVER_HOST={{DRONE_SERVER_HOST}} \ --env=DRONE_SERVER_PROTO={{DRONE_SERVER_PROTO}} \ --publish=80:80 \ --publish=443:443 \ --restart=always \ --detach=true \ --name=drone \ drone/drone:1

Slide 25

Slide 25 text

Docker Compose 26 version: "3" services: drone: image: drone/drone:latest restart: always volumes: - ./data:/var/lib/drone/ ports: - "80:80" - "443:443" environment: - DRONE_GITEA_SERVER={{DRONE_GITEA_SERVER}} - DRONE_GITEA_CLIENT_ID={{DRONE_GITEA_CLIENT_ID}} - DRONE_GITEA_CLIENT_SECRET={{DRONE_GITEA_CLIENT_SECRET}} - DRONE_RPC_SECRET={{DRONE_RPC_SECRET}} - DRONE_SERVER_HOST={{DRONE_SERVER_HOST}} - DRONE_SERVER_PROTO={{DRONE_SERVER_PROTO}}

Slide 26

Slide 26 text

Что дальше? • Бэкапы • Единая БД: PostgreSQL, MySQL, … • Привести в человеческий вид: • traefik, ngingx + nginx proxy manager, Caddy, … • Сделать внутреннюю сеть: • Wireguard, OpenVPN, Unbound, … • Мониторинг: • Grafana, Prometheus, Graylog, … • … 31

Slide 27

Slide 27 text

https://tinyurl.com/ab-digitalocean 32