Артефабрика:Публикация дескрипторов Ivy в репозиторий с помощью скрипта
-
12-11-2019 - |
Вопрос
Мне объяснили, что если вы хотите, чтобы Artifactory управлял вашим репозиторием (что я и делаю), и если вы не хотите самостоятельно писать свои собственные дескрипторы Ivy (чего я не делаю), тогда вы можете или:
- Используйте Ivy RoundUp, который помимо самих артефактов содержит дескрипторы Ivy;или
- Напишите сценарий для генерации дескрипторов;или
- Напишите XML-преобразование для преобразования схем дескрипторов Maven и Ivy.
Тщательно взвесив все варианты, я решил написать скрипт Python для генерации этих дескрипторов.Я помещу все артефакты, которые хочу развернуть/установить, в свой репозиторий в deploy/
папку, и сценарий будет перебирать все артефакты, которые он найдет в этой папке, запрашивать у пользователя информацию об этом, а затем выполнить развертывание для меня, прямо внутри скрипта.
Хотя это последнее требование не является обязательным, оно будет хороший просто чтобы сценарий обратился к RESTful API Artifactory и развернул для меня дескриптор и артефакт в нужном месте.
Эта страница объясняет API и является темой моего вопроса.
Единственный PUT
Операция, которую предоставляет API, заключается в следующем:
PUT http://localhost:8080/artifactory/<repo>/<organization>/<module>/<version>/<artifact>:sample-metadata
<xml-metadata-content/>
Описание этой операции следующее:
Прикрепите метаданные XML к элементу (файлу или папке).
Это то, что я ищу? Например, если у меня есть банка под названием my-utils-2.3.jar
, то я хочу иметь возможность поместить это в deploy/
каталог, и мой скрипт не только генерирует my-utils-2.3-ivy.xml
, но для развертывания обоих этих элементов в моем репозитории в нужном месте (в данном примере это будет http://localhost:8080/artifactory/my-repo/my/utils/2.3/
).
Если это не то, что я ищу, то поддерживает ли API Artifactory то, что я хочу (и где документация по этому поводу!)?
И если это то, что я ищу, то у меня есть второй вопрос, связанный с безопасностью.Я хотел бы обеспечить безопасность всех своих репозиториев.В идеале пользователь, выполняющий этот скрипт Python, должен будет предоставить Artifactory admin
имя пользователя и пароль для успешного выполнения развертывания.
Но нигде в определении этой операции я не вижу поддержки аутентификации!!Должен ли я предположить, что Artifactory не аутентифицирует вызовы REST?!?
Заранее спасибо!
Редактировать:
Я нашел следующий пример на старом форуме Artifactory/Users:
curl -X PUT -u user:password --data-binary @/absolute/path/my-utils-2.3.jar "http://localhost/artifactory/my-repo/my/utils/2.3/"
Будет ли это то, что я ищу? Таким образом, я мог бы использовать PyCurl для интерфейса curl/libcurl и при этом обеспечить безопасность.Если так, то почему меня просят пройти аутентификацию через Curl, а не через Artifactory?
Решение
Artifactory использует аутентификацию HTTP BASIC для всех вызовов REST.Упомянутый вами пример с завитком не будет работать, поскольку вам необходимо указать полный целевой путь для файл (текущая команда просто (пере) создаст каталог в Artifactory и проигнорирует файловый поток).Вам следует использовать:
curl -XPUT -f -uadmin:password --data-binary @/absolute/path/my-utils-2.3.jar "http://localhost/artifactory/my-repo/my/utils/2.3/my-utils-2.3.jar"
Однако вы можете использовать Ivy для разрешения напрямую из сторонних репозиториев Maven через Резолвер ILiblio (см. «usepoms») или автоматически конвертировать poms в дескрипторы плюща, используя команду Конвертпом задача.
Artifactory также позволяет вам применять этот тип преобразования pom->ivy внутри компании и сохранять файл ivy в его кэше с помощью groovy-интерфейса. пользовательский плагин который перехватывает событие afterRemoteDownload.
Другие советы
Хотя Artifactory достаточно гибок для поддержки репозиториев Ivy, я бы рекомендовал запускать его как репозиторий Maven.
Почему?
- Maven зарекомендовал себя как де-факто Java. репозиторий стандарт.
- Другие инструменты сборки, Ivy, Gradle, sbt и т. д., понимают репозитории Maven.
В следующем ответе описывается, как ivy можно развернуть в репозитории Maven: