С какими инструментами CI/CD и сборки ты работал?

«С какими инструментами CI/CD и сборки ты работал?» — вопрос из категории CI/CD, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моей DevOps-практике я строил пайплайны от коммита до продакшена, используя следующий стек инструментов:

Системы управления пайплайнами (CI/CD):

  • GitLab CI/CD: Основной инструмент. Писал сложные .gitlab-ci.yml файлы с несколькими стадиями (build, test, security-scan, deploy), использовал Docker executor, кэширование артефактов и динамическое окружение.
    stages:
      - build
      - test
      - deploy
    build_image:
      stage: build
      script:
        - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
        - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  • GitHub Actions: Создавал workflow для автоматизации тестов и деплоя на VPS или в облако (AWS).
  • Jenkins: Настраивал мастер-агент архитектуру, пайплайны с использованием Jenkinsfile (Declarative Pipeline), интеграцию с SonarQube и Slack.

Инструменты сборки и упаковки:

  • Docker: Контейнеризация приложений, создание многоступенчатых сборок для уменьшения размера образов.
  • Packer: Сборка предварительно настроенных образов виртуальных машин (AMI для AWS, образы для GCP) с установленным Docker, базовым ПО и конфигурациями.

Инфраструктура как код (IaC):

  • Terraform: Основной инструмент для провиженинга облачной инфраструктуры (AWS VPC, EC2, RDS, S3, IAM). Работал с модулями, remote state (хранил в S3), workspace для разделения сред.
    resource "aws_instance" "app_server" {
      ami           = data.aws_ami.ubuntu.id
      instance_type = "t3.micro"
      tags = {
        Name = "ExampleAppServer"
      }
    }
  • Ansible: Использовал для configuration management: настройка ОС, деплой приложений, управление пользователями и сервисами на уже существующих серверах (в т.ч. и в Kubernetes нодах).