我正在尝试使用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
接下来,根据之前获得的管道ID获取作业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'
最后,根据作业ID将工件获取到build.zip
:
curl -sS --header "PRIVATE-TOKEN: <my-token-here>" "https://[redacted,host]/api/v4/projects/[redacted, project]/jobs/<JOB_ID>/artifacts" > build.zip
以上这些步骤确实有效,但是我必须击中三个端点(并为每个步骤处理JSON响应)。
我还在GitLab's documentation中读到,有一个单个端点可用于此。所以我也尝试了这个:
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>
有没有更简单的方法来执行此任务?还是正确使用上面文档中描述的端点?
答案 0 :(得分:1)
两种方法。第二个是您的用例解决方案。
curl -sS "https://<url>/<namespace>/<project>/-/jobs/artifacts/<refs>/download?job=<job_name>"
注意:很抱歉,您不能在此处使用您的个人令牌,它已保留给以下API使用。
Gitlab doc : downloading the latest artifacts
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
值是斜杠的URL编码替代,如果您的项目是gitlab的一部分或组或子组。