Введение
В этом руководстве показано, как создать рабочий процесс, который публикует пакеты Java в GitHub Packages и центральном репозитории Maven. С помощью одного рабочего процесса можно публиковать пакеты в одном репозитории или в нескольких.
Предупреждение
Примеры, используемые в этом руководстве, ссылаются на устаревшую службу OSSRH. См . статью "Публикация " в документации по Центральному репозиторию Maven.
Необходимые компоненты
Рекомендуется иметь базовое представление о файлах рабочих процессов и параметрах конфигурации. Дополнительные сведения см. в разделе Написание рабочих процессов.
Дополнительные сведения о создании рабочего процесса CI для проекта Java с помощью Gradle см. в разделе Сборка и тестирование в Java с помощью Gradle.
Также могут быть полезны базовые знания в следующих областях:
- Работа с реестром Apache Maven
- Хранение сведений в переменных
- Использование секретов в GitHub Actions
- Использование GITHUB_TOKEN для проверки подлинности в рабочих процессах
Сведения о конфигурации пакета
Поля 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".
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") } } } } 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. Дополнительные сведения см. в разделе Использование секретов в GitHub Actions.
# Этот рабочий процесс использует действия, которые не сертифицированы 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@v5 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} # Этот рабочий процесс использует действия, которые не сертифицированы 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@v5 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} Этот рабочий процесс выполняет следующие действия:
-
Извлекает копию репозитория проекта.
-
Настраивает JDK Java.
-
Настраивает среду Gradle. Действие
gradle/actions/setup-gradleзаботится о состоянии кэширования между выполнением рабочего процесса и содержит подробную сводку по всем выполнениям Gradle. -
Выполняет задачу Gradle
publishдля публикации вOSSRHрепозитории Maven. Переменная средыMAVEN_USERNAMEбудет задана с содержимым секретаOSSRH_USERNAME, а переменная средыMAVEN_PASSWORD— с содержимым секретаOSSRH_TOKEN.Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе Использование секретов в GitHub Actions.
Публикация пакетов в GitHub Packages
При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется при активации события release с типом created. Если тесты CI проходят успешно, рабочий процесс публикует пакет в GitHub Packages. Дополнительные сведения о событии см. в release разделе События, инициирующие рабочие процессы.
Вы можете определить новый репозиторий Maven в блоке публикации файла build.gradle, который указывает на GitHub Packages. В этой конфигурации репозитория можно также использовать переменные среды, заданные в рабочем процессе CI. Переменную среды GITHUB_ACTOR можно использовать в качестве имени пользователя, а переменную среды GITHUB_TOKENможно задать с помощью секрета GITHUB_TOKEN.
Секрет GITHUB_TOKEN устанавливается в качестве маркера доступа для репозитория при каждом запуске задания в рабочем процессе. Необходимо задать разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ для чтения для contents разрешения и доступа на запись для packages разрешения. Дополнительные сведения см. в разделе Использование GITHUB_TOKEN для проверки подлинности в рабочих процессах.
Например, если организация называется "octocat", а репозиторий называется "hello-world", конфигурация GitHub Packages в файле build.gradle будет выглядеть примерно так, как показано в следующем примере.
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") } } } } 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.
# Этот рабочий процесс использует действия, которые не сертифицированы 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@v5 - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2 - name: Publish package run: ./gradlew publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Этот рабочий процесс использует действия, которые не сертифицированы 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@v5 - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2 - name: Publish package run: ./gradlew publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} Этот рабочий процесс выполняет следующие действия:
-
Извлекает копию репозитория проекта.
-
Настраивает JDK Java.
-
Настраивает среду Gradle. Действие
gradle/actions/setup-gradleзаботится о состоянии кэширования между выполнением рабочего процесса и содержит подробную сводку по всем выполнениям Gradle. -
Выполняет задачу Gradle
publishдля публикации в GitHub Packages. Переменная средыGITHUB_TOKENбудет задана с содержимым секретаGITHUB_TOKEN. Ключpermissionsуказывает доступ, разрешенный секретомGITHUB_TOKEN.Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе Использование секретов в GitHub Actions.
Публикация пакетов в центральный репозиторий Maven и GitHub Packages
Вы можете опубликовать пакеты в центральный репозиторий Maven и GitHub Packages, настроив каждый из них в файле build.gradle.
Файл build.gradle должен содержать репозиторий для репозитория GitHub и поставщика центрального репозитория Maven.
Например, при развертывании в центральный репозиторий с помощью проекта размещения OSSRH может потребоваться указать его в репозитории управления дистрибутивом — name должен иметь значение OSSRH. При развертывании в GitHub Packages может потребоваться указать его в репозитории управления распределением — name должен иметь значение GitHubPackages.
Например, если организация называется "octocat", а репозиторий называется "hello-world", конфигурация в файле build.gradle будет выглядеть примерно так, как показано в следующем примере.
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") } } } } 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.
# Этот рабочий процесс использует действия, которые не сертифицированы 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@v5 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Этот рабочий процесс использует действия, которые не сертифицированы 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@v5 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} Этот рабочий процесс выполняет следующие действия:
-
Извлекает копию репозитория проекта.
-
Настраивает JDK Java.
-
Настраивает среду Gradle. Действие
gradle/actions/setup-gradleзаботится о состоянии кэширования между выполнением рабочего процесса и содержит подробную сводку по всем выполнениям Gradle. -
Выполняет задачу Gradle
publishдля публикации вOSSRHрепозитории Maven и GitHub Packages. Переменная средыMAVEN_USERNAMEбудет задана с содержимым секретаOSSRH_USERNAME, а переменная средыMAVEN_PASSWORD— с содержимым секретаOSSRH_TOKEN. Переменная средыGITHUB_TOKENбудет задана с содержимым секретаGITHUB_TOKEN. Ключpermissionsуказывает доступ, разрешенный секретомGITHUB_TOKEN.Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе Использование секретов в GitHub Actions.