Рубрика «CICD»

Карго-культ DevOps: чек-лист самопроверки

Карго-культ DevOps: чек-лист самопроверки

Читать полностью »

Как мы перестали копировать .gitlab-ci.yml и спасли пайплайны от хаоса с помощью модулей - 1

Как избежать десятков MR при обновлении пайплайнов и стандартизировать развертывание новых сервисов в GitLab CI? Решение — вынести части пайплайнов в отдельные изолированные модули.

Читать полностью »

Дисклеймер: Данный кейс основан на архитектуре нашего проекта (~2600 файлов). В проектах другого масштаба или с другой структурой зависимости результаты могут отличаться. Это не «серебряная пуля», а мой личный опыт оптимизации конкретной инфраструктуры.

Буду краток, на проекте, где я сейчас работаю, мы с командой заметили огромную проблему со скоростью сборки и весом проекта после билда. Стек у нас React, Next.js, FSD Monorepo.

Изначальный набор инструментов был такой:

Билд

Turbopack

Линтинг

Eslint

Читать полностью »

jscpd-rs: быстрый поиск дублей в коде

jscpd-rs: быстрый поиск дублей в коде

У меня есть ощущение, что мы входим в довольно странный этап разработки.

Читать полностью »

Предыстория

Когда изучаешь DevOps по курсам — всё выглядит просто. Запустил minikube, поднял pod, посмотрел на kubectl get pods — красота. А потом пытаешься сделать что-то настоящее и понимаешь: между “hello world в Kubernetes” и реальной инфраструктурой — пропасть.

Я решил эту пропасть пройти. Взял 5 виртуальных машин на VMware Workstation и построил на них production-ready кластер с нуля. С CI/CD, GitOps, мониторингом, высокой доступностью и реальным приложением.

Расскажу что получилось, как именно это работает — и главное, какие грабли я собрал по дороге. Их было немало.

Окружение:Читать полностью »

Предисловие

Я Михаил — создатель и главный разработчик системы вэб приложений. Второй участник проекта — Владимир — разработчик мобильных версий и ответственный за SEO оптимизацию.

Внутри системы я разработал:

  • Поисковая система, включающая в себя голосовой поиск, поиск по фото и поиск по обычному тексту.

  • Мессенджер с двумя ботами: первый общается с поисковиком, а второй — с микроконтроллером (см. IoT технологии).

Технологии

Этот блок я разделил на 3 части:

  • технологии приложений,

  • серверные технологии,

  • IoT технологии для микроконтроллера.

Читать полностью »

Недавно я внедрил blue-green деплой в проде. Реализация довольно простая и кастомная, но справляется со своей задачей на ура! Также сообщу, что используется обычный докер композ на виртуалке - возможно, кому-то такой подход будет полезен.

Для фоновых процессов (воркеров)

В приложение добавляется специальный инфрастуктурный singleton класс с флагом is_accepting, и обертка на consumers. В каждом консьюмере перед обработкой проверяем этот флаг: если True - обрабатываем задачу, если False - переносим задачу на повторную обработку (например, в rabbitmq делаем сразу nack(requeue=true))

Читать полностью »

Мы хотели сделать простую вещь: после деплоя отправлять уведомление в чат MAX из GitLab CI.

На бумаге задача выглядела почти тривиально:

  • есть MAX_BOT_TOKEN

  • есть MAX_NOTIFY_CHAT_ID

  • есть curl

  • есть POST https://platform-api.max.ru/messages?chat_id=...

Но на практике уведомления не приходили несколько дней. Мы меняли образы, переписывали скрипты, упрощали payload, добавляли диагностику. Результат был один: сообщение не доходило.

Настоящая причина оказалась совсем не там, где мы её искали.


Связанные материалы

Эпоха комфортного программирования подходит к концу. Пока программисты ваших конкурентов потягивают тыквенный латте и вяло ждут окончания медленных пайплайнов, GitCrab превращает ваш репозиторий в суровую экосистему, где выживает только сильнейший.

Большинство CI/CD инструментов помогают вам деплоить. GitCrab заставляет вас бороться.

Читать полностью »

Я Backend разработчик на Python, и в одном из проектов мне понадобилось настроить сборку Docker-образа в GitLab CI/CD. Базовую настройку я сделал без проблем, но я хотел ускорить сборку по максимуму. И здесь я обнаружил Cache mount или кэш-монтирование.


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js