Skip to main content

Сборка и тестирование в Java с помощью Maven

Рабочий процесс непрерывной интеграции (CI) можно создать в GitHub Actions для сборки и тестирования проекта Java с помощью Maven.

Введение

В этом руководстве показано, как создать рабочий процесс, который выполняет непрерывную интеграцию (CI) для вашего проекта Java с помощью средства управления проектами программного обеспечения Maven. Создаваемый рабочий процесс позволит увидеть, когда фиксации в запросе на вытягивание вызывают сбои в сборке или тестировании ветви по умолчанию; этот подход поможет убедиться, что ваш код всегда работоспособен. Вы можете расширить рабочий процесс CI, чтобы кэшировать файлы и передавать артефакты через выполнение рабочего процесса.

Средства выполнения, размещенные на GitHub, имеют кэш средств с предварительно установленным программным обеспечением, включающим в себя комплекты SDK для Java (JDK) и Maven. Список программного обеспечения и предварительно установленных версий JDK и Maven см. в разделе Спецификации для средств выполнения, размещенных на GitHub.

Предварительные требования

Требуются знания YAML и синтаксиса GitHub Actions. Дополнительные сведения см. в разделе:

Рекомендуется иметь базовое представление о Java и платформе Maven. Дополнительные сведения см. в руководстве по началу работы с Maven в документации Maven.

Использование начального рабочего процесса Maven

GitHub предоставляет начальный рабочий процесс Maven, который будет работать для большинства проектов Java на базе Maven. Дополнительные сведения см. в разделе Начальный рабочий процесс Maven.

Чтобы быстро приступить к работе, при создании рабочего процесса можно выбрать предварительно настроенный начальный рабочий процесс Maven. Дополнительные сведения см. в кратком руководстве по GitHub Actions.

Этот рабочий процесс также можно добавить вручную, создав новый файл в каталоге .github/workflows репозитория.

YAML
name: Java CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
      - name: Build with Maven
        run: mvn --batch-mode --update-snapshots package

Этот рабочий процесс выполняет следующие действия:

  1. На шаге checkout в средство выполнения скачивается копия репозитория.
  2. На setup-java этом шаге настраивается Eclipse Temurin (Java) JDK 17 от Eclipse Adoptium.
  3. На шаге "Сборка с помощью Maven" целевой объект Maven package запускается в неинтерактивном режиме для проверки того, что сборка кода выполняется, тесты завершаются удачно и пакет можно создать.

Начальные рабочие процессы по умолчанию — это отличные отправные точки при создании рабочего процесса сборки и тестирования, а также начальный рабочий процесс можно настроить в соответствии с потребностями проекта.

Выполнение заданий в другой операционной системе

Начальный рабочий процесс настраивает задания для запуска в Linux с помощью размещенных в GitHub средств выполнения ubuntu-latest. Можно изменить ключ runs-on для выполнения заданий в другой операционной системе. Например, можно использовать размещенные в GitHub средства выполнения Windows.

runs-on: windows-latest

Кроме этого, можно выполнять задания на размещенных в GitHub средствах выполнения macOS.

runs-on: macos-latest

Можно также выполнять задания в контейнерах Docker или предоставить локальное средство выполнения, которое выполняется в собственной инфраструктуре. Дополнительные сведения см. в статье Синтаксис рабочего процесса для GitHub Actions.

Указание версии и архитектуры JVM

Начальный рабочий процесс настраивает PATH, чтобы содержать OpenJDK 8 для платформы x64. Если вы хотите использовать другую версию Java или выбрать другую архитектуру (x64 или x86), можно использовать действие setup-java для выбора другой среды выполнения Java.

Например, чтобы использовать JDK версии 11, предоставляемой Adoptium для платформы x64, можно выполнить действие setup-java и установить параметры java-version,distribution и architecture на '11', 'adopt' и x64.

YAML
steps:
  - uses: actions/checkout@v3
  - name: Set up JDK 11 for x64
    uses: actions/setup-java@v3
    with:
      java-version: '11'
      distribution: 'adopt'
      architecture: x64

Дополнительные сведения см. в описании действия setup-java.

Создание и тестирование кода

Вы можете использовать те же команды, которые используются для создания и тестирования кода в локальной среде.

Начальный рабочий процесс будет по умолчанию запускать целевой объект package. В конфигурации Maven по умолчанию эта команда скачивает зависимости, выполняет сборку классов, проводит тесты и упаковывает классы в распространяемый формат, например в JAR-файл.

Если вы используете другие команды для сборки проекта или хотите выполнить другой целевой объект, это можно указать. Например, может понадобиться выполнить целевой объект verify, настроенный в файле pom-ci.xml.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Run the Maven verify phase
    run: mvn --batch-mode --update-snapshots verify

Кэширование зависимостей

Вы можете кэшировать зависимости, чтобы ускорить выполнение рабочего процесса. После успешного выполнения локальный репозиторий Maven будет храниться в кэше. При последующих запусках рабочего процесса данные из кэша восстанавливаются, так что зависимости не нужно скачивать из удаленных репозиториев Maven. Кэшировать зависимости можно просто с помощью действия setup-java, либо можно использовать действие cache для более сложной настройки.

YAML
steps:
  - uses: actions/checkout@v3
  - name: Set up JDK 11
    uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
      cache: maven
  - name: Build with Maven
    run: mvn --batch-mode --update-snapshots verify

Этот рабочий процесс сохраняет содержимое локального репозитория Maven, расположенного в каталоге .m2 домашнего каталога средства выполнения. Ключом кэша будет хэш содержимого файла pom.xml, поэтому изменения в файле pom.xml делают кэш недействительным.

Упаковка данных рабочего процесса в виде артефактов

После успешной сборки и прохождения тестов может потребоваться передать полученные пакеты Java в виде артефакта сборки. Полученные пакеты будут храниться как часть выполнения рабочего процесса и их можно будет скачать. Артефакты помогут вам протестировать и отладить запросы на вытягивание в локальной среде до их слияния. Дополнительные сведения см. в разделе Сохранение данных рабочего процесса с помощью артефактов.

Как правило, Maven создает выходные файлы, такие как JAR, EAR или WAR, в каталоге target. Чтобы передать их как артефакты, их можно скопировать в новый каталог, содержащий артефакты для отправки. Например, можно создать каталог с именем staging. Затем содержимое этого каталога можно передать с помощью действия upload-artifact.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - run: mvn --batch-mode --update-snapshots verify
  - run: mkdir staging && cp target/*.jar staging
  - uses: actions/upload-artifact@v3
    with:
      name: Package
      path: staging