Gitlab基础

介绍

技术 特性 适用场景 说明
Gitlab - 官网
- Doc
- Github
- 社区版下载
- 企业版下载
- 官方Docker镜像
gitlab-runner 开源持续集成服务 - Github
- Doc
- 安装文档
- 使用文档
- 官方镜像
dpl 连续部署 - Gitlab
- Doc

GitLab 运维

安装 Gitlab

CPU选型

CPU核数 说明
1 支撑100个左右的用户
2 支撑500个用户(推荐)
4 支撑 2000 个用户
8 支撑 5000 个用户
16 支撑 10000 个用户
32 支撑 20000 个用户
64 支撑 40000 个用户

内存选型

内存 说明
512MB 最小化配置,不推荐。
1GB 支撑 100个左右的用户,会比较慢
2GB 支撑 100个左右的用户(开发、测试环境推荐)
4GB 支撑 1000 个用户
8GB 支撑 2000 个用户(生产环境推荐)
16GB 支撑 4000 个用户
32GB 支撑 8000 个用户
64GB 支撑 16000 个用户
128GB 支撑 32000 个用户

安装前提

  • 内存 ≥ 4GB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 安装依赖
$ yum install -y curl policycoreutils-python

# 安装 ssh
$ yum install -y openssh-server
$ systemctl enable sshd
$ systemctl start sshd

# 配置防火墙
## 开放ssh、http服务
$ sudo firewall-cmd --add-service=ssh --permanent
$ sudo firewall-cmd --add-service=http --permanent
## 重载防火墙规则
$ sudo firewall-cmd --reload

# 安装 Postfix 以发送通知电子邮件。
## 如果要使用其他解决方案发送电子邮件,请跳过此步骤, 并在安装GitLab之后配置外部SMTP服务器。
$ yum install postfix
$ systemctl enable postfix
$ systemctl start postfix

安装

CentOS7 中安装

1
2
3
4
5
6

# 安装
$ wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm/download.rpm
$ EXTERNAL_URL="http://172.18.30.62" yum -y localinstall gitlab-ce-12.3.5-ce.0.el7.x86_64.rpm

# 访问 Gitlab,默认 username 是 root

Docker 中安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ vim docker-compose.yml
##### 内容如下 #####
version: "3"

services:
web:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.100.103'
# email setting
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "my.email@gmail.com"
gitlab_rails['smtp_password'] = "my-gmail-password"
gitlab_rails['smtp_domain'] = "smtp.gmail.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
ports:
- '80:80'
- '443:443'
- '33:22'
volumes:
- './gitlab/config:/etc/gitlab'
- './gitlab/logs:/var/log/gitlab'
- './gitlab/data:/var/opt/gitlab'
#### 内容结束 #####

$ docker-compose up -d

基础命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 检查在gitlab中是否有任何配置。在指定版本中删除的rb
$ gitlab-ctl check-config

# 安装部署页面
$ gitlab-ctl deploy-page

# 将用户配置与包可用配置进行比较
$ gitlab-ctl diff-config

# 删除所有用户和组
$ gitlab-ctl remove-accounts

# 升级
$ gitlab-ctl upgrade

# 查看所有服务
$ gitlab-ctl service-list

# 如果GitLab服务停止了就启动服务,如果已启动就不做任何操作
$ gitlab-ctl once

# 重启
$ gitlab-ctl restart

# 如果GitLab服务停止了就启动服务,如果已启动就重启服务
$ gitlab-ctl start

# 停止GitLab服务
$ gitlab-ctl stop

# 查看GitLab服务状态
$ gitlab-ctl status

# 重新配置并启动
$ gitlab-ctl reconfigure

# 监听并打印日志(用于测试、调试)
gitlab-ctl tail

修改 IP 和 端口

1
2
3
4
5
6
7
8
9
# 修改 ip 和 port
$ vim /etc/gitlab/gitlab.rb
##### 修改如下内容 #####
# 这里可以是ip,也可以是域名
external_url 'http://172.18.30.62'
##### 内容结束 #####

# 重新配置并启动
$ gitlab-ctl reconfigure

设置语言

【Settings】->【Preferences】->【Localization】->【Language】-> 简体中文 -> 【Save changes】

配置邮件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$ vim /etc/gitlab/gitlab.rb
##### 修改如下内容 #####
### Email Settings
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.partner.outlook.cn"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "systemadmin@xxx.com"
gitlab_rails['smtp_password'] = "mypassword"
gitlab_rails['smtp_domain'] = "xxx.com"
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
#配置邮箱来源, 与展示的名称
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'systemadmin@xxx.com'
gitlab_rails['gitlab_email_display_name'] = 'Gitlab'
##### 内容结束 #####

# 重新配置并启动
$ gitlab-ctl reconfigure

# 进入控制台
$ gitlab-rails console

# 发送测试邮件
## 语法
$ Notify.test_email('收件人邮箱', '邮件标题', '邮件正文').deliver_now
$ Notify.test_email('iamwanglibing@qq.com', 'Gitlab邮件配置测试', '这是一个Gitlab邮件配置的测试').deliver_now

# 添加邮件

## 【设置】-> 【电子邮件】-> 【Add email address】

# 配置通知邮件

## 【设置】-> 【通知】-> 【选择】Notification email

关闭 Auto DEVOPS

【Settings】->【CI / CD】-> Auto DevOps -> Expand -> 取消勾选Default to Auto DevOps pipeline

禁用创建组权限

GitLab默认所有的注册用户都可以创建组。 但对于团队来说,通常只会给Leader相关权限。 我们可以通过配置GitLab默认禁用创建组权限。

1
2
3
4
5
6
7
$ vim /etc/gitlab/gitlab.rb
##### 修改如下内容 #####
gitlab_rails['gitlab_default_can_create_group'] = false
##### 内容结束 #####

# 重新配置并启动
$ gitlab-ctl reconfigure

删除项目

project => Settings => Advanced settings

配置 SSH Keys

1
2
3
4
# 生成 SSH Key
$ ssh-keygen -t rsa -C "your_email@example.com"
$ cat /root/.ssh/id_rsa
# 【Settings】-> 【SSH Keys】-> 【Add key】

配置变量

【设置】->【CI/CD】->【变量】

配置 pipeline 邮件通知

【设置】->【集成】->【流水线电子邮件】

迁移

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 备份
$ gitlab-rake gitlab:backup:create RAILS_ENV=production
$ mkdir /usr/local/gitlabback/ -p
$ cp /etc/gitlab/gitlab.rb /usr/local/gitlabback/
$ cp /etc/gitlab/gitlab-secrets.json /usr/local/gitlabback/
# 查看备份后的文件
$ cd /var/opt/gitlab/backups
$ ls
1571451811_2019_10_19_12.3.5_gitlab_backup.tar

# 恢复数据(新服务器)
## 将1571451811_2019_10_19_12.3.5_gitlab_backup.tar复制到新服务器的/usr/local/gitlabback/1571451811_2019_10_19_12.3.5_gitlab_backup.tar
$ chown git 1571451811_2019_10_19_12.3.5_gitlab_backup.tar
$ gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=1571451811_2019_10_19_12.3.5

Gitlab-Runner 运维

安装 gitlab-runner

安装前提

CentOS7 中安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$ wget --content-disposition https://packages.gitlab.com/runner/gitlab-runner/packages/ol/7/gitlab-runner-12.3.0-1.x86_64.rpm/download.rpm
$ yum -y localinstall gitlab-runner-12.3.0-1.x86_64.rpm
$ gitlab-ci-multi-runner -v
$ gitlab-ci-multi-runner -h

# 删除旧版本git
$ yum remove git -y

# 安装新版本git
## centos7 基础仓库,提供的 git 版本只有到 1.8.3,沒办法使用 git 2 的一些新功能
## 安装3方yum 源
$ yum install https://centos7.iuscommunity.org/ius-release.rpm

## 安装新版本git
$ yum install git2u -y

## 验证版本
$ git --version

# 重新安装runner
$ yum -y localinstall gitlab-runner-12.3.0-1.x86_64.rpm

$ vim /etc/systemd/system/gitlab-runner.service
##### 修改如下内容 ####
ExecStart=/usr/lib/gitlab-runner/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--syslog" "--user" "gitlab-runner"
##### 内容结束 #####

# 修改为:

##### 新内容 #####
ExecStart=/usr/lib/gitlab-runner/gitlab-runner "run" "--working-directory" "/home/gitlab-runner" "--config" "/etc/gitlab-runner/config.toml" "--service" "gitlab-runner" "--syslog" "--user" "root"
##### 内容结束 #####

# 重启
$ systemctl daemon-reload
$ systemctl restart gitlab-runner

# 查看 gitlab-runner 的执行用户
$ ps aux|grep gitlab-runner

Docker 安装

MacOS

1
2
3
4
5
6
$ docker pull gitlab/gitlab-runner
$ docker run -d --name gitlab-runner --restart always \
-v /Users/Shared/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
$ docker exec -it gitlab-runner gitlab-runner register

Linux

1
2
3
4
5
6
$ docker pull gitlab/gitlab-runner
$ docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
$ docker exec -it gitlab-runner gitlab-runner register

注册Runner

查找 token

【Settings】->【CI / CD】-> 【Runners】-> 【Expand】

基础命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查看注册列表
$ gitlab-ci-multi-runner list

# 注册 Runner
$ gitlab-ci-multi-runner register
Runtime platform arch=amd64 os=linux pid=2760 revision=a8a019e0 version=12.3.0
Running in system-mode.

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://172.18.30.152
Please enter the gitlab-ci token for this runner:
1WJsMVpWt9eKTcMNPY7L
Please enter the gitlab-ci description for this runner:
[bj3]: SpringCloudGatewayRunner
Please enter the gitlab-ci tags for this runner (comma separated):

Registering runner... succeeded runner=1WJsMVpW
Please enter the executor: shell, virtualbox, docker+machine, docker-ssh+machine, kubernetes, custom, docker-ssh, parallels, docker, ssh:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

# 删除注册
$ gitlab-ci-multi-runner unregister --name "名称"

# 查看 runner 配置
$ cat /etc/gitlab-runner/config.toml

预定义环境变量

参考 预定义环境变量参考

配置 gitlab-runner 账户

1
2
3
4
5
6
7
8
9
10
11
$ user add gitlab-runner
$ passwd gitlab-runner
$ gpasswd -a gitlab-runner docker
$ visudo
##### 增加如下内容 #####
gitlab-runner ALL=(ALL) NOPASSWD:ALL
##### 内容结束 #####

# 测试
$ su gitlab-runner
$ sudo ls

gitlab-runner 更改执行用户为 root

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看 gitlab-runner 的执行用户
$ ps aux|grep gitlab-runner
## --working-directory: 设置工作目录, 默认是/home/{执行user}
## --config: 设置配置文件目录,默认是/etc/gitlab-runner/config.toml
## --user: 设置执行用户名,默认是gitlab-runner

# 删除gitlab-runner
$ gitlab-runner uninstall

# 安装并设置为root
$ gitlab-runner install --working-directory /home/gitlab-runner --user root

# 重启gitlab-runner
$ service gitlab-runner restart
$ systemctl start gitlab-runner

# 验证
$ ps aux|grep gitlab-runner

取消Default to Auto DevOps pipeline for all projects

【Admin areas】—>【Settings】—>【CI/CD】取消Default to Auto DevOps pipeline for all projects的选择框,点击保存。

Shell 中配置免密登陆

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sudo su gitlab-runner

# 生成密钥
## 生成RSA密钥
$ ssh-keygen -t rsa -b 4096 -C "email@example.com"

## 生成ED25519密钥
$ ssh-keygen -t ed25519 -C "email@example.com"

## 示例
$ ssh-keygen -t rsa -P ''

$ ssh-copy-id -i ~/.ssh/id_rsa.pub gitlab-runner@<romte_ip>
$ ssh "gitlab-runner@172.18.30.65"

.gitlab-ci.yml示例

示例1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
stages:
- package
- push
- deploy
- clean
- notify
package:
stage: package
script:
- mvn clean package
- cp target/springcloudgateway-1.0.jar docker
- cd docker
- docker build -t springcloudgateway .
push:
stage: push
script:
- echo "将镜像推送到镜像仓库"
deploy:
stage: deploy
script:
- cd docker
- docker-compose down
- docker-compose up -d
clean:
stage: clean
script:
- docker rmi $(docker images -q -f dangling=true)
notify:
stage: notify
script:
- echo "通知相关人员发布成功"

常见错误

gitlab-runner 总是 pending

错误描述

提交代码以后,gitlab-runner显示总是在pending状态。

解决办法

1
2
3
# 【Settings】->【CI / CD】-> 【Runners】
# -> 【Expand】-> 【编辑】-> 勾选 Run untagged jobs。
$ gitlab-ci-multi-runner restart

Got permission denied while trying to connect to the Docker daemon

错误描述

1
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/build?buildargs=%7B%7D&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7D&memory=0&memswap=0&networkmode=default&rm=1&session=y0ur3m786c248ag0b548n8ctt&shmsize=0&t=springcloudgateway&target=&ulimits=null&version=1: dial unix /var/run/docker.sock: connect: permission denied

错误分析

gitlab-runner执行时 是以 gitlab-runner用户来执行的,该用户不属于docker group 需将该用户加入该组。

解决办法

1
2
# 将gitlab-runner加入docker组
$ gpasswd -a gitlab-runner docker

git fetch-pack: expected shallow list

问题描述

1
2
3
4
5
6
7
8
9
Running with gitlab-runner 12.0.1 (0e5417a3)
on autobuild-02 qyhAY53y
Using Shell executor...
Running on xxxxx.novalocal...
Fetching changes with git depth set to 50...
Reinitialized existing Git repository in /home/gitlab-runner/builds/qyhAY53y/0/tangaoxiong/ci-hotupdate-demo/.git/
fatal: git fetch-pack: expected shallow list
fatal: The remote end hung up unexpectedly
ERROR: Job failed: exit status 1

问题分析

系统自带git版本过低。 ### 解决办法

1
2
3
4
# CentOS7 安装源
$ yum install http://opensource.wandisco.com/centos/7/git/x86_64/wandisco-git-release-7-1.noarch.rpm
$ yum install –y git
$ git --version

gitlab-runner一直处于pending状态

解决办法

1
2
3
$ gitlab-ci-multi-runner list
$ gitlab-ci-multi-runner verify
$ gitlab-ci-multi-runner restart

参考

坚持原创技术分享,您的支持将鼓励我继续创作!
0%