Публикация из внутренней связи в центральную часть maven

У меня есть внутренняя связь, содержащая все артефакты, которые мы создаем. После тестирования артефакта я хочу взять нормальный артефакт и развернуть его в Maven Central без перестроения.

Я знаю, что мог бы сделать это, используя mvn deploy:deploy-file, но это кажется сложным. Есть ли простой способ сделать это?

Примечание: по историческим причинам мы не используем версии SNAPSHOT. Все версии выполнены в стиле artifact-name-X.Y.Z.jar, где X.Y.Z — это номер версии. У нас есть внутренний инструмент, который можно проверить на работоспособность.


person nadavy    schedule 18.05.2020    source источник
comment
Версия v1.2.X немного не похожа ... если вам действительно нравится ходить в центр, это первое, что я бы изменил. Кроме того, зачем вам нужно их тестировать? Разве у вас нет модульных/интеграционных тестов в вашей сборке?   -  person khmarbaise    schedule 18.05.2020
comment
@khmarbaise Спасибо. Что касается тестирования - мы тестируем его в сквозных тестах. После того, как CI пометил его как Sane, нам нужно развернуть. Но поскольку это делается в нескольких заданиях Дженкинса и повторно используется несколькими компонентами, единственный простой способ для меня — взять артефакт, помеченный как «Последний» и «Разумный».   -  person nadavy    schedule 18.05.2020
comment
Работа Дженкинса - альтернатива?   -  person JRichardsz    schedule 26.05.2020
comment
@JRichardsz Да, в основном я хочу иметь задание по развертыванию, которое получит имя и версию артефакта, возьмет его из нашей внутренней связи и опубликует в Maven Central.   -  person nadavy    schedule 27.05.2020
comment
# 1 Вы, Дженкинс, можете загружать артефакты с нексуса? # 2 Может ли ваш дженкинс отправлять артефакты в центральный центр maven?   -  person JRichardsz    schedule 27.05.2020
comment
@JRichardsz Да и да.   -  person nadavy    schedule 28.05.2020
comment
Используете ли вы прямые сценарии оболочки в своей работе jenkins или своего рода плагин для выполнения команд maven?   -  person JRichardsz    schedule 29.05.2020
comment
Я предпочитаю оболочку, но это не обязательно.   -  person nadavy    schedule 29.05.2020


Ответы (2)


Я закончил использовать подход, аналогичный тому, что здесь: https://central.sonatype.org/pages/manual-staging-bundle-creation-and-deployment.html

Итак, если бы у меня были следующие файлы:

ossrh-test-1.2.pom
ossrh-test-1.2.jar
ossrh-test-1.2-javadoc.jar
ossrh-test-1.2-sources.jar

Я вызвал эту команду для JAR:

mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=ossrh -DpomFile=ossrh-test-1.2.pom -Dfile=ossrh-test-1.2.jar

И следующие команды для исходников и JavaDocs:

mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=ossrh -DpomFile=ossrh-test-1.2.pom -Dfile=ossrh-test-1.2-sources.jar -Dclassifier=sources
mvn gpg:sign-and-deploy-file -Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=ossrh -DpomFile=ossrh-test-1.2.pom -Dfile=ossrh-test-1.2-javadoc.jar -Dclassifier=javadoc

И последнее, но не менее важное: поскольку мне пришлось создавать фальшивые исходники и jar-файлы javadoc, я просто взял jar-файл, распаковал его, поместил в него файл readme вместо старого содержимого, обновил манифест и снова заархивировал его. Затем я загрузил его как свои поддельные источники / банки javadoc.

person nadavy    schedule 04.06.2020

Позвольте мне предположить, что у вас есть не только x.y.z версия бинарников, но и тег scm для этой версии.

Если это так, вы можете попробовать следующее задание CI:

<scm> checkout <YOUR TAG>
<scm> clean -d -x -f

mvn maven-dependency-plugin:get -Pcustom-deployment -DexecutionId=resolve-sane-binaries
mvn maven-deploy-plugin:deploy -Pcustom-deployment -DexecutionId=deploy-sane-binaries

с профилем в вашем pom.xml:

<profiles>
    <profile>
        <id>custom-deployment</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <version>3.1.2</version>
                    <executions>
                        <execution>
                            <id>resolve-sane-binaries</id>
                            <goals>
                                <goal>get</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>${project.groupId}</groupId>
                                        <artifactId>${project.artifactId}</artifactId>
                                        <version>${project.version}</version>
                                        <type>${project.packaging}</type>
                                        <outputDirectory>${project.build.directory}</outputDirectory>
                                        <destFileName>${project.build.finalName}</destFileName>
                                    </artifactItem>
                                    ...
                                </artifactItems>
                                ...
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                    <executions>
                        <execution>
                            <id>deploy-sane-binaries</id>
                            <goals>
                                <goal>deploy-file</goal>
                            </goals>
                            <configuration>
                                ...
                            </configuration>
                        </execution>
                    <executions>
                <plugin>
            </plugins>

Это просто идея, а не код, который я действительно тестировал. Но надеюсь поможет.

person ursa    schedule 27.05.2020