这篇文章介绍一下gitlab与项目相关的操作,我们会从api入手,学习项目的增删改查,如果通过gitlab的页面操作当然这些会很简单,但是如果在自己的项目中与gitlab的集成比较紧密的情况下,很多时候则可能需要通过调用api来自动完成一些操作,从这篇文章开始也会使用新的gitlab的版本,同时会将easypack上与gitlab-ce的关联版本进行更新。
gitlab的v3与项目相关的api
项番 | 说明 |
---|---|
No.1 | 列出所有项目 |
No.2 | 对某一项目进行增删查 |
No.3 | 获取项目事件 |
No.4 | 获取某一项目的所有成员列表 |
No.5 | 对某一成员进行增删改查 |
No.6 | 对项目的webhooks进行增删改查 |
No.7 | 获取所有分支信息 |
No.8 | 获取某一个分支信息 |
No.9 | 对分支进行保护操作或者取消保护操作 |
gitlab的v4与项目相关的api
gitlab目前的版本在gitlab9,而相关的api也升到了v4,相比之下,项目相关的功能有了如下的一些强化:
项番 | 说明 | 命令 |
---|---|---|
No.1 | 获取所有项目 | GET /projects |
No.2 | 获取制定用户的项目信息,会根据用户的权限显示其能所看到的 | GET /users/:user_id/projects |
No.3 | 显示某一特定项目 | GET /projects/:id |
No.4 | 获取某一项目的用户列表 | GET /projects/:id/users |
No.5 | 创建项目 | POST /projects |
No.6 | 为某个特定用户创建项目,此操作仅admin可用 | POST /projects/user/:user_id |
No.7 | 更新项目 | PUT /projects/:id |
No.8 | Fork一个项目 | POST /projects/:id/fork |
No.9 | 列出某一项目的fork信息,此功能为10.1版本引入 | GET /projects/:id/forks |
No.10 | 对某一项目进行加星 | POST /projects/:id/star |
No.11 | 取消对某一项目的加星 | POST /projects/:id/unstar |
No.12 | 对项目进行归档操作 | POST /projects/:id/archive |
No.13 | 撤销对项目的归档操作 | POST /projects/:id/unarchive |
No.14 | 删除某一指定项目包括所有关联资源比如issue和merge request等 | DELETE /projects/:id |
No.15 | 为merge request或者issue或者comment等操作提供上传文件操作 | POST /projects/:id/uploads |
No.16 | 为某个group设定项目共享 | POST /projects/:id/share |
No.17 | 删除为某个group提供的项目共享 | DELETE /projects/:id/share/:group_id |
No.18 | 获取项目hook列表 | GET /projects/:id/hooks |
No.19 | 获取某个特定项目的某个hook信息 | GET /projects/:id/hooks/:hook_id |
No.20 | 添加项目hook | POST /projects/:id/hooks |
No.21 | 更新项目hook信息 | PUT /projects/:id/hooks/:hook_id |
No.22 | 删除项目hook信息 | DELETE /projects/:id/hooks/:hook_id |
No.23 | 在既存的项目中创建fork关联 | POST /projects/:id/fork/:forked_from_id |
No.24 | 删除fork关联 | DELETE /projects/:id/fork |
No.25 | 按条件查询项目 | GET /projects通过search属性指定 |
No.26 | 对某个项目进行housekeeping操作,此功能为9.0开始引入 | POST /projects/:id/housekeeping |
No.26 | 列举某一项目仓库下的所有分支 | GET /projects/:id/repository/branches |
No.27 | 获取某一特定分支信息 | GET /projects/:id/repository/branches/:branch |
No.28 | 设定保护分支 | PUT /projects/:id/repository/branches/:branch/protect 此api在后续版本中将会被POST /projects/:id/protected_branches所代替 |
No.29 | 取消保护分支 | PUT /projects/:id/repository/branches/:branch/unprotect 此api在后续版本中将会被DELETE /projects/:id/protected_branches/:name所替代 |
No.30 | 创建项目仓库分支 | POST /projects/:id/repository/branches |
No.31 | 删除项目仓库分支 | DELETE /projects/:id/repository/branches/:branch |
No.32 | 获取项目成员列表信息 | GET /projects/:id/members 类似可用GET /groups/:id/members用于获得group成员列表信息 |
No.33 | 获取某一项目成员信息 | GET /projects/:id/members/:user_id 类似可用GET /groups/:id/members/:user_id获得某一group成员信息 |
No.34 | 添加某一项目成员信息 | POST /projects/:id/members 类似可用POST /groups/:id/members添加某一group成员信息 |
No.35 | 更新某一项目成员信息 | PUT /projects/:id/members/:user_id 类似可用PUT /groups/:id/members/:user_id更新某一group成员信息 |
No.36 | 删除某一项目成员信息 | DELETE /projects/:id/members/:user_id 类似可用DELETE /groups/:id/members/:user_id获得某一group成员信息 |
gitlab版本
可使用官方gitlab-ce镜像,也可以使用docker pull liumiaocn/gitlab的镜像,目前版本在10.4.2
[root@devops ~]# docker pull liumiaocn/gitlab
Using default tag: latest
latest: Pulling from liumiaocn/gitlab
1be7f2b886e8: Pull complete
...
Digest: sha256:fcca9cddd0506e91961a043561b40fb166dbdcd6f4a254d80853d4bb92cabed3
Status: Downloaded newer image for liumiaocn/gitlab:latest
[root@devops ~]#
事前准备
生成token
确认生成的token信息,因为只会显示一次,需要记住,token相当于用户名和密码的合集,千万注意要和银行卡密码一样进行慎重管理。
api使用
接下来将会使用api进行常见的项目操作
确认当前gitlab上的项目信息
[root@devops ~]# curl --request GET --header "PRIVATE-TOKEN: sqiSUhn3tHYXe8nSGRDi" "http://127.0.0.1:32001/api/v4/projects"
[][root@devops ~]#
可以看到返回的为[],一个空的列表集合
创建一个项目
创建项目的时候用POST的方法/projects即可,但需要指定至少name或者path中的一个,其余则会根据具体情况进行缺省设定,比如group或者namespace如果不指定或者获取不到信息则会缺省设定成当前用户的namespace,没有做特殊设定则是和用户名一致。
[root@devops ~]# curl --request GET --header "PRIVATE-TOKEN: sqiSUhn3tHYXe8nSGRDi" "http://127.0.0.1:32001/api/v4/projects"
[{
"id":1,"description":null,"name":"demodefaultprj","name_with_namespace":"Administrator / demodefaultprj","path":"demodefaultprj","path_with_namespace":"root/demodefaultprj","created_at":"2018-01-30T16:19:01.367Z","default_branch":null,"tag_list":[],"ssh_url_to_repo":"git@3ff5a6afdc80:root/demodefaultprj.git","http_url_to_repo":"http://3ff5a6afdc80/root/demodefaultprj.git","web_url":"http://3ff5a6afdc80/root/demodefaultprj","avatar_url":null,"star_count":0,"forks_count":0,"last_activity_at":"2018-01-30T16:19:01.367Z","_links":{
"self":"http://3ff5a6afdc80/api/v4/projects/1","issues":"http://3ff5a6afdc80/api/v4/projects/1/issues","merge_requests":"http://3ff5a6afdc80/api/v4/projects/1/merge_requests","repo_branches":"http://3ff5a6afdc80/api/v4/projects/1/repository/branches","labels":"http://3ff5a6afdc80/api/v4/projects/1/labels","events":"http://3ff5a6afdc80/api/v4/projects/1/events","members":"http://3ff5a6afdc80/api/v4/projects/1/members"},"archived":false,"visibility":"private","owner":{
"id":1,"name":"Administrator","username":"root","state":"active","avatar_url":"http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon","web_url":"http://3ff5a6afdc80/root"},"resolve_outdated_diff_discussions":false,"container_registry_enabled":true,"issues_enabled":true,"merge_requests_enabled":true,"wiki_enabled":true,"jobs_enabled":true,"snippets_enabled":true,"shared_runners_enabled":true,"lfs_enabled":true,"creator_id":1,"namespace":{
"id":1,"name":"root","path":"root","kind":"user","full_path":"root","parent_id":null},"import_status":"none","open_issues_count":0,"public_jobs":true,"ci_config_path":null,"shared_with_groups":[],"only_allow_merge_if_pipeline_succeeds":false,"request_access_enabled"