curl - GitLab CI 获取最后一个工件
问题描述
我正在尝试使用curl
. 这是我尝试过的。
首先,获取最后一个管道 id:
curl -v -H "Content-Type: application/json" -H "PRIVATE-TOKEN: <my-token-here>" https://<project>/api/v4/projects/<project>/pipelines?per_page=1&page=1
接下来,根据之前刚刚获取的 pipeline id 获取 job id:
curl -sS --header "PRIVATE-TOKEN: <my-token-here>" "https://[redacted,host]/api/v4/projects/[redacted,project]/pipelines/<pipeline-id>/jobs" | jq '.[] | select(.name == "build-assets" and .status == "success" and .artifacts_file != null) | .id'
最后,build.zip
根据作业 ID 获取工件:
curl -sS --header "PRIVATE-TOKEN: <my-token-here>" "https://[redacted,host]/api/v4/projects/[redacted, project]/jobs/<JOB_ID>/artifacts" > build.zip
上面的这些步骤确实有效,但我必须点击三个端点(并为每个步骤处理 JSON 响应)。
我还在GitLab 的文档中读到,有一个可用的端点。所以我也试过这个:
curl -sS --header "PRIVATE-TOKEN: <my-token-here>" "https://<url>/<namespace>/<project>/-/jobs/artifacts/<refs>/download?job=<job_name>"
但这总是将我重定向到登录页面,这样说:
<html><body>You are being <a href="https://<url>/users/sign_in">redirected</a>.</body></html>
有没有更简单的方法来完成这项任务?或者如何正确使用上述文档中描述的端点?
解决方案
脚本工件下载
两种方法。第二个是您的用例中的解决方案。
来自公共项目
curl -sS "https://<url>/<namespace>/<project>/-/jobs/artifacts/<refs>/download?job=<job_name>"
注意:我猜你不能在这里使用你的个人令牌,它保留给下面的 API 使用。
来自私人项目
curl -L --header "PRIVATE-TOKEN: 123456abcdef" "https://gitlab.com/api/v4/projects/awesome-organization%2Fawesome-group%2Fowesome-project/jobs/artifacts/master/download?job=publish-release"
注意 1:-l
告诉 curl 遵循重定向,因为 gitlab 会将您移动到其 google 存储位置。
注意 2:%2F
如果您的项目是 gitlab 中的一部分或组或子组,则该值是斜杠的 url 编码替换。
推荐阅读
- python - 获取用户输入并循环遍历许多变量,以便将该输入与其中一个变量匹配
- regex - PowerShell / Regex - 如何将第 7 个字符后的字符串添加到文件名列表中
- excel - EXCEL / VBA - 电子表格中的函数#VALUE错误
- c - 理解时间的计算(jiffies)
- sql - 使用所有字段的 DB2 SQL 合并
- python - 使用 Python 替换击键
- excel - Asp Net Core 3.1 大数据导出 Excel 带 ClosedXML
- reactjs - 向 PWA 的 API 平台公开 Next.js 环境变量
- javascript - Apollo 客户端和过滤查询
- ios - 错误:IOS版本代码属性必须是整数并且必须设置