如何使用 wget 解析 html 以使用针对 Jenkins 的模式匹配来下载工件

问题描述 投票:0回答:2

我正在尝试从 Jenkins 下载一个工件,我需要最新的版本。如果我

curl
jenkins.mycompany.com/view/iOS/job/build_ios/lastSuccessfulBuild/artifact/build
它会将我带到包含我需要下载的工件的页面,在我的例子中是
myCompany-1234.ipa

因此,通过使用

curl
wget
更改为
--auth-no-challenge https://userIsMe:[email protected]/view/iOS/job/build_ios/lastSuccessfulBuild/artifact/build/
,它会下载
index.html
文件。

如果我输入

--reject index.html
,它会停止下载index.html。

如果我用通配符添加工件的名称,就像这样

MyCompany-*.ipa
它会下载一个名为
MyCompany-*.ipa
的 14k 文件,而不是我希望的
MyCompany-1234.ipa
。请记住,我请求的页面只有 1 个
MyCompany-1234.ipa
,因此永远不会找到多个匹配项

如果我使用标志来进行模式匹配

-A "*.ipa"
,如下所示:
wget --auth-no-challenge -A "*.ipa" https://userIsMe:[email protected]/view/iOS/job/build_ios/lastSuccessfulBuild/artifact/build/
它仍然不会下载工件。

如果我像这样完美地输入确切的网址,它就会起作用:

wget --auth-no-challenge https://userIsMe:[email protected]/view/iOS/job/build_ios/lastSuccessfulBuild/artifact/build/MyCompany-1234.ipa

这里的问题是 .ipa 并不总是 1234,明天将是 1235,依此类推。我如何解析 html 或在 wget 中正确使用通配符以确保我始终获得最新的?

bash curl jenkins wget
2个回答
0
投票

NM,与我工作中的另一位工程师一起提出了一个超级优雅的解析 json 的解决方案。

  1. 安装 Chrome 并获取插件
    JSONView
  2. 使用
    https://$domain/$job/lastSuccessfulBuild/api/json
    在 Chrome 浏览器中调用 Jenkins API 这将打印出 json 中的密钥对值。表示你的钥匙,对我来说是
    number
  3. 酿造安装
    jq
  4. 在 bash 脚本中创建一个变量来存储动态值,如下所示

这会将内部版本号存储为最新版本:

latest=$(curl --silent --show-error https://userIsMe:[email protected]/job/build_ios/lastSuccessfulBuild/api/json | jq '.number')

如果您愿意,请将其打印到屏幕上:

echo $latest

现在通过一些字符串插值将最新的变量传递给您的 wget 调用:

wget --auth-no-challenge https://userIsMe:[email protected]/view/iOS/job/build_ios/lastSuccessfulBuild/artifact/build/myCompany-$latest.ipa

希望这可以帮助某人,因为清晰简洁的信息有限,特别是考虑到 wget 已经存在了很长时间。


0
投票

我知道问题是关于 bash 的,但是使用 wget 解析 html 内容的一种方法是这样的:(Powershell Core)

 $raw = wget url
 $html =  $raw.ParsedHtml.body.innerhtml
 $text = $raw.ParsedHtml.body.innertext

然后您可以在 html 或文本变量上运行正则表达式。

© www.soinside.com 2019 - 2024. All rights reserved.