Введение
В этом руководстве показано, как создать рабочий процесс, который публикует пакеты Java в GitHub Packages и центральном репозитории Maven. С помощью одного рабочего процесса можно публиковать пакеты в одном репозитории или в нескольких.
Необходимые компоненты
Рекомендуется иметь базовое представление о файлах рабочих процессов и параметрах конфигурации. Дополнительные сведения см. в разделе Написание рабочих процессов.
Дополнительные сведения о создании рабочего процесса CI для проекта Java с помощью Gradle см. в разделе Сборка и тестирование в Java с помощью Gradle.
Также могут быть полезны базовые знания в следующих областях:
- Работа с реестром Apache Maven
- Хранение сведений в переменных
- Использование секретов в GitHub Actions
- Автоматическая проверка подлинности токенов
Сведения о конфигурации пакета
Поля 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@v4 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - 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@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- 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
разрешения. Дополнительные сведения см. в разделе «Автоматическая проверка подлинности токенов».
Например, если организация называется "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@v4 - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - 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@v4
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- 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@v4 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - 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@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- 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.