Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы может все еще выполняться. Актуальные сведения см. в документации на английском языке.

Публикация пакетов Java с помощью Gradle

С помощью Gradle можно опубликовать пакеты Java в реестре в рамках рабочего процесса непрерывной интеграции (CI).

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Введение

В этом руководстве показано, как создать рабочий процесс, который публикует пакеты Java в GitHub Packages и центральном репозитории Maven. С помощью одного рабочего процесса можно публиковать пакеты в одном репозитории или в нескольких.

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

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

Дополнительные сведения о создании рабочего процесса CI для проекта Java с помощью Gradle см. в разделе Сборка и тестирование в Java с помощью Gradle.

Также могут быть полезны базовые знания в следующих областях:

Сведения о конфигурации пакета

Поля groupId и artifactId в разделе MavenPublication файла build.gradle создают уникальный идентификатор пакета, используемый реестрами для связывания пакета с реестром. Они аналогичный полям groupId и artifactId файла Maven pom.xml. Дополнительные сведения см. в статье "Подключаемый модуль публикации Maven" в документации по Gradle.

Файл build.gradle также содержит конфигурацию для репозиториев управления дистрибутивами, в которые Gradle будет публиковать пакеты. Каждый репозиторий должен иметь имя, URL-адрес развертывания и учетные данные для проверки подлинности.

Публикация пакетов в центральный репозиторий Maven

При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется при активации события release с типом created. Если тесты CI проходят успешно, рабочий процесс публикует пакет в центральный репозитории Maven. Дополнительные сведения о событии см. в release разделе События, инициирующие рабочие процессы.

Вы можете определить новый репозиторий Maven в блоке публикации файла build.gradle, который указывает на репозиторий пакетов. Например, если развертывание в центральный репозиторий Maven выполнялось с помощью проекта размещения OSSRH, файл build.gradle может указывать репозиторий с именем "OSSRH".

groovy
plugins {
  ...
  id 'maven-publish'
}

publishing {
  ...

  repositories {
    maven {
      name = "OSSRH"
      url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
      credentials {
        username = System.getenv("MAVEN_USERNAME")
        password = System.getenv("MAVEN_PASSWORD")
      }
    }
  }
}

С помощью этой конфигурации можно создать рабочий процесс, который публикует пакет в центральный репозитории Maven. Для этого нужно выполнить команду gradle publish. На этапе развертывания необходимо задать переменные среды для имени пользователя и пароля или маркера, используемого для проверки подлинности в репозитории Maven. Дополнительные сведения см. в разделе Зашифрованные секреты.

YAML

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

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

name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Java
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
      - name: Publish package
        uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629
        with:
          arguments: publish
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

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

  1. Извлекает копию репозитория проекта.

  2. Настраивает JDK Java.

  3. Проверяет контрольные суммы всех JAR-файлов программы-оболочки Gradle, имеющихся в репозитории.

  4. Выполняет действие gradle/gradle-build-action с аргументом publish для публикации в репозиторий Maven OSSRH. Переменная среды MAVEN_USERNAME будет задана с содержимым секрета OSSRH_USERNAME, а переменная среды MAVEN_PASSWORD — с содержимым секрета OSSRH_TOKEN.

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

Публикация пакетов в GitHub Packages

При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется при активации события release с типом created. Если тесты CI проходят успешно, рабочий процесс публикует пакет в GitHub Packages. Дополнительные сведения о событии см. в release разделе События, инициирующие рабочие процессы.

Вы можете определить новый репозиторий Maven в блоке публикации файла build.gradle, который указывает на GitHub Packages. В этой конфигурации репозитория можно также использовать переменные среды, заданные в рабочем процессе CI. Переменную среды GITHUB_ACTOR можно использовать в качестве имени пользователя, а переменную среды GITHUB_TOKENможно задать с помощью секрета GITHUB_TOKEN.

Секрет GITHUB_TOKEN устанавливается в качестве маркера доступа для репозитория при каждом запуске задания в рабочем процессе. Вам следует установить разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ на чтение в области contents и доступ на запись в области packages. Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.

Например, если организация называется "octocat", а репозиторий называется "hello-world", конфигурация GitHub Packages в файле build.gradle будет выглядеть примерно так, как показано в следующем примере.

groovy
plugins {
  ...
  id 'maven-publish'
}

publishing {
  ...

  repositories {
    maven {
      name = "GitHubPackages"
      url = "https://maven.pkg.github.com/octocat/hello-world"
      credentials {
        username = System.getenv("GITHUB_ACTOR")
        password = System.getenv("GITHUB_TOKEN")
      }
    }
  }
}

С помощью этой конфигурации можно создать рабочий процесс, который публикует пакет в GitHub Packages. Для этого следует выполнить команду gradle publish.

YAML

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

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

name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
      - name: Publish package
        uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629
        with:
          arguments: publish
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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

  1. Извлекает копию репозитория проекта.

  2. Настраивает JDK Java.

  3. Проверяет контрольные суммы всех JAR-файлов программы-оболочки Gradle, имеющихся в репозитории.

  4. Выполняет действие gradle/gradle-build-action с аргументом publish для публикации в GitHub Packages. Переменная среды GITHUB_TOKEN будет задана с содержимым секрета GITHUB_TOKEN. Ключ permissions указывает доступ, разрешенный секретом GITHUB_TOKEN.

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

Публикация пакетов в центральный репозиторий Maven и GitHub Packages

Вы можете опубликовать пакеты в центральный репозиторий Maven и GitHub Packages, настроив каждый из них в файле build.gradle.

Файл build.gradle должен содержать репозиторий для репозитория GitHub и поставщика центрального репозитория Maven.

Например, при развертывании в центральный репозиторий с помощью проекта размещения OSSRH может потребоваться указать его в репозитории управления дистрибутивом — name должен иметь значение OSSRH. При развертывании в GitHub Packages может потребоваться указать его в репозитории управления распределением — name должен иметь значение GitHubPackages.

Например, если организация называется "octocat", а репозиторий называется "hello-world", конфигурация в файле build.gradle будет выглядеть примерно так, как показано в следующем примере.

groovy
plugins {
  ...
  id 'maven-publish'
}

publishing {
  ...

  repositories {
    maven {
      name = "OSSRH"
      url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
      credentials {
        username = System.getenv("MAVEN_USERNAME")
        password = System.getenv("MAVEN_PASSWORD")
      }
    }
    maven {
      name = "GitHubPackages"
      url = "https://maven.pkg.github.com/octocat/hello-world"
      credentials {
        username = System.getenv("GITHUB_ACTOR")
        password = System.getenv("GITHUB_TOKEN")
      }
    }
  }
}

С помощью этой конфигурации можно создать рабочий процесс, который публикует пакет в центральный репозиторий Maven и GitHub Packages. Для этого следует выполнить команду gradle publish.

YAML

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

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

name: Publish package to the Maven Central Repository and GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v3
      - name: Set up Java
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@ccb4328a959376b642e027874838f60f8e596de3
      - name: Publish package
        uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629
        with:
          arguments: publish
        env: 
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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

  1. Извлекает копию репозитория проекта.

  2. Настраивает JDK Java.

  3. Проверяет контрольные суммы всех JAR-файлов программы-оболочки Gradle, имеющихся в репозитории.

  4. Выполняет действие gradle/gradle-build-action с аргументом publish для публикации в репозиторий Maven OSSRH и GitHub Packages. Переменная среды MAVEN_USERNAME будет задана с содержимым секрета OSSRH_USERNAME, а переменная среды MAVEN_PASSWORD — с содержимым секрета OSSRH_TOKEN. Переменная среды GITHUB_TOKEN будет задана с содержимым секрета GITHUB_TOKEN. Ключ permissions указывает доступ, разрешенный секретом GITHUB_TOKEN.

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