Введение
В этом руководстве показано, как создать рабочий процесс, который публикует пакеты Java в GitHub Packages и центральном репозитории Maven. С помощью одного рабочего процесса можно публиковать пакеты в одном репозитории или в нескольких.
Необходимые компоненты
Рекомендуется иметь базовое представление о файлах рабочих процессов и параметрах конфигурации. Дополнительные сведения см. в разделе Написание рабочих процессов.
Дополнительные сведения о создании рабочего процесса CI для проекта Java с помощью Maven см. в разделе Сборка и тестирование в Java с помощью Maven.
Также могут быть полезны базовые знания в следующих областях:
- Работа с реестром Apache Maven
- Хранение сведений в переменных
- Использование секретов в GitHub Actions
- Автоматическая проверка подлинности токенов
Сведения о конфигурации пакета
Поля groupId
и artifactId
в файле pom.xml создают уникальный идентификатор для вашего пакета, который реестры используют для связывания вашего пакета с реестром. Дополнительные сведения см. в руководстве по загрузке артефактов в центральный репозиторий в документации по Apache Maven.
Файл pom.xml также содержит конфигурацию для репозиториев управления распределением, в которые Maven будет развертывать пакеты. Каждый репозиторий должен иметь имя и URL-адрес развертывания. Проверку подлинности для этих репозиториев можно настроить в файле .m2/settings.xml в домашнем каталоге пользователя, запустившего Maven.
Вы можете использовать действие setup-java
для настройки репозитория развертывания, а также проверки подлинности для этого репозитория. Дополнительные сведения см. в разделе setup-java
.
Публикация пакетов в центральный репозиторий Maven
При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется при активации события release
с типом created
. Если тесты CI проходят успешно, рабочий процесс публикует пакет в центральный репозитории Maven. Дополнительные сведения о событии см. в release
разделе События, инициирующие рабочие процессы.
В этом рабочем процессе вы можете использовать действие setup-java
. Это действие устанавливает заданную версию JDK в PATH
, а также настраивает файл Maven settings.xml для публикации пакетов. По умолчанию файл параметров будет настроен для GitHub Packages, но его можно настроить для развертывания в другом реестре пакетов, например в центральном репозитории Maven. Если у вас уже есть репозиторий управления распределением, настроенный в pom.xml, вы можете указать этот id
во время вызова действия setup-java
.
Например, если вы выполняли развертывание в центральном репозитории Maven через проект размещения OSSRH, ваш файл pom.xml мог указать репозиторий управления распределением с id
ossrh
.
<project ...> ... <distributionManagement> <repository> <id>ossrh</id> <name>Central Repository OSSRH</name> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Central Repository OSSRH</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
С помощью этой конфигурации вы можете создать рабочий процесс, который публикует ваш пакет в центральном репозитории Maven, указав id
управления репозиторием в действии setup-java
. Вам также необходимо указать переменные среды, содержащие имя пользователя и пароль для проверки подлинности в репозитории.
На этапе развертывания вам нужно будет установить переменные среды для имени пользователя, с помощью которого вы будете выполнять проверку подлинности в репозитории, и для секрета, который вы настроили с помощью пароля или маркера для проверки подлинности. Дополнительные сведения см. в разделе Использование секретов в GitHub Actions.
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 Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: Publish package run: mvn --batch-mode deploy env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
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 Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish package
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
Этот рабочий процесс выполняет следующие действия:
-
Извлекает копию репозитория проекта.
-
Настраивает Java JDK, а также файл Maven settings.xml для добавления проверки подлинности для репозитория
ossrh
с использованием переменных средыMAVEN_USERNAME
иMAVEN_PASSWORD
. -
Выполняет команду
mvn --batch-mode deploy
для публикации в репозиторийossrh
. Переменная средыMAVEN_USERNAME
будет задана с содержимым секретаOSSRH_USERNAME
, а переменная средыMAVEN_PASSWORD
— с содержимым секретаOSSRH_TOKEN
.Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе Использование секретов в GitHub Actions.
Публикация пакетов в GitHub Packages
При каждом создании выпуска можно активировать рабочий процесс для публикации пакета. Рабочий процесс в приведенном ниже примере выполняется при активации события release
с типом created
. Если тесты CI проходят успешно, рабочий процесс публикует пакет в GitHub Packages. Дополнительные сведения о событии см. в release
разделе События, инициирующие рабочие процессы.
В этом рабочем процессе вы можете использовать действие setup-java
. Это действие устанавливает указанную версию JDK в PATH
, а также настраивает файл Maven settings.xml для публикации пакета в GitHub Packages. Сгенерированный файл settings.xml определяет проверку подлинности для сервера с id
github
, используя переменную среды GITHUB_ACTOR
в качестве имени пользователя и переменную среды GITHUB_TOKEN
в качестве пароля. Переменной среды GITHUB_TOKEN
присваивается значение специального секрета GITHUB_TOKEN
.
Секрет GITHUB_TOKEN
устанавливается в качестве маркера доступа для репозитория при каждом запуске задания в рабочем процессе. Необходимо задать разрешения для этого маркера доступа в файле рабочего процесса, чтобы предоставить доступ для чтения для contents
разрешения и доступа на запись для packages
разрешения. Дополнительные сведения см. в разделе «Автоматическая проверка подлинности токенов».
Для проекта на основе Maven вы можете использовать эти параметры, создав репозиторий распределения в файле pom.xml с id
github
, который указывает на конечную точку GitHub Packages.
Например, если название вашей организации — octocat, а репозитория — hello-world, то конфигурация GitHub Packages в pom.xml будет похожа на приведенную ниже.
<project ...> ... <distributionManagement> <repository> <id>github</id> <name>GitHub Packages</name> <url>https://maven.pkg.github.com/octocat/hello-world</url> </repository> </distributionManagement> </project>
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
С помощью этой конфигурации вы можете создать рабочий процесс, который публикует ваш пакет в GitHub Packages, используя автоматически сгенерированный файл settings.xml.
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: Publish package run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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: Publish package
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Этот рабочий процесс выполняет следующие действия:
-
Извлекает копию репозитория проекта.
-
Настраивает Java JDK, а также автоматически настраивает файл Maven settings.xml, чтобы добавить проверку подлинности для репозитория
github
Maven для использования переменной средыGITHUB_TOKEN
. -
Выполняет команду для публикации
mvn --batch-mode deploy
в GitHub Packages. Переменная средыGITHUB_TOKEN
будет задана с содержимым секретаGITHUB_TOKEN
. Ключpermissions
указывает доступ, предоставленный дляGITHUB_TOKEN
.Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе Использование секретов в GitHub Actions.
Публикация пакетов в центральный репозиторий Maven и GitHub Packages
Вы можете опубликовать свои пакеты как в центральном репозитории Maven, так и в GitHub Packages, используя действие setup-java
для каждого реестра.
Убедитесь, что ваш файл pom.xml включает репозиторий управления распределением как для вашего репозитория GitHub, так и для вашего поставщика центрального репозитория Maven. Например, если вы выполняете развертывание в центральный репозиторий через проект размещения OSSRH, можно указать его в репозитории управления распределением с id
со значением ossrh
. Также вы можете указать GitHub Packages в репозитории управления распределением с id
со значениемgithub
.
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 for publishing to Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD - name: Publish to the Maven Central Repository run: mvn --batch-mode deploy env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} - name: Set up Java for publishing to GitHub Packages uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Publish to GitHub Packages run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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 for publishing to Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish to the Maven Central Repository
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Set up Java for publishing to GitHub Packages
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Publish to GitHub Packages
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Этот рабочий процесс дважды вызывает действие setup-java
. При каждом запуске действия setup-java
оно перезаписывает файл Maven settings.xml для публикации пакетов. Для проверки подлинности в репозитории файл settings.xml содержит ссылку на репозиторий управления распределением id
, а также на имя пользователя и пароль.
Этот рабочий процесс выполняет следующие действия:
-
Извлекает копию репозитория проекта.
-
Вызывает
setup-java
в первый раз. В результате выполняется настройка файла Maven settings.xml для репозиторияossrh
и установка параметров проверки подлинности для переменных среды, которые определяются на следующем шаге. -
Выполняет команду
mvn --batch-mode deploy
для публикации в репозиторийossrh
. Переменная средыMAVEN_USERNAME
будет задана с содержимым секретаOSSRH_USERNAME
, а переменная средыMAVEN_PASSWORD
— с содержимым секретаOSSRH_TOKEN
. -
Вызывает
setup-java
во второй раз. В результате выполняется автоматическая настройка файла Maven settings.xml для GitHub Packages. -
Выполняет команду для публикации
mvn --batch-mode deploy
в GitHub Packages. Переменная средыGITHUB_TOKEN
будет задана с содержимым секретаGITHUB_TOKEN
. Ключpermissions
указывает доступ, предоставленный дляGITHUB_TOKEN
.Дополнительные сведения об использовании секретов в рабочем процессе см. в разделе Использование секретов в GitHub Actions.