Jenkinsfile: Настройка CI/CD pipeline для backend и frontend в monorepo Время чтения: 1 мин. 71 просмотров Jenkins – это один из самых популярных инструментов для автоматизации CI/CD. Он позволяет автоматически собирать, тестировать и доставлять приложения при каждом изменении кода. Jenkins легко расширяется плагинами и поддерживает практически любой стек технологий. Ключевая особенность современного Jenkins – Pipeline as Code. Логика сборки и деплоя описывается в виде кода и хранится прямо в репозитории проекта. Для этого используется файл Jenkinsfile, который делает процесс сборки прозрачным, воспроизводимым и версионируемым вместе с кодом приложения. Что такое Jenkinsfile Jenkinsfile – это текстовый файл (обычно без расширения), который размещается в корне Git-репозитория и описывает pipeline на декларативном или скриптовом синтаксисе.В нашем случае репозиторий содержит monorepo:в каталоге backend – бэкенд-приложение на Java, собираемое с помощью Maven;в каталоге frontend – фронтенд-приложение на Node.js.Один Jenkinsfile управляет сборкой сразу обеих частей проекта: последовательно выполняется сборка и тестирование бэкенда, сборка фронтенда, после чего готовые результаты сохраняются в виде артефактов. При успешном завершении pipeline дополнительно отправляется уведомление в Telegram, что позволяет оперативно узнать о статусе сборки без захода в Jenkins. Создание Jenkinsfile Для начала создаём файл Jenkinsfile в корне репозитория. pipeline { agent any // Используем любой доступный Jenkins-агент triggers { pollSCM('H/5 * * * *') // Jenkins будет проверять репозиторий на изменения примерно раз в 5 минут } tools { maven 'maven-3.8.1' // Maven для сборки backend nodejs 'node-16' // Node.js для сборки frontend } stages { stage('Build & Test backend') { steps { dir("backend") { // Переходим в каталог backend sh 'mvn package' // Сборка и тесты Maven } } post { success { junit 'backend/target/surefire-reports/**/*.xml' // Передаём результаты unit-тестов в Jenkins } } } stage('Build frontend') { steps { dir("frontend") { // Переходим в каталог frontend sh 'npm install' // Установка зависимостей sh 'npm run build' // Сборка фронтенда } } } stage('Save artifacts') { steps { // Сохраняем артефакты сборки archiveArtifacts(artifacts: 'backend/target/application-0.0.1-SNAPSHOT.jar') archiveArtifacts(artifacts: 'frontend/dist/frontend/*') } post { success { // Уведомление о успешной сборке sh """ curl -X POST https://api.telegram.org/botXXXXX:XXXXXXXXXX/sendMessage \ -H 'Content-Type: application/json' \ -d '{"chat_id": "XXXXXXXX", "text": "Приложение собрано"}' """ } } } } } Структура pipeline: agent – определяет, где будет выполняться сборка;triggers – автоматический запуск pipeline (в данном случае по опросу Git);tools – версии инструментов, установленные в Jenkins (требуется maven);stages – этапы сборки:сборка и тестирование backend;сборка frontend;сохранение артефактов и отправка уведомления. Создание pipeline в Jenkins После добавления Jenkinsfile в репозиторий необходимо создать pipeline в Jenkins:На главной странице Jenkins нажимаем Создать Item;Вводим имя приложения;Выбираем Multibranch Pipeline. В разделе Source Branch указываем Git-репозиторий, где находится Jenkinsfile.При необходимости настраиваем доступ к репозиторию (логин/токен). После этого Jenkins сам найдёт Jenkinsfile в ветках репозитория и начнёт автоматически запускать сборки.