gitlab:如何以编程方式下载CI管道末尾发布的工件
在Gitlab中,如何通过编程下载CI管道末尾发布的人工制品gitlab:如何以编程方式下载CI管道末尾发布的工件,gitlab,gitlab-ci,Gitlab,Gitlab Ci,在Gitlab中,如何通过编程下载CI管道末尾发布的人工制品 通过UI下载它很容易,但如何通过API获得它呢。换句话说,是否可以通过令牌或类似方式访问它?可以通过API访问,如中所示 GET/projects/:id/jobs/:job\u id/工件 请求示例: 使用专用令牌头: curl --location --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/
通过UI下载它很容易,但如何通过API获得它呢。换句话说,是否可以通过令牌或类似方式访问它?可以通过API访问,如中所示 GET/projects/:id/jobs/:job\u id/工件 请求示例:
- 使用专用令牌头:
curl --location --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/projects/1/jobs/8/artifacts"
- 使用作业令牌头(仅在.gitlab ci.yml内):
- 使用job_令牌参数(仅在.gitlab ci.yml内部):
- 这对我来说很有用:
#/bin/bash
GITLAB_URL=”https://gitlab.example.com"
GITLAB_工件_令牌=“”
group=“”
project=“”
branch=“”
job=“”
outZipFile=“$project.zip”
OutheaderFile=“$outZipFile.httpheaders”
埃塔加格斯=()
#不幸的是,GitLab还不支持以下内容:;返回的Etag从不更改:
#如果[[-f“$outHeadersFile”]]&&[-f“$outZipFile”]];然后
#etag=$(grep etag<“$outHeadersFile”| cut-f2-d')
#如果[-n“$etag”];然后
#etagArgs=(“--header”“如果不匹配:$etag”)
#echo“使用etag:$etag”
#fi
#fi
response=$(curl“$GITLAB_URL/api/v4/projects/${group}%2F${project}/jobs/artifacts/$branch/download?job=$job”\
--沉默的\
-w“%{http_code}\n”\
-D“$outHeadersFile”\
-o“$outZipFile.tmp”\
--标题“私有令牌:$GITLAB\u工件\u令牌”\
“${etagArgs[@]}”)
如果[[“$response”==4*]| |[[“$response”==5*];然后
echo“错误-Http状态:$response”
rm“$outZipFile.tmp”
出口1
elif[“$response”==304];然后
echo“$项目是最新的”
其他的
echo“更新$outZipFile”
mv“$outZipFile.tmp”“$outZipFile”
fi
这对我很有效
请注意,JOB-TOKEN仅适用于特定的付费计划(而不是社区版)。如果使用命名空间API调用,请确保命名空间/项目路径为URL编码。我想你忘了取下你的私人代币。我编辑
curl --location --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/1/jobs/8/artifacts"
curl --location --form "job-token=$CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/1/jobs/8/artifacts"