繁体   English   中英

如何通过GitLab中的项目id获取GitLab项目名称 API

[英]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 是:

  1. 项目 API
  2. 受保护的分支 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM