Python集成Gitlab调用API
Gitlab API
查看Gitlab版本
- gitlab
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
# 或者
gitlab-rake gitlab:env:info
- postgresql
/opt/gitlab/embedded/bin/psql --version
Gitlab API版本
见官方文档说明(https://docs.gitlab.com/ee/api/README.html#current-status https://gitlab.com/gitlab-org/gitlab-foss/issues/36819):
Currently only API version v4 is available. Version v3 was removed in GitLab 11.0.
认证连接
这里采用的是:Personal access tokens
Gitlab页面位置:profiles settings > account > Personal access tokens
测试连接:[schema]://domain/api/[gitlab_api_version]/projects?private_token=[private_token] 例如:http://git.caiya.com/api/v3/projects?private_token=dQUuPHK6xPUS4a3tBK7Z
集成到python
使用三方库 python-gitlab
注意,此处使用的三方库是python-gitlab,而不是gitlab(如果安装了gitlab,要先卸载两者,再安装python-gitlab;不然冲突)
具体用法略(文末看文档)
与Git服务器交互
交互方式
- http/https协议(每次需要输入git账号密码)
- ssh协议(免密)
ssh协议时常见问题
问题一:多个账号免密交互(一台机器上使用多个gitlab账号分别与多个git服务器免密交互;在本机开发或部署发布系统机器时都可能面临此问题) 单个账号与一个ssh key对应,无法多账号添加同一个ssh key(参考:https://gitlab.com/gitlab-com/support-forum/issues/143):
Key has already been taken
Fingerprint has already been taken
解决(在类unix操作系统下):
# 执行以下命令生成加密文件(前提 ~/.ssh/ 目录存在 id_rsa和id_rsa.pub文件,注意交互式命令行的提示,重命名新加的ssh key文件名,如:~/.ssh/id_rsa_two)
ssh-keygen -t rsa -C "your_email"
# 在 ~/.ssh 目录下新建文件config(覆盖默认的/etc/ssh/ssh_config),并编辑:
vim config
# 内容如下(Host:别名;HostName:与git交互式真正的服务器;User:自定义用户名;PreferredAuthentications:优选使用的验证方式;IdentityFile:密钥文件):
# git server one
Host git1.caiya.com
HostName git1.caiya.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# git server two
Host git2.caiya.com
HostName git2.caiya.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_two
# 将前面生成的公钥填写到Gitlab页面中:
cat ~/.ssh/id_rsa_two.pub
# 复制以上内容,前往Gitlab:profile settings > ssh keys > add an ssh key,输入key,键入title字段栏,页面自动填入key最后的邮箱地址
# 当然,title是可以更改的。
# 测试:
ssh -T git1.caiya.com
ssh -T git2.caiya.com
# 使用:
git clone git@git1.caiya.com:project_group1/project1.git
git clone git@git2.caiya.com:project_group2/project2.git
其他可能需要的
服务器之间免密登录(A免密访问B:将A服务器ssh key公钥添加到B服务器的 ~/.ssh/authorized_keys 文件中)
ssh key更新时,git clone ssh协议的仓库地址需要交互(解决:https://yq.aliyun.com/articles/6827):
MacBook-Pro:devopstemp wangnan$ git clone git@git.caiya.com:mall/config-server.git
Cloning into 'config-server'...
The authenticity of host 'git.caiya.com (x.x.x.x)' can't be established.
ECDSA key fingerprint is SHA256:rvkAdv5BUI2hxt7HvP0OKMFr2/Py0MX97K2/yVGuBX4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'git.caiya.com,x.x.x.x' (ECDSA) to the list of known hosts.
remote: Counting objects: 91, done.
remote: Compressing objects: 100% (45/45), done.
remote: Total 91 (delta 27), reused 86 (delta 25)
Receiving objects: 100% (91/91), 53.80 KiB | 3.16 MiB/s, done.
Resolving deltas: 100% (27/27), done.

278



被折叠的 条评论
为什么被折叠?



