如何使用 cURL 命令从 Jenkins 构建中获取和存储不断变化的版本号?
How can I get and store a changing version number from a Jenkins build using a cURL command?
我正在尝试提取具有最新版本号的文件的名称,以便我可以使用 bash 将其移动到另一个目录。我有一个名为 "deb-files" 的目录,我想将下载的 .deb 文件移动到该目录中。这是我正在寻找的基本版本:
if [ "$REPOSITORY_NAME" = "repository" ];
then : curl https://example.com/$REPOSITORY_NAME*.deb
mv $REPOSITORY_NAME*.deb ./deb-files/;
$REPOSITORY_NAME 由用户输入填充。请假设他们输入 "repository"。请注意,文件名与存储库名称相同。我以为在扩展名前面放一个星号意味着 "latest version",但每次我 运行 它时,我都会在代码的 mv 部分收到一个错误,说它找不到文件 - "No such file or directory".有任何想法吗?我试过转义星号并引用变量名。运气不好。
以防万一,我正在尝试访问由 Jenkins 中的构建创建的工件。
curl 和 Jenkins 服务器都不理解 shell 通配符“*”。您必须找到要下载的工件的确切名称。
一种方法是修改 Jenkins 作业以创建(并存档为工件)符号 link 到具有固定名称的工件(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 存档。
我正在尝试提取具有最新版本号的文件的名称,以便我可以使用 bash 将其移动到另一个目录。我有一个名为 "deb-files" 的目录,我想将下载的 .deb 文件移动到该目录中。这是我正在寻找的基本版本:
if [ "$REPOSITORY_NAME" = "repository" ];
then : curl https://example.com/$REPOSITORY_NAME*.deb
mv $REPOSITORY_NAME*.deb ./deb-files/;
$REPOSITORY_NAME 由用户输入填充。请假设他们输入 "repository"。请注意,文件名与存储库名称相同。我以为在扩展名前面放一个星号意味着 "latest version",但每次我 运行 它时,我都会在代码的 mv 部分收到一个错误,说它找不到文件 - "No such file or directory".有任何想法吗?我试过转义星号并引用变量名。运气不好。
以防万一,我正在尝试访问由 Jenkins 中的构建创建的工件。
curl 和 Jenkins 服务器都不理解 shell 通配符“*”。您必须找到要下载的工件的确切名称。
一种方法是修改 Jenkins 作业以创建(并存档为工件)符号 link 到具有固定名称的工件(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 存档。