文章目录

  • 一、配置token
  • 二、调用API
  • 1、获取项目的projects
  • 2、常用接口-curl调用示例
  • 3、python-gitlab的示例



前提:代码使用gitlab管理,部署使用的是gitlab的CI/CD。日常开发发版会通知有权限的测试人员,大家权限不统一,所以准备开发一套工具,输入要部署的项目和流水号,直接触发部署。于是工具就需要调用gitlab的API


以下是本人使用的调用方法,仅供参考

一、配置token

要调用gitlabAPI,需要先配置一个token,具体步骤如下:

1、点击右上角的头像部分,选择Edit profile,会进入用户设置页面

python使用curl调用api python执行curl_服务器


2、选择“访问参数”,根据以下标注输入各项内容,点击创建,会生成一个访问令牌

python使用curl调用api python执行curl_服务器_02


3、生成token后一定要复制保存好,因为之后就看不到这个token了!!!

python使用curl调用api python执行curl_服务器_03

二、调用API

gitlabAPI的文档地址:https://docs.gitlab.com/ee/api/api_resources.html

1、获取项目的projects

gitlabAPI操作项目使用的是项目ID,获取项目ID的方式有:

方法一:
	在gitlab中打开你要操作的项目,会看到显示“项目ID”。如果要操作特定的项目,可以直接通过这种方式来获取ID

python使用curl调用api python执行curl_gitlab_04

方法二:
	可以使用接口直接查询账号下的所有project信息,用于批量处理
	curl --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects

2、常用接口-curl调用示例

①、获取所有project
curl --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects
-- 默认只会查询第一页数据,可以增加分页参数进行查询
curl --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects?per_page=20&page=2

②、获取所有group
curl --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/groups

③、获取group下project
-- 95 为group对应的ID
curl --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/groups/95/projects

④、获取项目下流水号的jobs
-- 353 为项目(project)对应的ID,63028 为流水号(pipelines)对应的ID
curl --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects/353/pipelines/63028/jobs"

⑤、查询单个job
-- 253973 为流水号中的job对应的ID
curl --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects/353/jobs/253973"

⑥、触发job
curl --request POST "http://127.0.0.1:9090/api/v4/projects/352/jobs/237546/play" --header "PRIVATE-TOKEN: xxxxxx"

⑦、取消job的created状态:
curl --request POST --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects/353/jobs/253964/cancel"

⑧、删除分支
-- branch_name 为要删除的分支名称
curl --request DELETE --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects/353/repository/branches/branch_name"

⑨、合并MR
-- 17 为和并请求的ID
curl --request PUT --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects/353/merge_requests/17/merge" 

⑩、删除MR
curl --request DELETE --header "PRIVATE-TOKEN: xxxxxx" "http://127.0.0.1:9090/api/v4/projects/353/merge_requests/17"

3、python-gitlab的示例

# 通过命令安装:pip install python-gitlab
import gitlab

# gitlabUrl 项目所在gitlab的域名地址;gitlabToken 上文所介绍生成的token
# 通过project_id获取project对象
project = gitlab.Gitlab('gitlabUrl', private_token='gitlabToken').projects.get('project_id')

# 创建分支,branch-分支名称;ref-源分支/commitID
project.branches.create({"branch": 'branch', "ref": 'ref'})

# 创建合并请求,source_branch-源分支;target_branch-目标分支;remove_source_branch-是否删除源分支
merge_request = project.mergerequests.create(
            {
                'source_branch': 'source_branch',
                'target_branch': 'target_branch',
                'title': '创建合并请求',
                'remove_source_branch': False
            }
        )
# 批准、合入
merge_request.approve()
merge_request.merge()

# 修改合并请求状态 'close' or 'reopen',并保存修改
merge_request.state_event = 'close'
merge_request.save()

由于涉及的业务范围较小,无法全面覆盖到API中的所有场景,如有问题和不足欢迎指正。