Введение
В этом руководстве показано, как создать рабочий процесс, который публикует пакеты 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.