CI/CD сборка Maven

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ рассмотрСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ настройки CI/CD для сборки Java-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Maven.

Для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ сцСнария ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° maven-build Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ CICD_building_projects (см. Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ gitverse_tutorials/CICD_building_projects, Π²Π΅Ρ‚ΠΊΠ° maven-build).

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия

  1. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CICD_building_projects.
  2. УстановитС Java Development Kit (JDK). На Ubuntu:
sudo apt update
sudo apt install default-jdk

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ компилятор Java установлСн:

javac -version
  1. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Ρ€Π°Π½Π½Π΅Ρ€ GitVerse ΠΈ сдСлайтС Ρ„Π°ΠΉΠ» исполняСмым:
chmod +x act_runner
  1. УстановитС Docker (Ссли Π΅Ρ‰Π΅ Π½Π΅ установлСн).
  2. Π’ настройках созданного рСпозитория Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ CI/CD, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ Запросы Π½Π° слияниС.
  3. УстановитС Apache Maven. На Ubuntu:
sudo apt update
sudo apt install maven

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ установку:

mvn -version

Π”ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒΡΡ информация ΠΎ вСрсии Maven ΠΈ срСдС Java.

HelloWorld.java

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ src/main/java/ru/gitverse/tutorials/helloworld Ρ„Π°ΠΉΠ» HelloWorld.java со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ содСрТимым:

package ru.gitverse.tutorials.helloworld;
 
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ запуск Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:

java src/main/java/ru/gitverse/tutorials/helloworld/HelloWorld.java

Π’ консоли Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Hello, World!.

pom.xml

pom.xml β€” Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Maven, Π³Π΄Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: groupId, artifactId, version, зависимости ΠΈ Ρ‚.Π΄.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>ru.gitverse.tutorials</groupId>
    <artifactId>hello-world-module</artifactId>
    <version>0.0.1</version>
    <packaging>jar</packaging>
    <repositories>
        <repository>
            <id>gitverse</id>
            <url>https://gitverse.ru/api/packages/author/maven/</url>
        </repository>
    </repositories>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <distributionManagement>
        <repository>
            <id>gitverse</id>
            <url>https://gitverse.ru/api/packages/author/maven/</url>
        </repository>
        <snapshotRepository>
            <id>gitverse</id>
            <url>https://gitverse.ru/api/packages/author/maven/</url>
        </snapshotRepository>
    </distributionManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>ru.gitverse.tutorials.helloworld.HelloWorld</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Для ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π±ΠΎΡ€Π° pom.xml см. ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ создания Maven-ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ GitVerse.

Π€Π°ΠΉΠ» pipeline: javaMavenBuildDemo.yaml

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» javaMavenBuildDemo.yaml Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ .gitverse/workflows/ вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – это конфигурация CI/CD, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ сборку Maven.

Код Ρ„Π°ΠΉΠ»Π°:

name: Установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° Maven
on:
  push:
jobs:
  build-test:
    name: Maven Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3 # ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΊΠΎΠ΄ рСпозитория
 
      - name: Set Git user email and name
        run: |
          git config --local user.email "author@gitverse.ru"
          git config --local user.name "author"
 
      - name: Install Maven
        run: |
          apt-get update
          apt-get -y install maven
 
      - name: Build Maven package
        run: |
          mvn clean package
 
      - name: Push to remote branch
        run: |
          git checkout -b new-maven-build-branch
          git add .
          git commit -m "Added"
          git push origin new-maven-build-branch --force

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»Π°:

  • name: Установка ΠΏΠ°ΠΊΠ΅Ρ‚Π° Maven β€” имя workflow, ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π΅ ΡΡƒΡ‚ΡŒ процСсса.
  • on: push β€” Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€: workflow запускаСтся ΠΏΡ€ΠΈ push Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.
  • jobs: β€” Π½Π°Ρ‡Π°Π»ΠΎ списка Π·Π°Π΄Π°Ρ‡ (jobs).
  • build-test: β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Π΄Π°Ρ‡ΠΈ.
  • name: Maven Build β€” имя (ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅) Π·Π°Π΄Π°Ρ‡ΠΈ.
  • runs-on: ubuntu-latest β€” Π·Π°Π΄Π°Ρ‡Π° выполняСтся Π½Π° ΠΎΠ±Π»Π°Ρ‡Π½ΠΎΠΌ Ρ€Π°Π½Π½Π΅Ρ€Π΅ с ОБ Ubuntu.
  • steps: β€” Π½Π°Ρ‡Π°Π»ΠΎ списка шагов Π²Π½ΡƒΡ‚Ρ€ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ:
  • uses: actions/checkout@v3 β€” шаг, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ дСйствиС checkout (ΠΊΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория).
  • name: Set Git user email and name β€” шаг, Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Git:
  • run: ... β€” многострочный скрипт:
  • git config --local user.email "author@gitverse.ru" β€” Π·Π°Π΄Π°Π΅Ρ‚ email ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Git.
  • git config --local user.name "author" β€” Π·Π°Π΄Π°Π΅Ρ‚ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Git.
  • name: Install Maven β€” шаг установки Maven:
  • run: ... β€” скрипт установки:
  • apt-get update β€” ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ списка ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².
  • apt-get -y install maven β€” установка Maven Π±Π΅Π· подтвСрТдСния.
  • name: Build Maven package β€” шаг сборки Maven-ΠΏΠ°ΠΊΠ΅Ρ‚Π°:
  • run: ... β€” скрипт сборки:
  • mvn clean package β€” очистка ΠΈ сборка ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Maven.
  • name: Push to remote branch β€” шаг ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡƒΠ΄Π°Π»Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ:
  • run: ... β€” скрипт ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ:
  • git checkout -b new-maven-build-branch β€” создаСт Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ.
  • git add . β€” добавляСт измСнСния.
  • git commit -m "Added" β€” ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ измСнСния.
  • git push origin new-maven-build-branch --force β€” ΠΏΡƒΡˆΠΈΡ‚ Π²Π΅Ρ‚ΠΊΡƒ (с ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒΡŽ истории, Ссли Π½ΡƒΠΆΠ½ΠΎ).

Π’Ρ‹ нашли Ρ‡Ρ‚ΠΎ искали?