Что такое сборка (build) программного приложения?

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

Ответ

Сборка приложения (build) — это автоматизированный процесс преобразования исходного кода, конфигурационных файлов, зависимостей и других артефактов в готовое к выполнению или развёртыванию программное обеспечение (исполняемый файл, пакет, артефакт).

Основные цели:

  1. Воспроизводимость: Исключение ручных ошибок, гарантия идентичного результата на любой машине.
  2. Автоматизация: Объединение множества шагов (компиляция, тестирование, упаковка) в один процесс.
  3. Контроль качества: Включение статического анализа, тестирования и проверок.

Типичный конвейер сборки (build pipeline) для Java-приложения:

graph LR
    A[Исходный код] --> B[Компиляция]
    B --> C[Выполнение тестов]
    C --> D[Упаковка в JAR/WAR]
    D --> E[Создание образа Docker]
    E --> F[Публикация артефакта]

Ключевые этапы и инструменты:

Этап Задача Инструменты (Java-экосистема)
Компиляция Преобразование .java в .class байт-код. javac, Maven Compiler Plugin, Gradle Java Plugin.
Управление зависимостями Загрузка библиотек из репозиториев. Maven, Gradle, Ivy.
Тестирование Запуск модульных и интеграционных тестов. JUnit, TestNG, Surefire/Failsafe plugins.
Упаковка Создание конечного артефакта (JAR, WAR, EAR). Maven Jar/War plugins, Spring Boot Maven Plugin.
Статический анализ Проверка качества кода, поиск уязвимостей. SonarQube, Checkstyle, SpotBugs.

Пример конфигурации сборки в pom.xml (Maven):

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.1.2</version>
            </plugin>
        </plugins>
    </build>
</project>

Интеграция с CI/CD: Современные системы непрерывной интеграции (Jenkins, GitLab CI, GitHub Actions) автоматически запускают процесс сборки при каждом изменении кода в репозитории.