Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Building and testing Java with Gradle

You can create a continuous integration (CI) workflow in GitHub Actions to build and test your Java project with Gradle.

Введение

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

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

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

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

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

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

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

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

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

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.

# GitHub рекомендует закрепить действия в фиксации SHA.
# Чтобы получить более новую версию, потребуется обновить SHA.
# Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.

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: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Build with Gradle
        uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
        with:
          arguments: build

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

  1. На шаге checkout в средство выполнения скачивается копия репозитория.
  2. На setup-java этом шаге настраивается Eclipse Temurin (Java) JDK 17 от Eclipse Adoptium.
  3. На шаге "Проверка программы-оболочки Gradle" проверяются контрольные суммы JAR-файлов программы-оболочки Gradle, имеющихся в исходном дереве.
  4. На шаге "Сборка с помощью Gradle" выполняется сборка с помощью действия gradle/gradle-build-action, предоставленного организацией Gradle на GitHub. Это действие отвечает за вызов Gradle, сбор результатов и кэширование состояния между заданиями. Дополнительные сведения см. на веб-сайте gradle/gradle-build-action.

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

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

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

runs-on: windows-latest

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

runs-on: macos-latest

Можно также выполнять задания в контейнерах Docker или предоставить локальное средство выполнения, которое выполняется в собственной инфраструктуре. Дополнительные сведения см. в разделе Workflow syntax for 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.

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

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

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

Если вы используете другие команды для сборки проекта или хотите выполнить другую задачу, это можно указать. Например, может понадобиться выполнить задачу package, настроенную в файле ci.gradle.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Validate Gradle wrapper
    uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
  - name: Run the Gradle package task
    uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
    with:
      arguments: -b ci.gradle package

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

Зависимости сборки можно кэшировать, чтобы ускорить выполнение рабочего процесса. После успешного выполнения gradle/gradle-build-action кэширует важные части домашнего каталога пользователя Gradle. При последующих запусках заданий данные из кэша восстанавливаются, так что скрипты сборки не нужно перекомпилировать, а зависимости не нужно скачивать из удаленных репозиториев пакетов.

При использовании действия gradle/gradle-build-action кэширование включено по умолчанию. Дополнительные сведения см. на веб-сайте gradle/gradle-build-action.

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

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

Как правило, Gradle создает выходные файлы, такие как JAR, EAR или WAR, в каталоге build/libs. Содержимое этого каталога можно передать с помощью действия upload-artifact.

YAML
steps:
  - uses: actions/checkout@v3
  - uses: actions/setup-java@v3
    with:
      java-version: '17'
      distribution: 'temurin'
  - name: Validate Gradle wrapper
    uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
  - name: Build with Gradle
    uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
    with:
      arguments: build
  - uses: actions/upload-artifact@v3
    with:
      name: Package
      path: build/libs