[英]How to get GitLab project name by using Project id in GitLab API
我有一个脚本,它打印项目 ID 和其他属性,比如允许推送、允许合并我需要用项目 ID 替换项目名称。 这怎么可能?
PROJECT=$(cat /var/opt/gitlab/.project)
TOKEN=$(cat /var/opt/gitlab/.token)
URL=$(cat /etc/gitlab/gitlab.rb | grep external_url | grep -vE 'pages|registry' | grep -v ^# | cut -f 2 -d "'")
projectId=( $(curl -sS --header "PRIVATE-TOKEN: $TOKEN" "$URL/api/v4/projects?&per_page=100&sort=asc&page=[1-50]"| jq -r .[].id) )
for i in "${projectId[@]}"
do
branch1=( $( curl -sS --header "PRIVATE-TOKEN: $TOKEN" "$URL/api/v4/projects/$i/protected_branches" | jq -r ".[]" | jq -r ".name") )
branch1=( $( curl -sS --header "PRIVATE-TOKEN: $TOKEN" "$URL/api/v4/projects/$i/protected_branches" | jq ".path_with_namespace") )
for branch in "${branch1[@]}"
do
Allowed_to_push=( $(curl -sS --header "PRIVATE-TOKEN: $TOKEN" "$URL/api/v4/projects/$i/protected_branches/"$branch""| jq -r .push_access_levels |grep -o '"access_level_description": *"[^"]*"' | grep -o '"[^"]*"$') )
Allowed_to_Merge=( $(curl -sS --header "PRIVATE-TOKEN: $TOKEN" "$URL/api/v4/projects/$i/protected_branches/"$branch""| jq -r .merge_access_levels |grep -o '"access_level_description": *"[^"]*"' | grep -o '"[^"]*"$') )
Allow_to_force_push=( $(curl -sS --header "PRIVATE-TOKEN: $TOKEN" "$URL/api/v4/projects/$i/protected_branches/"$branch""| jq -r .allow_force_push) )
echo -e "$branch,\t\t\t\t$i,\t\t\t\t$Allowed_to_push,\t\t\t\t$Allowed_to_Merge,\t\t\t\t$Allow_to_force_push" >> input.json
done
echo -e "Branch,\t\t\t\tprojectname,\t\t\t\tAllowed_to_push,\t\t\t\tAllowed_to_Merge,\t\t\t\tAllow_to_force_push" | cat - input.json > output.csv
使用python-gitlab
包装器更容易。
python3 -m pip install python-gitlab
#!/usr/bin/env python3
import gitlab
gl = gitlab.Gitlab('https://gitlab.com', private_token='your API token')
# Replace with your project path
PROJECT_NAME = 'mynamespace/myproject'
project = gl.projects.get(PROJECT_NAME)
print('PROJECT:', project.path_with_namespace)
print('PROJECT ID:', project.id)
protected_branches = project.protectedbranches.list(all=True)
print('PROTECTED BRANCHES:')
for branch in protected_branches:
print(f'{branch.name}:')
print(' allowed to merge:')
for grant in branch.merge_access_levels:
print(' ', grant['access_level_description'] or grant['user_id'] or grant['group_id'])
print(' allowed to push:')
for grant in branch.push_access_levels:
print(' ', grant['access_level_description'] or grant['user_id'] or grant['group_id'])
print(' force push allowed?')
print(' ', branch.allow_force_push)
输出将显示如下内容:
PROJECT: mynamespace/myproject
PROJECT ID: 1234
PROTECTED BRANCHES:
master:
allowed to merge:
Maintainers
allowed to push:
No one
force push allowed?
False
如果你真的不想使用 python-gitlab API,你需要的相关 API 是:
您已经有了项目 ID 列表,并且正在对它们施展魔法。 您可以轻松地将以下内容添加到您的 for 循环中以获取项目名称。 另请注意,您还可以获得name_with_namespace
API 参考,这可能也很有用。 您可以随时查看 GitLab文档,了解您可以从 API 获得什么。
projectId=( $(curl -sS --header "PRIVATE-TOKEN: $TOKEN" "$URL/api/v4/projects?&per_page=100&sort=asc&page=[1-50]"| jq -r .[].id) )
for i in "${projectId[@]}"
do
projectName=$(curl -sS --header "PRIVATE-TOKEN: $TOKEN" "$URL/api/v4/projects/${i} | jq '.name')
echo $projectName
done
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.