← Назад к вопросам

Как в CI/CD происходила сборка модулей

2.0 Middle🔥 121 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Как в CI/CD происходила сборка модулей

Общая архитектура

В многомодульном Java проекте сборка в CI/CD требует правильной организации зависимостей и грамотной конфигурации build системы. Рассмотрю типичный сценарий с Maven и GitHub Actions.

1. Структура многомодульного проекта

project-root/ ├── pom.xml (parent POM) ├── core-module/ │ ├── pom.xml │ └── src/ ├── web-module/ │ ├── pom.xml │ └── src/ ├── api-module/ │ ├── pom.xml │ └── src/ └── app-module/

    ├── pom.xml
    └── src/

Parent POM (pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>parent-project</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    
    <modules>
        <module>core-module</module>
        <module>api-module</module>
        <module>web-module</module>
        <module>app-module</module>
    </modules>
    
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <spring-boot.version>3.1.0</spring-boot.version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

2. Maven сборка в CI/CD

GitHub Actions pipeline

name: Build and Test

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main, develop ]

jobs:
  build:
    runs-on: ubuntu-latest
    
    strategy:
      matrix:
        java-version: [ '17' ]
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Set up JDK
      uses: actions/setup-java@v3
      with:
        java-version: '17'
        distribution: 'temurin'
        cache: maven
    
    - name: Build all modules
      run: mvn clean install -DskipTests
    
    - name: Run tests
      run: mvn test
    
    - name: Build final artifacts
      run: mvn package -DskipTests

3. Оптимизация сборки

Параллельная сборка модулей

mvn clean install -T 1C

-T 1C означает 1 поток на ядро процессора

Incremental сборка

mvn install -amd -pl core-module,api-module

4. Зависимости между модулями

core-module собирается первым (нет зависимостей) api-module собирается после core (зависит от core) web-module может собираться параллельно с api app-module собирается последним (зависит от всех)

5. Docker для сборки

FROM maven:3.8.6-eclipse-temurin-17 AS builder
WORKDIR /app
COPY . .
RUN mvn clean install -DskipTests

FROM eclipse-temurin:17-jdk-alpine
COPY --from=builder /app/app-module/target/app.jar /app/app.jar
EXPOSE 8080
CMD ["java", "-jar", "/app/app.jar"]

Итого

Сборка многомодульного проекта в CI/CD:

  • Настраивается через Parent POM (Maven) или settings.gradle (Gradle)
  • Автоматически определяется порядок модулей по зависимостям
  • Оптимизируется параллельной сборкой (-T 1C)
  • Кэшируется через actions/setup-java
  • Собранные артефакты загружаются в artifact storage
  • На production используется Docker multi-stage build