Ответ
CI/CD — это методология и набор практик в разработке ПО, направленные на автоматизацию сборки, тестирования и развертывания приложений. Это позволяет командам выпускать качественный софт быстрее и надёжнее.
CI (Continuous Integration — Непрерывная интеграция)
Это практика частой автоматической интеграции кода от разных разработчиков в общую кодовую базу.
- Цель: Раннее обнаружение конфликтов слияния, ошибок компиляции и багов в тестах.
- Процесс:
- Разработчик отправляет (push) изменения в свою ветку.
- Создает Pull/Merge Request в основную ветку (
main
илиdevelop
). - Система CI автоматически запускает сборку проекта, прогоняет линтеры и юнит-тесты.
- Если все проверки пройдены, код можно безопасно вливать.
CD (Continuous Delivery / Deployment — Непрерывная доставка / развертывание)
Это следующий шаг после CI, который автоматизирует выпуск готового продукта.
-
Цель: Сделать процесс релиза быстрым, надёжным и предсказуемым.
-
Процесс:
- После успешного прохождения CI создаётся артефакт (например, бинарный файл Go или Docker-образ).
- Этот артефакт автоматически развертывается на тестовое (staging) окружение для дальнейшего тестирования (интеграционного, E2E).
-
Continuous Delivery (Непрерывная доставка): После всех тестов релиз в production требует ручного подтверждения (нажатия кнопки).
-
Continuous Deployment (Непрерывная развертывание): Релиз в production происходит полностью автоматически без вмешательства человека, если все этапы пройдены успешно.
Пример простого CI-пайплайна для Go в .github/workflows/ci.yml
:
name: Go CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
# 1. Получаем исходный код
- uses: actions/checkout@v4
# 2. Устанавливаем нужную версию Go
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.21'
# 3. Запускаем тесты
- name: Test
run: go test -v ./...
# 4. Собираем приложение
- name: Build
run: go build -v -o myapp ./cmd/server