#!/bin/bash
# ===================== 配置项(必须修改)=====================
GITLAB_URL="http://210.14.75.1:20220/" # 你的GitLab地址(如https://gitlab.com)
PRIVATE_TOKEN="WutLt-wTtGLExy-6QDGY" # 第一步生成的访问令牌
GROUP_ID="" # 可选:指定分组ID(留空则获取当前用户所有仓库)
# ============================================================
# 1. 获取仓库列表(分页处理,避免漏取)
page=1
per_page=100
total_pages=1
echo "===== GitLab 所有仓库信息汇总 ====="
echo "GitLab地址: $GITLAB_URL"
echo "====================================$(echo -e '\n')"
while [ $page -le $total_pages ]; do
# 构建API请求URL(按分组/全量获取)
if [ -n "$GROUP_ID" ]; then
repos_api="$GITLAB_URL/api/v4/groups/$GROUP_ID/projects?page=$page&per_page=$per_page&include_subgroups=true"
else
repos_api="$GITLAB_URL/api/v4/projects?page=$page&per_page=$per_page&owned=true"
fi
# 获取当前页仓库数据
repos_data=$(curl -s --header "Private-Token: $PRIVATE_TOKEN" "$repos_api")
# 获取总页数(从响应头提取)
total_pages=$(curl -s -I --header "Private-Token: $PRIVATE_TOKEN" "$repos_api" | grep -i 'x-total-pages' | awk '{print $2}' | tr -d '\r')
# 2. 遍历每个仓库,提取URL和最后提交信息
echo "$repos_data" | jq -r '.[] | {id: .id, description: .description, name: .name, http_url_to_repo: .http_url_to_repo, last_commit: .last_activity_at}' | awk '{if($0=="}"){printf"%s\n",$0}else{printf"%s ",$0}}' | while read -r line; do
# 解析仓库基本信息
repo_description=$(echo "$line" | jq -r '.description')
repo_name=$(echo "$line" | jq -r '.name')
repo_url=$(echo "$line" | jq -r '.http_url_to_repo')
repo_id=$(echo "$line" | jq -r '.id')
#echo "仓库描述: $repo_description"
#echo "仓库名称: $repo_name"
#echo "仓库URL: $repo_url"
# 3. 获取仓库最后提交的详细信息(通过API)
commit_api="$GITLAB_URL/api/v4/projects/$repo_id/repository/commits?per_page=1"
commit_data=$(curl -s --header "Private-Token: $PRIVATE_TOKEN" "$commit_api")
if [ "$commit_data" != "[]" ] && [ "$commit_data" != "" ]; then
# 解析提交人、提交日期
commit_author=$(echo "$commit_data" | jq -r '.[0].author_name')
commit_date=$(echo "$commit_data" | jq -r '.[0].created_at' | cut -c1-19) # 格式化日期
#echo "最后提交人: $commit_author"
#echo "最后提交日期: $commit_date"
else
:
#echo "最后提交人: 无提交记录"
#echo "最后提交日期: 无提交记录"
fi
echo -e "${repo_description:-}\t-\t-\t${repo_url:-}\t${commit_author:-}${commit_date}\t-"
#echo "------------------------------------$(echo -e '\n')"
done
page=$((page + 1))
done
echo "===== 信息获取完成 ====="
Categories:
系统运维