leafleafleafDocy banner shape 01Docy banner shape 02Man illustrationFlower illustration

Jenkinsfile: Настройка CI/CD pipeline для backend и frontend в monorepo

Время чтения: 1 мин. 70 просмотров

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:

  1. На главной странице Jenkins нажимаем Создать Item;
  2. Вводим имя приложения;
  3. Выбираем Multibranch Pipeline.
Jenkins multibranch pipeline
  1. В разделе Source Branch указываем Git-репозиторий, где находится Jenkinsfile.
  2. При необходимости настраиваем доступ к репозиторию (логин/токен).

После этого Jenkins сам найдёт Jenkinsfile в ветках репозитория и начнёт автоматически запускать сборки.

Leave a Comment

Поделиться этой страницей

Jenkinsfile: Настройка CI/CD pipeline для backend и frontend в monorepo

Или скопируйте ссылку

СОДЕРЖИМОЕ