CI/CD - это не магия и не очередная модная аббревиатура. Это способ жить и работать, когда ты устал от ручного деплоя и ошибок "на проде".
Представь: ты поправил баг, залил код, а на следующий день выяснилось, что сломалось что-то другое. Знакомо? CI/CD как раз про то, чтобы ловить такие проблемы до того, как они долетят до пользователей.
Расшифровка простая:
Смысл в том, чтобы превратить боль каждого деплоя в рутину. Нажал кнопку - поехало. Или вообще само поехало.
Пайплайн - это последовательность шагов, которые проходит код от коммита до продакшена. Визуально это как конвейер: закинул сырье (код), на выходе получил готовый продукт (работающее приложение).
Вот упрощенная схема того, что происходит внутри:
npm install и npm run build.Выглядит как магия, но на деле это просто скрипты, которые выполняются друг за другом.
Давай возьмем реальный случай. У тебя есть React-приложение. Ты хочешь, чтобы при каждом пуше в main оно собиралось, тестировалось и деплоилось на Vercel или Netlify.
Создай в репозитории файл .github/workflows/deploy.yml:
name: Deploy to Production
on:
push:
branches: [ main ]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run linter
run: npm run lint
- name: Run tests
run: npm test
- name: Build project
run: npm run build
- name: Deploy to Vercel
run: npx vercel --prod --token=${{ secrets.VERCEL_TOKEN }}
Разбираем по шагам:
Секреты (типа токена) хранятся в настройках репозитория GitHub. Никаких паролей в коде.
CI/CD штука полезная, но первые грабли ты соберешь обязательно. Вот что реально важно:
Личный опыт: я пару раз деплоил битую сборку на прод, потому что доверял пайплайну, а он молчал. Оказалось, тесты просто не запускались из-за ошибки в конфиге. Теперь я всегда проверяю, что пайплайн действительно выполнил все шаги.
Если у тебя микросервисы или монолит, который собирается час, CI/CD всё равно нужен. Просто подход меняется:
Пример матрицы в GitHub Actions для тестирования на Node 16, 18 и 20:
strategy:
matrix:
node-version: [16, 18, 20]
steps:
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
Это запустит три параллельных джобы. Экономит кучу времени.
CI/CD - это не про технологии. Это про дисциплину и автоматизацию рутины. Ты перестаешь бояться деплоя по пятницам, перестаешь вручную проверять, всё ли собралось, и начинаешь спать спокойнее.
Начни с малого: добавь линтер и простой билд. Потом докрути тесты. Потом автодеплой на стейджинг. Через месяц ты удивишься, как раньше жил без этого.
Главное - не пытайся внедрить всё и сразу. Построй простой пайплайн, который работает, и постепенно его улучшай. Остальное придет с опытом.
Комментариев пока нет