Сделайте ваш (автоматический) выпуск в Maven Central из Travis (и не только) более надежным благодаря явному набору функций создания репозитория, реализованному на рубеже 2018 и 2019 годов.
Фон
Если вы заинтересованы только в том, чтобы получить информацию о том, как сделать выпуск артефактов более надежным из Трэвиса, перейдите в другой раздел.
Автоматическое освобождение артефактов (с использованием промежуточного хранилища и его продвижения) из Gradle в Maven Central всегда было сложно. API-интерфейс Nexus REST, связанный с этими операциями, очень плохо документирован. Кроме того, Gradle изначально не поддерживает загрузку артефактов в специальный промежуточный репозиторий, даже если он уже был создан явно. В результате необходимо использовать эвристику, чтобы определить, какой репозиторий содержит только что загруженные артефакты, что приводит к серьезным ограничениям. Апогей проблем заключался в том, что в конце осени 2018 года Travis изменил свою архитектуру на состояние без состояния. Это привело к тому, что запросы на загрузку определенных артефактов направлялись через машины с разными IP-адресами, что привело к созданию нескольких репозиториев, созданных для одного gradle uploadArchives
или gradle publish
вызовов gradle publish
. Это сделало автоматический выпуск артефакта с Gradle от Travis полностью сломанным. До этого момента.
улучшения
Две хорошие вещи произошли на рубеже лет. Первым было появление нового плагина nexus- publy от Marc Philipp. Он создает явное промежуточное хранилище с помощью API Nexus и расширяет задачу публикации Gradle для использования этого хранилища. Вторым было улучшение в моем плагине gradle-nexus-staging, которое начало позволять устанавливать ID хранилища промежуточных данных, который должен использоваться во время операции релиза. Это привело к повышению надежности выпуска в Maven Central с использованием Gradle.
Вместо того, чтобы полагаться на эвристику для определения, какой репозиторий следует использовать для выпуска, новый промежуточный репозиторий создается явно. Артефакты загружаются прямо на него, он закрывается и выпускается. Благодаря этому все работает задушевно и более надежно. Кроме того, нет проблем с параллельным выпуском разных проектов, относящихся к одному и тому же профилю подготовки, и, наконец, он снова работает правильно с Travis.
конфигурация
В этом посте предполагается, что вы уже настроили загрузку своих артефактов в Maven Central (он же Центральный репозиторий) с помощью плагина maven-publish
. Если нет, вы можете обратиться по этой ссылке . Эта конфигурация сделает ваше развертывание и выпуск более надежными без необходимости выполнять какие-либо ручные операции в пользовательском интерфейсе Nexus.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
plugins { ... //other plugins used in your project id 'io.codearte.nexus-staging' version '0.20.0' id 'de.marcphilipp.nexus-publish' version '0.2.0' } publishing { ... //your current publishing to Maven Central configuration } //optionally nexusStaging { packageGroup = "your-package-group-if-different-than-groupId" } //optionally nexusPublishing { //for custom configuration if needed - credentials are by default taken from nexus-staging } |
Вы ожидаете гораздо больше кода (конфигурации) для записи? Все скрыто в плагинах, которые используют друг друга. Просто не забудьте использовать nexus-staging 0.20.0+ и nexus-publish 0.2.0+.
После этого загрузка артефактов с выпуском производится одной командой:
1
|
. /gradlew publishToNexus closeAndReleaseRepository |
Вместо publish
используется задача publishToNexus
которая устанавливает идентификатор промежуточного хранилища, и closeAndReleaseRepository
который закрывает и освобождает этот конкретный репозиторий. Через несколько минут ваши артефакты должны быть доступны в Maven Central.
Важно Имейте в виду, что publishToNexus
и closeAndReleaseRepository
должны использоваться в одном выполнении Gradle, чтобы иметь возможность использовать явно созданный промежуточный репозиторий.
Резюме
Gradle — очень хороший инструмент для сборки, где (почти) небо — это предел. К сожалению, все еще существуют некоторые долговременные проблемы, которые требуют использования некоторых хаков или написания пользовательских плагинов для их преодоления. Обнадеживающим является то, что с каждым выпуском они медленно исправляются / внедряются . Чтобы решить эту конкретную проблему, потребовалась восходящая работа, чтобы вернуть релиз для Трэвиса и сделать его более надежным в целом.
Пожалуйста, обратите внимание . Представленный подход очень хорошо подходит для использования (недавно улучшенного) модуля публикации. Если вы все еще используете старый плагин maven
(вместо publish
uploadArchives
задачу uploadArchives
), вам нужно перенести и / или поместить свой комментарий в соответствующую проблему .
Смотреть оригинальную статью здесь: Надежный выпуск Maven Central от Travis с использованием Gradle — выпуск 2019 Мнения, высказанные участниками Java Code Geeks, являются их собственными. |