С какими инструментами и системами для разработки и DevOps вы работали?

«С какими инструментами и системами для разработки и DevOps вы работали?» — вопрос из категории Софт-скиллы, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый пример ответа, который можно адаптировать под свой опыт.

Ответ

Работал с широким спектром инструментов на всех этапах жизненного цикла разработки (SDLC).

Системы контроля версий (VCS) & Хостинг кода

  • Git — основная VCS.
    # Основные команды рабочего процесса
    git clone <repo-url>          # Клонирование репозитория
    git checkout -b feature/123   # Создание ветки для задачи
    git add .                     # Добавление изменений в индекс
    git commit -m "feat: add order endpoint"
    git push origin feature/123   # Отправка ветки на сервер
    git merge main                # Слияние с основной веткой
    git rebase -i main            # Интерактивный rebase для чистоты истории
  • GitHub / GitLab / Bitbucket — использовались как платформы для хостинга кода, код-ревью (MR/PR) и CI/CD.

Сборка и управление зависимостями

  • Maven — для Java-проектов.
    mvn clean compile    # Очистка и компиляция
    mvn test             # Запуск юнит-тестов
    mvn package          # Сборка JAR/WAR-пакета
    mvn deploy           # Развертывание в артефакт-репозиторий (Nexus)
  • Gradle — для проектов, требующих большей гибкости.
    gradle build
    gradle test

Контейнеризация и оркестрация

  • Docker — создание и управление контейнерами.
    docker build -t my-app:latest .   # Сборка образа
    docker run -p 8080:8080 my-app    # Запуск контейнера
    docker-compose up -d              # Запуск многоконтейнерного приложения
  • Kubernetes (k8s) — оркестрация контейнеров в продакшене.
    kubectl apply -f deployment.yaml  # Развертывание приложения
    kubectl get pods                  # Просмотр состояния подов
    kubectl logs <pod-name>           # Просмотр логов
    kubectl describe pod <pod-name>   # Детальная информация о поде

Непрерывная интеграция и доставка (CI/CD)

  • Jenkins — настройка пайплайнов как в скриптовом (Scripted Pipeline), так и в декларативном стиле.
    // Декларативный Jenkins Pipeline
    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    sh 'mvn clean package'
                }
            }
            stage('Test') {
                steps {
                    sh 'mvn test'
                }
                post {
                    always {
                        junit 'target/surefire-reports/*.xml' // Публикация отчетов
                    }
                }
            }
            stage('Deploy to Staging') {
                steps {
                    sh './deploy.sh staging'
                }
            }
        }
    }
  • GitHub Actions / GitLab CI — использовал для более простых проектов, где CI/CD был описан в виде YAML-файла в репозитории.

Мониторинг и логирование

  • Prometheus — сбор метрик (например, количество HTTP-запросов, время ответа).
  • Grafana — визуализация метрик из Prometheus в дашбордах.
  • ELK Stack (Elasticsearch, Logstash, Kibana) / Loki — агрегация и анализ логов.