【问题标题】:Extending artifactory's pypi repos with plugins使用插件扩展 artifactory 的 pypi 存储库
【发布时间】:2018-11-10 22:22:47
【问题描述】:

我正在尝试迁移旧系统以使用工件。但是我有两个拦截器:

  1. 旧脚本需要 PyPixmlrpc,artifactory 不支持
  2. 他们还使用了上传文档,artifactory 的 pypi 实现也不支持
  3. 一个较小的问题,旧脚本调用 register 并且他们期望 200 而不是 204 http 状态代码。

我可以写一个插件来实现这个吗?

查看https://www.jfrog.com/confluence/display/RTF/User+Plugins,我找不到请求POST /api/pypi/<index-name> 时的回调。

如果我能做到

  1. 为我们实际使用的方法工作,
  2. 只是假装它部署了文档和
  3. 以正确的状态码响应
我会很开心的。

【问题讨论】:

    标签: artifactory pypi


    【解决方案1】:

    正如您所说,Pypi API 端点没有插件挂钩。可以使用altResponse 端点来自定义工件下载,但是您将被限制为没有请求正文的GET 请求,这对您来说也不是一个好选择。

    我认为最可行的方法是定义一个自定义的executions 端点。有了这个,您可以指定可接受的方法,读取正文,并设置您自己的响应代码和正文。这样做的主要缺点是您无法自定义路径(始终为/api/plugins/execute/[execution_name]),但这可以解决。

    执行端点可以采用以下形式的参数:

    /api/plugins/execute/[execution_name]?params=[param_name]=[param_val]

    假设您的插件采用参数path,它表示您的旧脚本将要调用的 API 路径。然后您可以将您的基本 URL 设置为 /api/plugins/execute/[execution_name]?params=path=/,以便将 API 路径附加到参数中。或者,您可以使用 nginx 或其他反向代理将原始 API 路径重写为该表单。

    (由于您将使用 XML-RPC,我认为您无需担心任何此类路径内容,但为了完整性,我还是将其包括在内。)

    这种方法的一些问题:

    • 执行端点只允许String 响应,因此在响应正文中发送二进制数据可能很麻烦。但是,请求正文不存在此类限制。
    • 如果您需要多个请求方法,则需要多个执行端点。这意味着您需要使用反向代理将每个方法重写到单独的端点。同样,由于 XML-RPC 只使用POST,这对您来说可能不是问题。
    • 执行端点无法自定义响应标头。因此,如果您的脚本需要特定的 Content-Type 或其他标头,则需要使用反向代理将其插入响应中。

    【讨论】:

    • 这基本上需要我使用执行端点重新实现 pypi,不是吗? upload_docs 和普通上传都使用相同的端点,但某些表单字段的值不同。那个或我的反向代理都必须解析表单数据。不过,我想 xmlrpc 位会更可行。但是,似乎我可以从 artifactory 的 pypi 实现中重用很少的代码。真可惜。
    • @RafaelAlmeida 您可以尝试通过从插件内部调用本地 REST 端点将您可以做的事情定向到 Artifactory 实现。除此之外,是的,你需要自己实现很多。无论采用何种方法,似乎都没有任何解决办法。
    猜你喜欢
    • 1970-01-01
    • 2018-10-05
    • 2022-01-21
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多