Artefato:Publicando descritores Ivy no repositório via script
-
12-11-2019 - |
Pergunta
Foi-me explicado que se você deseja que o Artifactory gerencie seu repositório (o que eu faço), e se você não deseja escrever à mão seus próprios descritores Ivy (o que eu não faço), então suas opções são para qualquer:
- Use Ivy RoundUp, que contém descritores Ivy além dos próprios artefatos;ou
- Escreva um script para gerar os descritores para você;ou
- Escreva uma transformação XML para converter entre esquemas de descritores Maven e Ivy
Depois de avaliar cuidadosamente minhas opções, decidi escrever um script Python para gerar esses descritores.Colocarei todos os artefatos que desejo implantar/instalar em meu repositório em um deploy/
pasta, e o script irá iterar sobre quaisquer artefatos que encontrar nesta pasta, consultar o usuário para obter informações sobre ele e, em seguida, realizar a implantação para mim, ali mesmo dentro do script.
Embora este último requisito não seja obrigatório, seria legal basta fazer com que o script acesse a API RESTful do Artifactory e implante o descritor e o artefato para mim, no local certo.
Esta página explica a API e é o tema da minha pergunta.
A única PUT
A operação baseada na API expõe é esta:
PUT http://localhost:8080/artifactory/<repo>/<organization>/<module>/<version>/<artifact>:sample-metadata
<xml-metadata-content/>
A descrição desta operação é:
Anexe os metadados XML a um item (arquivo ou pasta).
É isso que estou procurando? Por exemplo, se eu tiver um jar chamado my-utils-2.3.jar
, então quero poder colocar isso no deploy/
diretório, e fazer com que meu script não apenas gere my-utils-2.3-ivy.xml
, mas para implantar esses dois itens em meu repositório no local certo (que, neste exemplo, seria http://localhost:8080/artifactory/my-repo/my/utils/2.3/
).
Se não é isso que estou procurando, então a API do Artifactory suporta o que eu quero (e onde está a documentação sobre isso!)?
E, se é isso que procuro, tenho uma segunda pergunta relacionada à segurança.Eu gostaria de manter todos os meus repositórios protegidos.Idealmente, o usuário que executa este script Python teria que fornecer o Artifactory admin
nome de usuário e senha para que a implantação seja realizada com sucesso.
Mas em nenhum lugar da definição desta operação vejo suporte para autenticação!!Devo presumir que o Artifactory não autentica chamadas REST?!?
Desde já, obrigado!
Editar:
Encontrei o seguinte exemplo no antigo fórum do 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/"
Seria isso que estou procurando? Dessa forma, eu poderia usar o PyCurl para a interface curl/libcurl e ainda obter segurança.Se sim, então por que estou sendo solicitado a autenticação por curl, em vez de Artifactory?
Solução
Artifactory usa autenticação HTTP BASIC para todas as chamadas REST.O exemplo curl que você mencionou não funcionará, pois você precisa especificar o caminho de destino completo para o arquivo (o comando atual irá apenas (re)criar o diretório no Artifactory e ignorar o fluxo de arquivos).Você deveria usar:
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"
No entanto, você pode usar o Ivy para resolver diretamente de repositórios Maven de terceiros por meio do Resolvedor IBiblio (consulte "usepoms") ou converta automaticamente poms em descritores ivy usando o converterpom tarefa.
O Artifactory também permite que você aplique esse tipo de conversão pom->ivy internamente e armazene o arquivo ivy em seu cache por meio de um arquivo baseado em groovy. plug-in de usuário que intercepta o evento 'afterRemoteDownload'.
Outras dicas
Embora o Artifactory seja flexível o suficiente para suportar repositórios ivy, eu recomendaria executá-lo como um repositório Maven.
Por que?
- Maven se estabeleceu como o Java de fato repositório padrão.
- Outras ferramentas de construção, Ivy, Gradle, sbt, etc., todas entendem os repositórios Maven.
A resposta a seguir descreve como o ivy pode ser implantado em um repositório Maven: