我正在尝试从 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 中正确使用通配符以确保我始终获得最新的?
NM,与我工作中的另一位工程师一起提出了一个超级优雅的解析 json 的解决方案。
JSONView
https://$domain/$job/lastSuccessfulBuild/api/json
在 Chrome 浏览器中调用 Jenkins API
这将打印出 json 中的密钥对值。表示你的钥匙,对我来说是 number
jq
这会将内部版本号存储为最新版本:
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 已经存在了很长时间。
我知道问题是关于 bash 的,但是使用 wget 解析 html 内容的一种方法是这样的:(Powershell Core)
$raw = wget url
$html = $raw.ParsedHtml.body.innerhtml
$text = $raw.ParsedHtml.body.innertext
然后您可以在 html 或文本变量上运行正则表达式。