这是我参与8月更文挑战的第19天,活动详情查看:8月更文挑战
安装
根据官网文档( about.gitlab.com/install/#ce… ),稍作改动,可以顺利安装完成。。这里以安装社区版,基于centos7系统为例
需要安装最新版本的openssh和postfix
yum install -y curl policycoreutils-python openssh-server perl
yum install postfix -y
systemctl enable postfix
systemctl start postfix
安装社区版本,将ee改成ce,安装的时域名根据自已的指定,如果没有域名。完成安装后,hosts的配置 为服务器IP gitlab.example.com
#添加ce仓库
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
#安装
EXTERNAL_URL="https://gitlab.example.com" yum install -y gitlab-ce
大概等个10分钟,就完成安装了,直接网页访问服务器IP 登陆,用户root,密码在/etc/gitlab/initial_root_password
访问令牌
想要访问gitlab的api,须要提前创建好访问令牌,以及权限(这里为了测试,全选了),如下图:
客户端
官方提供的调用方式就是域名接 路径,没有提供相关的client包,所在github找了一个1.4k星星的client包
gitlab client地址: github.com/xanzy/go-gi…
错误处理
client页面上提供了入门例子,但是因为我这个gitlab是私人的,https证书是无效的,在页面点一下高级继续前往可以,但是代码就错了: # x509: certificate signed by unknown authority
然后在Issues 找到了解决方案,自创建一个http客户端,设置跳过失效的ssl证书既可
transCfg := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // ignore expired SSL certificates
}
httpClient := &http.Client{
Transport: transCfg,
}
创建客户端
按照示例创建一个客户端,并传了访问令牌,gitlab地址和新的http配置
git, err := gitlab.NewClient("访问令牌",gitlab.WithBaseURL("https://gitlab.example.com/api/v4"),gitlab.WithHTTPClient(httpClient))
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
查看用户列表
调用方法,可以看到代码语义化很好,基本上能看出是啥意思。。这里要求传参一个指针类型的ListUsersOptions结构体,要查询所有用户,空结构体既可
users,_,err := git.Users.ListUsers(&gitlab.ListUsersOptions{})
if err != nil {
log.Fatalln("查看用户错误", err)
}
输出结果
拿到的结果是一个切片,需要循环遍历出来,直接将value里面的name值打印既可
for _,v := range users {
fmt.Println(v.Name)
}
一个简单的例子到这里就结束了,接下来看看其它方法的使用
文档
该client 在每个方法的源码上方 都有该方法的gitlab官方文档说明注释,如ListUsers方法
增删锁查例子
以用户为例子,写一个用户的增删锁查例子,其它方法都差不多
package main
import (
"crypto/tls"
"fmt"
"github.com/xanzy/go-gitlab"
"log"
"net/http"
)
func main() {
transCfg := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // ignore expired SSL certificates
}
httpClient := &http.Client{
Transport: transCfg,
}
git, err := gitlab.NewClient("访问令牌",gitlab.WithBaseURL("https://gitlab.example.com/api/v4"),gitlab.WithHTTPClient(httpClient))
if err != nil {
log.Fatalf("Failed to create client: %v", err)
}
//增加一个用户
u := &gitlab.CreateUserOptions{
Email: gitlab.String("test@gitlab.com"),
Name: gitlab.String("test2"),
Username: gitlab.String("test"),
Password:gitlab.String("Test12345"),
}
addUser,_,err := git.Users.CreateUser(u)
if err != nil {
fmt.Println("创建用户错误: ",err)
}
log.Println(addUser)
//获取用户id
var userId int
users,_,err := git.Users.ListUsers(&gitlab.ListUsersOptions{})
if err != nil {
fmt.Println("获取用户列表错误: ",err)
}
for _,v := range users{
if v.Name == "test" {
log.Println(v.ID)
userId = v.ID
}
}
//锁定一个用户
_ = git.Users.BlockUser(userId)
//解锁一个用户
_ = git.Users.UnblockUser(userId)
//删除一个用户
_,err = git.Users.DeleteUser(userId)
if err != nil {
fmt.Println("删除用户错误: ",err)
}
}
总结
gitlab client包,代码语义化非常好,即使没有文档,也可以根据名称来调用,况且每个方法还有注释文档地址,用起来一点压力没有