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

Ответ

Работал с широким спектром инструментов на всех этапах жизненного цикла разработки (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 — агрегация и анализ логов.

Ответ 18+ 🔞

А, ну ты глянь, какие у меня тут инструменты понапиханы, как в гараже у нормального мужика. Весь этот жизненный цикл разработки, этот ваш SDLC, я его, блядь, вдоль и поперёк облазил. Сейчас расскажу, как оно всё крутится, только без соплей и маркетинговой хуйни.

Системы контроля версий, или где код живёт Ну, Git, само собой, царь и бог. Без него нихуя. Вся работа в нём и крутится.

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            # А это чтоб историю подчистить, убрать все свои "ой, бля, забыл"

А где этот код лежит? Да где угодно: GitHub, GitLab, Bitbucket. Главное — там же и ревьювить, эти ваши Merge Request'ы и Pull Request'ы, и CI/CD цеплять.

Сборка проекта, или "собери мне вот это" Для джавистов — Maven. Старый, добрый, предсказуемый, как удар тапком.

mvn clean compile    # Вычистил всё старое и скомпилил
mvn test             # Прогнал тесты, авось не посыпется
mvn package          # Упаковал в JAR, типа "вот, готовый продукт"
mvn deploy           # И отправил это добро в Nexus, чтоб другие тоже могли скачать и охуеть

А если проект похитрее, где Maven мозги выносит своей XML-пиздой, то Gradle. Там уже поприкольнее.

gradle build
gradle test

Контейнеры, или "а давайте завернём всё в коробочку" Docker — это ж классика. Чтоб у всех всё одинаково поднималось, а не как обычно: "у меня работает".

docker build -t my-app:latest .   # Собираем образ из Dockerfile. "Последняя версия", ага.
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>           # Ага, этот сдох потому что в логах "NullPointerException, блядь"
kubectl describe pod <pod-name>   # А тут уже детальная аутопсия, что же с ним случилось

CI/CD, или "автоматизируй это, ёпта" Jenkins — монстр, но свой. На нём можно такие пайплайны написать, что мама не горюй.

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. Там прямо в репозитории YAML-файлик, и всё само бегает. Красота, ебать.

Мониторинг и логи, или "а что это у нас тут пахнет пиздецом?" Когда всё уже работает, надо следить, чтоб не развалилось.

  • Prometheus — этот чудик постоянно тырит метрики: сколько запросов, сколько времени отвечаем, сколько памяти жрём.
  • Grafana — а тут уже эти метрики рисуются красивыми графиками. Сидишь, смотришь, как линия идёт вверх, и думаешь: "Ну всё, щас трафик накроет".
  • ELK Stack (Elasticsearch, Logstash, Kibana) — а это целая банда для логов. Собирает логи со всех сервисов, фильтрует и позволяет искать. Ищешь, например, "error" и находишь, блядь, 500 тысяч записей за последние пять минут. Вот и начинается весёлый день.
  • Loki — как ELK, только от Grafana и попроще. Для тех, кому Elasticsearch — это слишком жирно.

Вот примерно так, ёпта. Инструментов дохуя, но если знать, за какой хвост тянуть, то жить можно. Главное — не запутаться во всём этом и не начать деплоить в прод в пятницу вечером. Это, блядь, отдельная история.