gitlab|gitlab 通过 api 批量增加用户
近期部门搭建了正式的 gitlab 服务器,在安全性和可靠性等方面相较之前线下的服务器都有了很好的提升。所以,迫切需要将线下 gitlab 的用户、项目等数据迁移到正式环境。关于项目迁移,分为两种情况,分别是全量备份和单 project 导入,本文不做详细分享,在这里重点分享下 gitlab 账户迁移的问题。1. 用户信息准备
用户信息整理的方式有很多种,这里省略。我们最终拿到的是 excel 形式的用户数据表,形如下图的形式:
文章图片
image.png 接下来,将 excel 转换为 utf-8 形式文本 userinfo.txt,方便我们后面通过脚本解析。导出的方式如下:
文章图片
image.png 转换后的形式如下:
文章图片
image.png 2. 方式一:手工批量增加
【gitlab|gitlab 通过 api 批量增加用户】通过web页面增加用户
http://172.20.5.36/admin/users/new
新增页面如下:
文章图片
image.png
此种方式费时费力,作为有逼格的技术人员当然不会采用。。。
而且,此种方式增加的用户,还需要登录之后强制修改密码,也是一件蛋疼的事情
3. 方式二:通过 gitlab api 写入用户
#!/bin/bash
#批量创建 gitlab 用户
userinfo="userinfo.txt"
while read line
do
password=`echo $line | awk '{print $1}'`
mail=`echo $line | awk '{print $2}'`
username=`echo $line | awk '{print $3}'`
name=`echo $line | awk '{print $4}'`
curl -d "password=$password&email=$mail&username=$username&name=$name&private_token=AH2zvaHy8txyWtUxMvyz" "http://172.20.5.36/api/v3/users"
# v4接口调用失败,不得已切换为 v3 接口,如果有朋友用 v4 接口 ok 的话,请不吝赐教
done <$userinfo
问题: 用这种方法可以成功注册用户,但注册的用户无法登陆,原因在于密码中存在乱码,怀疑是 ascii 转码问题,时间有限没有详细去分析切换到了下面一种实现。
4. 方式三:通过 python-gitlab 库写入用户
#!/bin/bash
# 安装 python-gitlab 库
git clone https://github.com/python-gitlab/python-gitlab
cd python-gitlab
sudo python setup.py install
安装完成之后,可以通过 python-gitlab 接口来实现与上面方案等价的功能,具体实现代码如下:
# encoding: utf-8
import gitlab
import sys#声明 gitlab 实例,采用private_token的形式来实现连接
gl = gitlab.Gitlab('http://172.20.5.36', private_token='FFbQs12313123eauof_EpVmaPcz', api_version=3)# 打开本地文件
f = open(r"/Users/xxxx/WorkSpace/temp/test/users.txt", "r")
line = f.readline()
while line:
# 分割每一行
temp = line.split(" ")
password = temp[0].decode('ascii','ignore').encode('utf-8')
email = temp[1]
username = temp[2]
name = temp[3]
user_data = https://www.it610.com/article/{'email':email, 'username':username, 'name':name, 'password':password}
user = gl.users.create(user_data)
print(user)
line = f.readline()
f.close()
注:
# encoding: utf-8,这一行的作用在于声明采用 utf-8 编码
最终效果:注册成功的用户可以顺利通过账号密码登陆 gitlab,并且不会被强制要求更改密码。
推荐阅读
- 2020-04-07vue中Axios的封装和API接口的管理
- gitlab|gitlab 通过备份还原 admin/runner 500 Internal Server Error
- gitlab|Gitlab升级(12.2.1到14.6.4)
- whlie循环和for循环的应用
- 【译】Rails|【译】Rails 5.0正式发布(Action Cable,API模式等)
- 如何通过锻炼的方法治疗前列腺肥大
- 通过复盘快速成长(附模板)
- ElasticSearch6.6.0强大的JAVA|ElasticSearch6.6.0强大的JAVA API详解
- MyBatis|MyBatis Generator配置
- 运维|如何限制IP 通过 SSH连接服务器