Какие инструменты CI/CD вы использовали?

Ответ

Основные инструменты:

  • Jenkins: Настройка пайплайнов с использованием Groovy DSL для сборки, тестирования и деплоя.
  • GitHub Actions: Автоматизация запуска тестов и проверок при создании Pull Request.
  • GitLab CI/CD: Конфигурация через .gitlab-ci.yml для простых пайплайнов.
  • TeamCity: Использование в legacy-проектах для управления сборками.

Пример Jenkins pipeline (Declarative Syntax) для запуска тестов:

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'npm run test'
            }
        }
        stage('Build') {
            steps {
                sh 'docker build -t my-app .'
            }
        }
    }
}

Практика: Интеграция с Docker для создания образов и Grafana для мониторинга статуса сборок. Основная цель — автоматизация регрессионного тестирования и деплоя на staging-окружения.

Ответ 18+ 🔞

Э, слушай, давай я тебе на пальцах объясню, как мы эту кухню автоматизации настраиваем, а то сухие термины — это, конечно, пиздец как скучно.

Чем колдуем, блядь:

  • Jenkins: Это наш старый, блядь, верный утюг. На нём такие пайплайны на Groovy пишешь, что мама не горюй. Собирает, тестирует, на стенд выкатывает — всё, как по маслу, если, конечно, он не накрылся вдруг медным тазом.
  • GitHub Actions: Ну это вообще, ёпта, конфетка. Напушил код — и оно само, хитрая жопа, побежало тесты гонять и проверки делать. Красота, а не инструмент.
  • GitLab CI/CD: Для проектов попроще. Кинул в репу файлик .gitlab-ci.yml, и понеслась. Не паришься особо.
  • TeamCity: Это, блядь, из серии "дедушкин топор". В легаси-проектах ещё встречается, но чувствую, его дни сочтены, как терпение у тестировщика перед релизом.

Вот, смотри, как в Jenkins'е простейшую штуку запиливают. Код не трогаю, он и так норм:

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'npm run test'
            }
        }
        stage('Build') {
            steps {
                sh 'docker build -t my-app .'
            }
        }
    }
}

Видишь? Сначала тесты погоняли — если всё ок, не обосрались, тогда уже образ в Docker'е собираем. Элементарно, Ватсон!

А на практике что? Всё это великолепие с Docker'ом дружим, чтобы образы лепились, и в Grafana'у тыкаем, чтобы на красивых графиках смотреть, сколько раз наша сборка, прости господи, упала сегодня. Главная-то цель — чтобы регресс сам бегал, как угорелый, и на тестовый стенд всё само выезжало, без нашего ручного вмешательства. А то знаешь, как бывает: "ой, я забыл запустить", а в итоге — пизда производству. Нам такое не надо.