GitLab CI 获取最后一个工件

GitLab CI get last artifact

我正在尝试使用 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'

最后根据job idbuild.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>

有没有更简单的方法来完成这个任务?或者如何正确使用上面文档中描述的端点?

脚本工件下载

两种方法。第二个是您用例中的解决方案。

来自 Public 项目

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:如果您的项目是 gitlab 中的一部分或组或子组,则 %2F 值是斜杠的 url-encoded 替换。

Gitlab api doc : downloading the latest artifacts