CI/CD сборка Maven

В данном разделе рассмотрен пример CI/CD Maven сборки проекта java.

💡

Для проверки данного примера примера подготовлена ветка maven-build репозитория CICD_building_projects (opens in a new tab).

Подготовительные действия

  1. Создайте репозиторий, например, CICD_building_projects.

  2. Обновите список доступных пакетов:

sudo apt update
  1. Установите пакет по умолчанию JDK, который включает в себя компилятор Java:
sudo apt install default-jdk

Проверьте, что компилятор установлен:

javac -version
  1. Скачайте раннер и сделайте его исполняемым:
  chmod +x act_runner
  1. Установите docker.

  2. Включите CI/CD в настройках вашего репозитория.

Пример:

  1. Установите Maven.

Обновите список пакетов:

  sudo apt update

Установите Maven:

  sudo apt install maven

Проверьте установку:

  $ mvn -version
  Apache Maven 3.6.3
  Maven home: /usr/share/maven
  Java version: 11.0.23, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
  Default locale: en, platform encoding: UTF-8
  OS name: "linux", version: "5.15.153.1-microsoft-standard-wsl2", arch: "amd64", family: "unix"

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.

javaMavenBuildDemo.yaml

Файл javaMavenBuildDemo.yaml следует расположить в директории .gitverse/workflows/ вашего проекта, он определяет конфигурацию работы CI/CD для GitVerse.

Код файла:

name: Установка пакета Maven
on:
  push:
jobs:
  build-test:
    name: Maven Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3 # Checkout the repository code
 
      - 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) в вашем workflow.
  • build-test — название задачи (job) в вашем workflow, описывающее что будет выполняться в этой задаче.
  • runs-on: ubuntu-latest — указывает, что задача будет выполняться на последней версии Ubuntu.
  • steps — ключевое слово, указывающее на начало определения шагов в вашей задаче.
    • uses: actions/checkout@v3 — этот шаг использует действие (action) для проверки (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: | — начало скрипта для установки Maven.
        • apt-get update — обновляет список пакетов Ubuntu.
        • apt-get -y install maven — устанавливает Maven с подтверждением без запроса.
    • name: build maven package — название этого шага описывает сборку пакета с помощью Maven.
      • run: | — начало скрипта для сборки пакета Maven.
        • mvn clean package — команда для очистки и сборки проекта с помощью Maven.
        • name: Push to remote branch — название этого шага описывает отправку изменений в удаленную ветку.
    • run: | — начало скрипта для отправки изменений.
      • git checkout -b new-maven_build-branch — создает новую ветку new-maven_build-branch.
      • git add . — добавляет все изменения в индекс.
      • git commit -m "Added" — делает коммит с сообщением "Added".
      • git push origin new-maven_build-branch --force — отправляет изменения в удаленную ветку new-maven_build-branch с принудительным обновлением.

CI/CD Сборка

Получите токен раннера

Создайте токен раннера в профиле репозитория во вкладке Настройки > Раннеры > Добавить раннер > пиктограмма копирования раннера.

Пример:

Зарегистрируйте раннер

sudo ./act_runner register

Отправьте изменения в удаленный репозиторий

git push -u origin makefile-build

Запустите раннер

sudo ./act_runner daemon

Статус раннера сменится на активный.

Пример:

Раннер сработает на событие push ранее отправленной ветки makefile-build и далее будет срабатывать при каждом событии push.

Через некоторое время раннер выполнит задачи.

Пример:

Перейдите в профиль репозитория > CI/CD, выберите ваш поток. Отобразится статус выполнения.

Пример:

Проверка сборки

Обновите ваш локальный репозиторий, сохраните изменения в текущей ветке и перейдите в ветку makefile-build-branch:

git pull
git add .
git commit -m "ваш комментарий"
git switch new-maven-build-branch

Проверьте сборку:

$ java -jar target/hello-world-module-0.0.1.jar
Hello, World!