0

已经向我解释过,如果您想让 Artifactory 管理您的存储库(我会这样做),并且如果您不想自己手写 Ivy 描述符(我不这样做),那么您的选择是任何一个:

  • 使用 Ivy RoundUp,除了工件本身之外,它还包含 Ivy 描述符;或者
  • 编写脚本为您生成描述符;或者
  • 编写 XML 转换以在 Maven 和 Ivy 描述符模式之间进行转换

在仔细权衡了我的选择之后,我决定编写一个 Python 脚本来生成这些描述符。我会将我希望部署/安装到我的存储库的所有工件放入一个deploy/文件夹中,脚本将遍历它在此文件夹中找到的所有工件,向用户查询有关它的信息,然后为我执行部署,对吧在脚本里面。

尽管这最后一个要求不是强制性的,但最好让脚本访问Artifactory的 RESTful API 并在正确的位置为我部署描述符和工件。

此页面解释了 API,并且是我的问题的主题。

PUTAPI 公开的唯一基于操作是:

PUT http://localhost:8080/artifactory/<repo>/<organization>/<module>/<version>/<artifact>:sample-metadata

<xml-metadata-content/>

此操作的描述是:

将 XML 元数据附加到项目(文件或文件夹)。

这就是我要找的吗?例如,如果我有一个名为 的 jar my-utils-2.3.jar,那么我希望能够将它放在deploy/目录中,并且让我的脚本不仅生成my-utils-2.3-ivy.xml,而且将这两个项目部署到我的存储库中的正确位置(在这个例如,将是http://localhost:8080/artifactory/my-repo/my/utils/2.3/)。

如果这不是我想要的,那么 Artifactory 的 API 是否支持我想要的(以及关于此的文档在哪里!)?

而且,如果这是我正在寻找的,那么我有第二个与安全相关的问题。我想保护我所有的存储库。理想情况下,执行此 Python 脚本的用户必须提供 Artifactoryadmin用户名和密码才能成功执行部署。

但是在这个操作的定义中,我没有看到任何对身份验证的支持!!我是否可以假设 Artifactory 不对 REST 调用进行身份验证?!?

提前致谢!

编辑:
我在 Artifactory/Users old nabble 论坛上找到了以下示例:

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?

4

2 回答 2

1

Artifactory 对所有 REST 调用使用 HTTP BASIC 身份验证。您提到的 curl 示例将不起作用,因为您需要指定文件的完整目标路径(当前命令只会(重新)在 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 通过IBiblio 解析器直接从 3rd 方 Maven 存储库解析(请参阅“usepoms”),或者使用convertpom任务自动将 pom 转换为 ivy 描述符。

Artifactory 还允许您在内部应用这种类型的 pom->ivy 转换,并通过基于 groovy 的用户插件将 ivy 文件存储到其缓存中,该插件拦截“afterRemoteDownload”事件。

于 2012-02-26T07:47:42.040 回答
0

尽管 Artifactory 足够灵活以支持 ivy 存储库,但我建议将其作为 Maven 存储库运行。

为什么?

  1. Maven 已将自己确立为事实上的 Java存储库标准。
  2. 其他构建工具,Ivy、Gradle、sbt 等都了解 Maven 存储库。

以下答案描述了 ivy 如何部署到 Maven 存储库:

将 ivy.xml 转换为 pom.xml

于 2012-02-25T10:27:11.420 回答