【问题标题】:How to know if an artifact already exists in Jfrog Artifactory by Jenkins如何知道一个工件是否已经存在于 Jfrog Artifactory by Jenkins
【发布时间】:2021-12-02 02:10:34
【问题描述】:

我正在开发一个 Jenkins 声明式管道。我将版本作为参数,根据该版本,我想在下载之前知道 Jfrog Artifactory 中是否存在特定文件夹。我安装了 Jenkins Artifactory 插件。 有没有办法在下载之前知道这些信息?

编辑:我意识到我的问题有点断章取义。最后我想做的是上传一个工件。但是如果工件已经存在,我想给用户一个警告,如果他想继续的话。我想知道是否有解决方案,不同于下载工件以查看它是否存在,根据下载是否成功发出警告,然后上传工件。

【问题讨论】:

  • 下载前要检查文件是否存在的原因是什么?为什么不尝试下载?
  • @yahavi 刚刚编辑了回复以提供更多上下文。

标签: jenkins jenkins-pipeline jenkins-plugins artifactory jenkins-job-dsl


【解决方案1】:

您可以使用jfrog rt s JFrog CLI 命令在 Artifactory 中搜索文件。

--count 添加到命令中,计算Artifactory 在指定路径下找到的项目总数。 例如,假设您希望检查 generic-local 存储库中是否存在名为 f.zip 的文件,在 a/b/ 路径下,运行以下命令

jfrog rt s generic-local/a/b/f.zip --count

输出可能是

[Info] Searching artifacts...
[Info] Found 0 artifacts.
0

请注意,在上面的示例中它返回 0。如果文件存在,它将返回 1。 由于只有最后一个输出行被发送到标准输出,您可以通过例如将其写入文件来获取它。

【讨论】:

    【解决方案2】:

    一个选项是像下载文件一样使用 curl。但与其提出 GET 请求,不如运行 HEAD 请求。

    curl -X HEAD ...
    
    curl --head ...
    

    HEAD 方法与 GET 相同,只是服务器不能在响应中返回消息体。响应 HEAD 请求的 HTTP 标头中包含的元信息应该与响应 GET 请求发送的信息相同。该方法可用于获取请求所隐含实体的元信息,而无需传输实体主体本身。 https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-23
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      相关资源
      最近更新 更多