【问题标题】:How can I get and store a changing version number from a Jenkins build using a cURL command?如何使用 cURL 命令从 Jenkins 构建中获取和存储更改的版本号?
【发布时间】:2015-09-15 16:10:17
【问题描述】:

我正在尝试提取具有最新版本号的文件的名称,以便可以使用 bash 将其移动到另一个目录。我有一个名为“deb-files”的目录,我想将下载的 .deb 文件移动到该目录中。这是我正在寻找的基本版本:

if [ "$REPOSITORY_NAME" = "repository" ];
    then : curl https://example.com/$REPOSITORY_NAME*.deb

    mv $REPOSITORY_NAME*.deb ./deb-files/;

$REPOSITORY_NAME 由用户输入填充。请假设他们输入“存储库”。请注意,文件名与存储库名称相同。我认为在扩展名前加星表示“最新版本”,但每次运行它时,我都会在代码的 mv 部分收到一个错误,提示找不到文件 - “没有这样的文件或目录”。有任何想法吗?我试过转义星号并引用变量名。没有运气。

以防万一,我正在尝试访问由 Jenkins 中的构建创建的工件。

【问题讨论】:

    标签: bash curl jenkins deb


    【解决方案1】:

    curl 和 Jenkins 服务器都不理解 shell 通配符 '*'。您必须找到要下载的工件的确切名称。

    一种方法是修改 Jenkins 作业以创建(并作为工件存档)到具有固定名称 (pkg1_latest.deb) 的工件的符号链接。

    另一种方法是使用 Jenkins REST API 来获取有关最新版本的信息,但通常要做到这一点,您需要解析一些 JSON。

    curl http://jenkins:8080/job/JOB_NAME/lastSuccessfulBuild/api/json?tree=artifacts[*]
    

    产生类似的东西:

    {
      "artifacts" : [
        {
          "displayPath" : "platformA/pkg1_VERSION.deb",
          "fileName" : "pkg1_VERSION.deb",
          "relativePath" : "build/platformA/pkg1_VERSION.deb"
        },
        {
          "displayPath" : "platformB/pkg1_VERSION.deb",
          "fileName" : "pkg1_VERSION.deb",
          "relativePath" : "build/platformB/pkg1_VERSION.deb"
        },
        ...
      ]
    }
    

    然后解析输出以找到合适的相对路径。使用相对路径,您可以检索工件:

    curl http://jenkins:8080/job/JOB_NAME/lastSuccessfulBuild/artifact/$relpath
    

    更新:另一个解决方案是下载一个包含所有工件的 zip 存档,然后提取您感兴趣的那些。

    curl "http://jenkins:8080/job/JOB_NAME/lastSuccessfulBuild/artifact/*zip*/archive.zip
    unzip archive.zip "$REPOSITORY_PATH*.deb"
    

    URL 中特殊的 *zip* 告诉 Jenkins 创建所有内容的 zip 存档。

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2019-03-04
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2013-09-06
    • 2020-06-24
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多