暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

通过 Gitlab API 获取项目列表

生有可恋 2024-04-01
2035

内网搭建的 Gitab,项目列表并不直观,当项目多的时候需要翻页才能查看全部内容。

希望获取项目信息后生成 markdown 列表,这样挂到 Wiki 中更直观一些。

Gitlab 运行在 docker 中,runlike 命令显示创建容器时运行的命令为:

    $ runlike -p gitlab
    docker run --name=gitlab \
    --hostname=gitlab.example.com \
    --mac-address=02:42:ac:11:00:02 \
            --volume=/gitlab/config:/etc/gitlab \
            --volume=/gitlab/logs:/var/log/gitlab \
            --volume=/gitlab/data:/var/opt/gitlab \
    --expose=22 \
    -p 222:222 \
    -p 443:443 \
    --expose=80 \
    -p 880:880 \
    --restart=always \
    --runtime=runc \
    --detach=true \
    gitlab/gitlab-ee:latest \
    assets/wrapper


    在 Gitlab 中创建用于获取项目列表的 Token:

    通过 Gitlab API 可以获取到项目信息:

      curl --header "PRIVATE-TOKEN: your_access_token" "https://gitlab.example.com/api/v4/projects"

      获取到的是一个 json 对象,单项目 json 结构如下:

        {
         'created_at''2024-01-30T14:29:44.341+08:00',
        'default_branch': 'main',
         'description''IP 备注',
         'http_url_to_repo''http://git-server.com/hyang0/ip_notes.git',
         'name''ip_notes',
         'ssh_url_to_repo''ssh://git@git-server.com:222/hyang0/ip_notes.git',
        'web_url': 'http://git-server.com:880/hyang0/ip_notes',
        }

        通过 python request 库生成项目列表:

          import requests
          from pprint import pprint
          import sys




          # 设置 GitLab 实例的 URL 和个人访问令牌
          gitlab_url = "http://your-gitlab-server"
          access_token = "your_token"


          # 构建 API 请求的 URL
          api_url = f"{gitlab_url}/api/v4/projects?per_page=100"


          # 设置请求头,包括个人访问令牌
          headers = {
          "PRIVATE-TOKEN": access_token
          }


          try:
          # 发送 GET 请求以获取项目列表
          response = requests.get(api_url, headers=headers)


          # 检查响应状态码
          if response.status_code == 200:
          # 解析响应的 JSON 数据
          projects = response.json()

          # 输出项目列表
          for project in projects:
          print(f"- [{project['name']}]({project['web_url']})")
          else:
          print(f"Failed to retrieve projects. Status code: {response.status_code}")
          except requests.RequestException as e:
          print(f"Error: {e}")


          输出效果:

          如果只想获取指定用户的项目,url 需要改一下:

            # 指定用户的用户 ID 或用户名
            user_id_or_username = "hyang0"


            # 构建 API 请求的 URL
            api_url = f"{gitlab_url}/api/v4/users/{user_id_or_username}/projects?per_page=1000"

            全文完。

            如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。

            文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论