Статьи

Надежный выпуск Maven Central от Travis с использованием Gradle — выпуск 2019

Сделайте ваш (автоматический) выпуск в Maven Central из Travis (и не только) более надежным благодаря явному набору функций создания репозитория, реализованному на рубеже 2018 и 2019 годов.

Фон

Если вы заинтересованы только в том, чтобы получить информацию о том, как сделать выпуск артефактов более надежным из Трэвиса, перейдите в другой раздел.

Автоматическое освобождение артефактов (с использованием промежуточного хранилища и его продвижения) из Gradle в Maven Central всегда было сложно. API-интерфейс Nexus REST, связанный с этими операциями, очень плохо документирован. Кроме того, Gradle изначально не поддерживает загрузку артефактов в специальный промежуточный репозиторий, даже если он уже был создан явно. В результате необходимо использовать эвристику, чтобы определить, какой репозиторий содержит только что загруженные артефакты, что приводит к серьезным ограничениям. Апогей проблем заключался в том, что в конце осени 2018 года Travis изменил свою архитектуру на состояние без состояния. Это привело к тому, что запросы на загрузку определенных артефактов направлялись через машины с разными IP-адресами, что привело к созданию нескольких репозиториев, созданных для одного gradle uploadArchives или gradle publish вызовов gradle publish . Это сделало автоматический выпуск артефакта с Gradle от Travis полностью сломанным. До этого момента.

Maven Central

улучшения

Две хорошие вещи произошли на рубеже лет. Первым было появление нового плагина 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, являются их собственными.