Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Поднимаем свой CI/CD: Gitea + Drone. Григорий ...

Поднимаем свой CI/CD: Gitea + Drone. Григорий Джанелидзе

Слайды к видео https://youtu.be/diDO4q-OqZs

Android Broadcast

March 10, 2021
Tweet

More Decks by Android Broadcast

Other Decks in Programming

Transcript

  1. О чём поговорим: • Зачем тратить время на свою инфраструктуру,

    почему бы просто не взять готовое? • Какие вообще существуют варианты? • Поднимем свои инстансы Gitea и Drone • Настроим Android-приложение 2
  2. Зачем держать свою инфраструктуру? 5 SaaS Self-hosted Стоимость ежемесячная зависит

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

    (очень субъективная оценка для команд из <10 человек)
  4. CI/CD Что вообще от них нужно? • Реагировать на какой-то

    триггер • Выполнять последовательность действий • Упрощать некоторые из этих действий: • Нотификации • Хранение результатов • Публикация 8
  5. Travis CI • SaaS • Бесплатный план: 10000 кредитов (за

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

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

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

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

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

    конфигураций • Цена: $299/runner на год, либо entreprise лицензия от $1999/год • Интеграция: любая VCS • Конфигурация: Kotlin DSL + GUI 14
  11. Jenkins • opensource, MIT • Интеграция: любая VCS • Конфигурация:

    Groovy DSL + GUI • Монстроузность создает проблемы: • Больно поддерживать • Поощряет плохие привычки 15
  12. Drone СI • SaaS / personal / enterprise • Бесплатный

    план SaaS: доступен для opensource проектов • Цена SaaS: только enterprise • Интеграция: GitHub, Bitbucket, Gitea • Конфигурация: yaml (+ starlark, jsonnet) • и сам сервер, и runner – opensource с собственной лицензией • минималистичны • не требуют много ресурсов 16
  13. Где держать? • где-то у себя • AWS / Azure

    / GCP • Hetzner • DigitalOcean • Linode 18
  14. Docker • Просто позволяет разворачивать, упаковать и дистрибутировать контейнеры •

    Дефолтные настройки для контейнера не дадут сделать что-то очень плохое • меняя что-то лучше понимать какой эффект от этого будет • Чтобы упростить поддержку/развертывание есть Docker Compose 24
  15. 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
  16. 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}}
  17. Что дальше? • Бэкапы • Единая БД: PostgreSQL, MySQL, …

    • Привести в человеческий вид: • traefik, ngingx + nginx proxy manager, Caddy, … • Сделать внутреннюю сеть: • Wireguard, OpenVPN, Unbound, … • Мониторинг: • Grafana, Prometheus, Graylog, … • … 31