Ответ
Современный CI/CD пайплайн для Go-приложения обычно автоматизирует сборку, тестирование и развертывание. Он состоит из следующих этапов:
1. CI (Continuous Integration) — Непрерывная интеграция
- Триггер: Push в систему контроля версий (Git: GitHub, GitLab).
- Шаги:
- Линтинг и форматирование: Проверка кода на соответствие стилю (
golangci-lint
,gofmt
). - Тестирование: Запуск юнит- и интеграционных тестов (
go test -race ./...
). Флаг-race
важен для обнаружения состояний гонки. - Сборка: Компиляция бинарного файла (
go build
). - Сборка Docker-образа: Создание легковесного образа, часто с использованием multi-stage builds для минимизации размера.
- Линтинг и форматирование: Проверка кода на соответствие стилю (
# Этап сборки
FROM golang:1.21-alpine as builder
WORKDIR /app
COPY . .
RUN go build -o myapp ./cmd/main.go
# Финальный этап
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp .
CMD ["./myapp"]
2. CD (Continuous Deployment/Delivery) — Непрерывная доставка/развертывание
- Триггер: Успешное завершение CI-пайплайна.
- Шаги:
- Публикация артефактов: Загрузка Docker-образа в реестр (Docker Hub, AWS ECR, GCP GCR).
- Развертывание (Deploy): Доставка приложения на целевую платформу.
Популярные цели для развертывания:
- Kubernetes: Наиболее частый выбор для микросервисов. Управление деплоем происходит через
kubectl
, Helm (пакетный менеджер для k8s) или Kustomize. - Serverless: Платформы вроде AWS Lambda или Google Cloud Functions. Требует специальной упаковки кода.
- Виртуальные/Физические серверы: Управление через
systemd
, а Nginx часто используется как reverse-proxy.
Инструменты для автоматизации: GitHub Actions, GitLab CI/CD, Jenkins.