我需要使用 GitLab API 确定我的每个 GitLab 项目分支的最新提交状态。
2831 次
1 回答
2
您可以使用 Gitlab API 来执行此操作:
- 使用List projects API检索所有项目
- 对于每个项目,使用List repository branches API检索所有分支。后一个请求为每个分支提供了最新的提交 sha。
- 为这些提交中的每一个调用提交状态 API
使用 bash an jq,您可以执行以下操作:
#!/bin/bash
# edit this if needed
GITLAB_DOMAIN=gitlab.com
GITLAB_PORT=443
GITLAB_BASE_URL=https://$GITLAB_DOMAIN:$GITLAB_PORT
PER_PAGE=1000
# edit this
PRIVATE_TOKEN=YOUR_PRIVATE_TOKEN
echo "GET /projects"
projects=$(curl -s "$GITLAB_BASE_URL/api/v4/projects?private_token=$PRIVATE_TOKEN&page=1&per_page=$PER_PAGE" | \
jq -r '. | map([.name, .id|tostring ] | join("|")) | join("\n")')
echo "$projects"
while read -r project; do
IFS='|' read -ra project_t <<< "$project"
# project name : ${project_t[0]}
# project id : ${project_t[1]}
echo "GET /projects/${project_t[1]}/repository/branches for project ${project_t[0]}"
commits=$(curl -s "$GITLAB_BASE_URL/api/v4/projects/${project_t[1]}/repository/branches?private_token=$PRIVATE_TOKEN&page=1&per_page=$PER_PAGE" | \
jq -r '. | map([ .name , .commit.id|tostring ] | join("|")) | join("\n")')
while read -r commit; do
IFS='|' read -ra commits_t <<< "$commit"
# branch name : ${commits_t[0]}
# last commit sha for this branch : ${commits_t[1]}
echo "GET /projects/${project_t[1]}/repository/commits/${commits_t[1]}/statuses"
statuses=$(curl -s "$GITLAB_BASE_URL/api/v4/projects/${project_t[1]}/repository/commits/${commits_t[1]}/statuses?private_token=$PRIVATE_TOKEN" | \
jq -r '. | map([.status, .name] | join("|")) | join("\n")')
if [ ! -z "$statuses" ]; then
while read -r status; do
IFS='|' read -ra status_t <<< "$status"
# status value : ${status_t[0]}
# status name : ${status_t[1]}
echo "[PROJECT ${project_t[0]}] [BRANCH ${commits_t[0]}] [COMMIT ${commits_t[1]}] [STATUS ${status_t[1]}] : ${status_t[0]}"
done <<< "$statuses"
else
echo "[PROJECT ${project_t[0]}] [BRANCH ${commits_t[0]}] [COMMIT ${commits_t[1]}] : no status found"
fi
done <<< "$commits"
echo "------"
done <<< "$projects"
于 2017-06-15T23:40:03.563 回答