基本操作
基础配置
修改语言
修改整个 极狐GitLab 实例的默认语言
在 极狐GitLab 实例页面左侧边栏的底部,选择 Admin Area -> Settings -> Preferences -> Localization,然后选择您所需的默认语言,点击 Save changes 保存。
修改个人账户 极狐GitLab 实例的默认语言
在 极狐GitLab 实例页面左侧边栏的右上角,选择 头像 -> Preferences -> Localization,然后选择您所需的默认语言,点击 Save changes 保存。
修改后需要刷新页面才能查看更新后的语言。
修改管理员密码
在安装 极狐GitLab 实例时,没有配置初始密码的情况下,默认初始管理员密码是随机的一串字符不好记忆,需要修改密码。
密码更新成功后,您将被重定向到登录页面,您可以使用新密码重新登录。
修改时区
极狐GitLab 实例默认时区是 UTC
。
全局时区
全局时区有以下两种配置方法:
- 在安装 极狐GitLab 实例时配置时区参数。例如:
gitlab_rails['time_zone'] = 'Asia/Shanghai'
- 修改
/etc/gitlab/gitlab.rb
文件中gitlab_rails['time_zone']
参数值并重启 GitLab。例如:gitlab_rails['time_zone'] = 'Asia/Shanghai'
- 在安装 极狐GitLab 实例时配置时区参数。例如:
个人时区
在 极狐GitLab 实例页面左侧边栏的右上角,选择 头像 -> 编辑个人资料 -> 用户资料 -> 时间设置,然后选择您所需的时区,点击 更新个人资料设置 保存。
注册限制
刚安装的 极狐GitLab 实例默认允许任何人注册账户,应该限制注册。
点击 停用,跳转到 注册限制 页面;或在 极狐GitLab 实例页面左侧边栏的底部,选择 管理中心 -> 设置 -> 通用 -> 注册限制。
清除 已启用注册功能 复选框,然后在下面选择 保存更改。
配置 SMTP
如果您希望通过一个 SMTP 服务器发送应用邮件,而不是通过 Sendmail,需要在 /etc/gitlab/gitlab.rb
中添加以下配置信息,并执行 gitlab-ctl reconfigure
命令重新配置 GitLab 服务。
参考 极狐GitLab 官网 SMTP 配置。
配置网易 163 邮箱
例如:配置网易 163 邮箱 SMTP 服务,修改 /etc/gitlab/gitlab.rb
文件中以下配置信息:
gitlab_rails['smtp_enable'] = true # 启用 SMTP 服务
gitlab_rails['smtp_address'] = "smtp.163.com" # 配置 SMTP 服务器地址
gitlab_rails['smtp_port'] = 465 # 配置 SMTP 服务的端口号
gitlab_rails['smtp_user_name'] = "xxx@163.com" # 配置 SMTP 服务器身份验证用户名
gitlab_rails['smtp_password'] = "smtp password" # 配置 SMTP 授权码
gitlab_rails['smtp_domain'] = "smtp.163.com" # 配置 SMTP 服务的域名
gitlab_rails['smtp_authentication'] = "login" # 配置 SMTP 认证方法
gitlab_rails['smtp_enable_starttls_auto'] = false # 禁用 SMTP 服务器的 STARTTLS 自动启用,通常使用端口 587
gitlab_rails['smtp_tls'] = true # 启用 TLS(传输层安全性),通常使用端口 465
gitlab_rails['smtp_pool'] = true # 启用 SMTP 连接池
gitlab_rails['smtp_openssl_verify_mode'] = 'peer' # 配置 OpenSSL 的验证模式
gitlab_rails['gitlab_email_from'] = 'xxx@163.com' # 配置 GitLab 发送电子邮件时所使用的地址
gitlab_rails['gitlab_email_display_name'] = "My GitLab Server" # 配置 GitLab 在发出的电子邮件中的显示名称
smtp_authentication:用于设置 SMTP 服务器认证方法
- login:使用登录类型的认证
- plain:使用明文认证
- cram_md5:使用 CRAM-MD5 认证
- gssl:使用 GSSAPI 认证
smtp_openssl_verify_mode:通常,建议设置为
peer
或none
,具体取决于您是否信任您的 SMTP 服务器- none:不检查证书的有效性
- peer:检查证书的有效性,但不是客户端证书
- client_once:检查证书的有效性,并要求客户端证书
- fail_if_no_peer_cert:如果没有收到证书,会断开连接
- client_once:类似
fail_if_no_peer_cert
,但是如果没有收到证书,会继续连接
执行 gitlab-ctl reconfigure
命令重新配置 GitLab 服务。
测试 SMTP 配置
可以使用 Rails 控制台验证是否可以正确发送电子邮件。
在 极狐GitLab 服务器上,执行 gitlab-rails console
命令进入控制台。然后,您可以在控制台提示符下输入以下命令,以使系统发送测试电子邮件:
Notify.test_email('destination_email@address.com', 'Message Subject', 'Message Body').deliver_now
使用加密凭据
引入于 14.3 版本。选择使用加密文件作为 SMTP 凭据,而不是将 SMTP 凭据以纯文本形式存储在配置文件中。
加密文件支持的配置项有:
user_name
:对应gitlab_rails['smtp_user_name']
参数password
:对应gitlab_rails['smtp_password']
参数
编辑加密的
secret
sudo gitlab-rake gitlab:smtp:secret:edit EDITOR=vim
SMTP secret 的未加密内容应输入如下:
user_name: 'smtp user' password: 'smtp password'
编辑
/etc/gitlab/gitlab.rb
并删除smtp_user_name
和smtp_password
的设置重新配置 极狐GitLab
sudo gitlab-ctl reconfigure
添加 SSH 密钥
在 极狐GitLab 服务器中生成 SSH 密钥:
ssh-keygen -t rsa
在 极狐GitLab 实例页面左侧边栏的右上角,选择 头像 -> 编辑个人资料 -> 用户资料 -> SSH 密钥。
点击 添加新密钥。将刚生成的 SSH 公钥文件(id_rsa.pub
)内容复制到 GitLab SSH 中。点击 添加密钥。
cat ~/.ssh/id_rsa.pub
基本操作
创建用户
管理员可以手动创建用户:
在 极狐GitLab 实例页面左侧边栏的底部,选择 管理中心 -> 用户 -> 新用户。
- 名称:用于 GitLab 页面显示名。例如:
Administrator
- 用户名:用于 GitLab 登录。例如:
root
- 电子邮箱:用于连接用户邮箱
- 访问级别:普通、管理员
重置链接会发送到用户的电子邮件,他们必须在首次登录时设置密码。
要在不依赖电子邮件确认的情况下设置用户密码,点击 编辑,配置用户初始密码。
配置用户初始密码,点击 保存更改。
创建群组
在 极狐GitLab 实例页面左侧边栏的左上角,选择 极狐图像 -> 群组 -> 新建群组。
选择 创建群组。
选择输入以下内容 创建群组:
群组名称:组名必须以字母、数字、表情或下划线开头,可以包含句点、破折号、空格和括号
群组 URL:输入群组的路径,该路径用于命名空间
可见性级别:
- 私有:群组及其项目只能由成员查看
- 内部:除外部用户外,任何登录用户均可查看该群组和任何内部项目
- 公开:群组和任何公开项目可以在没有任何身份验证的情况下查看
个性化您的 GitLab 体验:
- 您的角色是什么:软件开发人员、开发团队负责人、DevOps 工程师、系统管理员、安全分析师、数据分析、产品经理、产品设计师、其他
- 谁在使用这个群组:我的公司或团队、仅我自己
- 您用这个群组来做什么:我想学习 Git 基础知识、我想把我的仓库从其它地方移动到 GitLab、我想存储我的代码、我想探索 GitLab,看看是否值得切换到这里、我想在我的现有仓库上使用 GitLab CI、一个不同的原因
邀请 极狐GitLab 成员或其他用户加入群组
在 极狐GitLab 中,您可以使用群组同时管理一个或多个相关项目。对群组的操作(如:创建群组、删除群组、添加用户到群组等)可以参考 极狐GitLab 官网群组文档。
创建项目
在 极狐GitLab 实例页面左侧边栏的左上角,选择 极狐图像 -> 项目 -> 创建项目。
选择 创建空白项目。
选择输入以下内容 创建项目:
- 项目名称:必须以小写或大写字母、数字、表情符号或下划线开头。也可以包含点、加号、破折号或空格
- 项目 URL:选择项目所在的群组
- 项目标识串:输入项目的路径
- 可见性级别:私有、内部、公开
- 项目配置
分支保护
团队开发时为了避免一些重要的开发分支(main)被意外篡改,管理人员需要将这些重要的分支设置分支保护,这样普通开发人员就不能直接对代码进行推送和合并,需要专门的分支管理人员(开发组长)维护重要分支的提交或合并操作。main
分支默认受保护。
将用户添加到项目
将用户添加到项目中,以便他们成为成员并有权执行操作。
在 极狐GitLab 实例页面左侧边栏的左上角,选择 极狐图像 -> 项目 -> 选择要添加用户的项目(例如:test_demo) -> 管理 -> 成员 -> 邀请成员。
用户名
选择角色:角色权限依次递增。访客(
10
) -> 报告者(20
) -> 开发者(30
) -> 维护者(40
) -> 拥有者(50
)- Guest(访客):可以创建 issue、发表评论,不能访问项目的私有分支和查看代码
- Reporter(报告者):可以克隆项目、创建 issue、发表评论,不能推送到非保护分支
- Developer(开发者):可以克隆项目、创建 issue、发表评论,可以推送到非保护分支,可以接收已合并的代码
- Maintainer(维护者):可以克隆项目、创建 issue、发表评论、推送到非保护分支、接收已合并的代码,还可以推送到保护分支、删除未保护的分支和标签
- Owner(拥有者):可以管理项目、包括更改项目设置、删除项目等操作
访问到期日期(可选)
管理员用户上传代码
使用管理员用户(root
)登录 GitLab 服务器。
将 test_demo
项目使用 SSH 克隆到本地。
git clone ssh://git@10.1.1.10/tests/test_demo.git
设置 Git 用户和邮箱:
cd test_demo
git config user.name "Administrator"
git config user.email "root@example.com"
在 test_demo
项目中添加文件并上传:
touch hello.sh
echo "echo 'Hello World!'" > hello.sh
chmod +x hello.sh
git add hello.sh
git commit -m "add hello.sh"
vim README.md
git add README.md
git commit -m "change README.md"
git push origin main
刷新 GitLab 中 test_demo
项目页面,查看上传的文件及脚本。
普通开发用户上传代码
使用普通开发用户(zhangsan
)登录 GitLab 服务器。配置普通开发用户(zhangsan
)SSH 密钥。
将 test_demo
项目使用 SSH 克隆到本地。
git clone ssh://git@10.1.1.10/tests/test_demo.git
设置 Git 用户和邮箱:
cd test_demo
git config user.name "zhangsan"
git config user.email "zhangsan@example.com"
在 test_demo
项目中添加文件并上传:
touch test
echo "test" > test
git add test
git commit -m "add test"
git push origin main
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: GitLab: You are not allowed to push code to protected branches on this project.
To ssh://10.1.1.10/tests/test_demo.git
! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'ssh://git@10.1.1.10/tests/test_demo.git'
普通开发用户(zhangsan
)无法上传到 main
分支,main
分支默认受保护。
普通开发用户(zhangsan
)创建分支,并推送到远程仓库。
git branch dev
git push -u origin dev:dev
在 GitLab 页面,查看 test_demo
项目 dev
分支。
创建从 dev
到 main
合并分支请求,点击 创建合并请求。
使用管理员用户(root
)登录 GitLab 服务器。查看合并请求,检查代码,没有问题就同意合并请求并删除 dev
分支。
查看 test_demo
项目 main
分支,确认已经合并 dev
分支。
刷新 GitLab 中 test_demo
项目页面,查看上传的文件及脚本。
创建标签
在 Git 中,tag
是标记存储库历史记录中特定提交的一种方式。tag
通常用于标记项目的特定版本。
例如:对于版本 10.5.7
:
- 10:代表主要版本。主要版本是
10.0.0
,但通常称为10.0
- 5:代表小版本。次要版本是
10.5.0
,但通常称为10.5
- 7:表示补丁编号
版本号的任何部分都可以是多个数字,例如:13.10.11
。
可以从命令行或 GitLab 页面创建标签。
命令行
创建轻量级标签,使用
git tag [TAG_NAME]
命令,将TAG_NAME
更改为您想要的标签名称git tag v1.0.0 git push origin v1.0.0
创建注释的标签,使用
git tag -a [TAG_NAME] -m "Message"
命令git tag -a v1.0.0 -m "Version v1.0.0" git push origin v1.0.0
GitLab 页面
在 极狐GitLab 实例页面左侧边栏的左上角,选择 极狐图像 -> 项目 -> 选择要添加用户的项目(例如:test_demo) -> 代码 -> 标签 -> 新建标签。
添加标签名称、选择分支、添加标签消息
备份 GitLab
参考 官网 GitLab 备份。
您的软件或组织取决于 GitLab 实例中的数据。您需要确保此数据免受不良事件的影响,例如:
- 数据损坏
- 意外删除数据
- 勒索软件攻击
- 云提供商意外停机
可以通过包含备份的灾难恢复计划来减轻所有这些风险。
Linux 安装备份
备份 GitLab 的配置文件
使用
gitlab-ctl backup-etc
命令用于在进行系统升级或配置更改之前,你可能想要备份当前的配置。GitLab 会将/etc/gitlab
目录下的所有配置文件打包成一个.tar
文件,并将其存储在/etc/gitlab/config_backup
目录下。这个命令不会备份数据库或其他数据,只关注配置文件。如果您希望备份全部的配置文件到一个指定的目录,您可以使用
--backup-path <DIRECTORY>
参数来指定备份文件的保存路径,例如:sudo gitlab-ctl backup-etc --backup-path /data/gitlab/backups
此外,
backup-etc
命令不会删除旧的备份文件,除非您使用--delete-old-backups
参数。备份 GitLab 的数据
使用
gitlab-backup create
命令用于恢复整个 GitLab 实例。GitLab 会创建一个包含数据库、上传文件和其他相关数据的完整备份,并将其保存为一个.tar
文件,通常位于gitlab_rails['backup_path']
所指定的路径下,默认是/var/opt/gitlab/backups
。这个备份文件包含了恢复 GitLab 实例所需的所有数据,包括数据库、附件和配置文件的当前状态。
sudo gitlab-backup create
gitlab-ctl backup-etc
主要用于备份配置文件,而 gitlab-backup create
则用于创建包含数据和配置文件的完整备份。
Docker 安装备份
备份应用程序数据
sudo docker exec -t <container name> gitlab-backup create
备份配置文件和机密
docker exec -t <container name> /bin/sh -c 'gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /data/gitlab/backups/'
恢复
您只能将备份恢复到与创建备份的 GitLab 版本和类型(CE 或 EE)完全相同的版本。
如果您的备份与当前安装的版本不同,您必须在恢复备份之前降级或升级 GitLab。
必须恢复 GitLab 机密
要恢复备份,您还必须恢复 GitLab Secrets
。其中包括数据库加密密钥、CI/CD 变量以及用于双因素身份验证的变量。如果没有密钥,就会出现多种问题,包括启用了双因素身份验证的用户失去访问权限,并且 GitLab 运行者无法登录。
恢复:
/etc/gitlab/gitlab-secrets.json
(Linux 软件包安装)/home/git/gitlab/.secret
(自行编译安装)
Linux 安装恢复
此过程假设:
- 您安装的 GitLab 版本和类型(CE/EE)与创建备份时的版本和类型完全相同
- 至少执行过一次
sudo gitlab-ctl reconfigure
命令 - GitLab 正在运行。如果没有,使用
sudo gitlab-ctl start
命令启动
首先确保您的备份 tar
文件位于 gitlab.rb
配置中描述的 gitlab_rails['backup_path']
备份目录中。默认为 /var/opt/gitlab/backups
备份文件需要归 git
用户所有。
sudo cp 1715136572_2024_05_08_16.11.1-jh_gitlab_backup.tar /var/opt/gitlab/backups/
sudo chown git:git /var/opt/gitlab/backups/1715136572_2024_05_08_16.11.1-jh_gitlab_backup.tar
停止连接到数据库的进程。让 GitLab 的其余部分保持运行:
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
# 验证
sudo gitlab-ctl status
接下来,确保您已完成恢复先决条件 gitlab-ctl reconfigure
步骤,并在从原始安装复制 GitLab 机密文件后运行。
接下来恢复备份,指定要恢复的备份的 ID:
sudo gitlab-backup restore BACKUP=1715136572_2024_05_08_16.11.1-jh
此命令将覆盖 GitLab 数据库的内容,名称中省略了 _gitlab_backup.tar
。
接下来,重新启动并检查 GitLab:
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check SANITIZE=true
验证数据库值是否可以解密,特别是在 /etc/gitlab/gitlab-secrets.json
已还原的情况下,或者如果还原的目标是不同的服务器。
sudo gitlab-rake gitlab:doctor:secrets
为了增加保证,您可以对上传的文件执行完整性检查:
sudo gitlab-rake gitlab:artifacts:check
sudo gitlab-rake gitlab:lfs:check
sudo gitlab-rake gitlab:uploads:check
Docker 安装恢复
如果您使用 Docker Swarm,容器可能会在恢复过程中重新启动,因为 Puma 已关闭,因此容器运行状况检查失败。要解决此问题,请暂时禁用运行状况检查机制。
编辑
docker-compose.yml
healthcheck: disable: true
部署堆栈
docker stack deploy --compose-file docker-compose.yml mystack
恢复任务可以从主机运行:
# 停止连接到数据库的进程
docker exec -it <container name> gitlab-ctl stop puma
docker exec -it <container name> gitlab-ctl stop sidekiq
# 继续之前,验证流程是否全部关闭
docker exec -it <container name> gitlab-ctl status
# 运行恢复。注意:名称中省略了 "_gitlab_backup.tar"
docker exec -it <container name> gitlab-backup restore BACKUP=1715136572_2024_05_08_16.11.1-jh
# 重新启动 GitLab 容器
docker restart <container name>
# 检查 GitLab
docker exec -it <container name> gitlab-rake gitlab:check SANITIZE=true