在Ubuntu系统上使用GitLab API前,需安装curl(用于发送HTTP请求)和jq(用于解析JSON响应)工具。若未安装,可通过以下命令安装:
sudo apt update
sudo apt install curl jq -y
GitLab API采用私有令牌(Private Token)或OAuth2进行认证,其中私有令牌是最常用的方式。
api(全量访问)、read_repository(读取仓库)、write_repository(写入仓库)等),设置过期时间(可选)。⚠️ 注意:私有令牌相当于账户密码,请勿泄露。
GitLab API遵循RESTful规范,基础URL为https://gitlab.example.com/api/v4(example.com替换为你的GitLab实例地址,自建实例需替换为域名或IP;v4为当前最新稳定版本)。
使用curl发送请求时,需在Header中添加PRIVATE-TOKEN(私有令牌认证):
curl -H "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/<endpoint>"
<your_access_token>:步骤2中生成的私有令牌。<endpoint>:API端点(如projects表示项目列表、projects/1表示ID为1的项目详情)。curl -H "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects"
jq解析):curl -H "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects" | jq '.[].name'
curl -X POST -H "PRIVATE-TOKEN: <your_access_token>" \
-d "name=MyNewProject" \
-d "namespace_id=1" \ # 命名空间ID(如用户ID或群组ID,可通过`/namespaces`端点获取)
"https://gitlab.example.com/api/v4/projects"
name(项目名称,必填)、namespace_id(命名空间ID,必填,指定项目所属用户/群组)。curl -H "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1"
1为项目ID(可通过/projects端点获取)。curl -X POST -H "PRIVATE-TOKEN: <your_access_token>" \
-d "title=Bug Fix" \
-d "description=Fix the login page issue" \
"https://gitlab.example.com/api/v4/projects/1/issues"
title(Issue标题,必填)、description(Issue描述,可选)。curl -X POST -H "PRIVATE-TOKEN: <your_access_token>" \
-d "ref=main" \ # 分支名称(如main、master)
"https://gitlab.example.com/api/v4/projects/1/trigger/pipeline"
GitLab API返回的HTTP状态码可指示操作结果:
若返回401 Unauthorized,需检查:
若需更复杂的操作(如批量处理、逻辑控制),可使用python-gitlab库(需安装Python 3.7+)。
pip3 install python-gitlab
import gitlab
# 连接GitLab实例
gl = gitlab.Gitlab('https://gitlab.example.com', private_token='<your_access_token>')
# 获取项目列表
projects = gl.projects.list(all=True)
for project in projects:
print(f"Project Name: {project.name}, ID: {project.id}")
# 获取指定项目
project = gl.projects.get(1)
print(f"Project Description: {project.description}")
read_repository,无需写入权限)。429 Too Many Requests,需调整请求频率。