**免责声明:**本服务由第三方提供,我们尽力确保其安全性、准确性和可靠性,但无法保证其完全免于故障、中断、错误或攻击。因此,本公司在此声明:对于本服务的内容、准确性、完整性、可靠性、适用性以及及时性不作任何陈述、保证或承诺,不对您使用本服务所产生的任何直接或间接的损失或损害承担任何责任;对于您通过本服务访问的第三方网站、应用程序、产品和服务,不对其内容、准确性、完整性、可靠性、适用性以及及时性承担任何责任,您应自行承担使用后果产生的风险和责任;对于因您使用本服务而产生的任何损失、损害,包括但不限于直接损失、间接损失、利润损失、商誉损失、数据损失或其他经济损失,不承担任何责任,即使本公司事先已被告知可能存在此类损失或损害的可能性;我们保留不时修改本声明的权利,因此请您在使用本服务前定期检查本声明。如果您对本声明或本服务存在任何问题或疑问,请联系我们。
概述
GitLab 是一个功能强大的基于 Web 的 DevOps 生命周期平台,整合了源代码管理、持续集成/持续部署(CI/CD)、项目管理等多种工具。其一体化的设计使得开发团队能够在同一个平台上进行代码协作、自动化构建与部署,以及全面的项目监控,从而极大地提升了开发效率和项目管理的透明度。
主要功能
- 源代码管理(SCM):支持 Git 仓库,提供分支管理、合并请求、代码审查等功能,方便团队协作开发。
- 持续集成/持续部署(CI/CD):内置强大的 CI/CD 工具,支持自动化构建、测试和部署,确保代码质量和快速迭代。
- 项目管理:包括问题跟踪、里程碑、看板、敏捷开发工具等,帮助团队高效管理项目进度和任务分配。
- 容器注册表:内置 Docker 容器注册表,便于管理和部署容器化应用,支持镜像的存储和版本控制。
- 安全性:集成安全扫描、代码审查和权限管理,确保项目在开发和部署过程中保持高安全标准。
- 监控与分析:提供丰富的项目和系统监控工具,帮助团队实时了解项目状态,优化开发流程。
- 可扩展性:支持插件和 API 集成,满足不同项目和团队的个性化需求,适应快速变化的开发环境。
- 跨平台支持:适用于 Linux、macOS 和 Windows,支持多种部署方式,灵活适应不同的基础设施环境。
GitLab 的优势
- 一体化平台:将代码管理、CI/CD、项目管理等功能集成在一个平台上,减少工具切换,提高工作效率。
- 高度可定制:通过丰富的配置选项和扩展接口,满足不同规模和类型项目的需求。
- 开放社区:拥有活跃的开源社区,提供丰富的插件和支持,用户可以轻松获取帮助和资源。
- 企业级功能:针对企业用户,提供高级权限管理、高可用性部署和专业的技术支持,确保业务连续性和数据安全。
借助这些优势,GitLab 成为许多开发团队首选的 DevOps 工具,帮助他们实现从代码编写到生产部署的全流程自动化和优化。
使用与配置
在成功部署 GitLab 之后,合理的使用和配置对于充分发挥其功能至关重要。以下将介绍 GitLab 的一些关键配置和使用技巧,包括 OAuth 集成、结合 GitLab Runner 进行 CI/CD 自动化,以及邮件设置等。
1. 配置 OAuth 认证
集成 OAuth 认证可以简化用户登录流程,并增强安全性。GitLab 支持与多种 OAuth 提供商集成,如 阿里云、Google、Azure 等。
步骤如下:
- 创建 OAuth 应用:在 OAuth 提供商的平台上创建一个新的 OAuth 应用,获取 Client ID 和 Client Secret。
可以参考此文章,创建阿里云的OAuth应用。Web应用如何通过OAuth登录阿里云_访问控制(RAM)-阿里云帮助中心
- 配置 GitLab:
-
- 在您的集群中添加保密字典:关于上述OAuth应用的secret和ID。比如key为provider,值为以下:
name: alicloud
label: alicloud
app_id: 20800793-30ee-47
app_secret: AMy6ZokS6
args:
access_type: offline
-
- 在Helm Chart部署的value中添加
global:
appConfig:
omniauth:
allowSingleSignOn:
- alicloud
autoLinkLdapUser: false
enabled: true
blockAutoCreatedUsers: false
providers:
- secret: gitlab-google-oauth2
key: provider
注意,如果secret内容有修改需要重启gitlab相关进程。本文推荐为Helm部署,可通过删除相关Pod实现重启。依据来源于此官方文档:如何重启极狐GitLab | 极狐GitLab
- 测试登录:
-
- 通过已配置的 OAuth 提供商进行登录。
- 登录后:
- 通过已配置的 OAuth 提供商进行登录。
通过 OAuth 集成,用户可以使用已有的账户信息登录 GitLab,提高了用户体验和管理效率。
2. 结合 GitLab Runner 实现 CI/CD
GitLab Runner 是 GitLab CI/CD 的执行代理,负责在不同环境中运行构建、测试和部署任务。将 GitLab Runner 集成到 GitLab 中,可以实现自动化的持续集成和持续部署流程。
在阿里云上详细的部署和使用流程可参考该文章:
简单来说,可通过定义.gitlab-ci.yml
文件中的来自动执行各项任务,实现全自动化的 CI/CD 流程。
4. 其他高级配置
- 权限管理:通过细化用户权限,确保不同角色的用户拥有恰当的访问和操作权限。
- 备份与恢复:定期备份 GitLab 数据,包括数据库和仓库文件,确保在突发情况下能够快速恢复。
- 监控与日志:集成监控工具,实时监控 GitLab 服务的运行状态,并配置日志收集和分析,快速定位和解决问题。
通过以上配置和管理,GitLab 可以在团队中发挥最大效能,支持高效的开发和运维流程。
如何在阿里云上部署企业版
阿里云计算巢提供了一个服务,可实现在阿里云已有/新建 ACK(Alibaba Cloud Kubernetes)集群上快速部署 GitLab 完整的应用。
根据官方文档,如果用于生产环境,需要外部部署的 PostgreSQL 数据库,Redis 缓存和 Gitaly。目前本服务已支持一键部署 PostgreSQL 数据库。本服务默认部署的是社区版,如果需要部署企业版,需要将配置进行修改。
global:
edition: ee
license: {您的license}
在实际使用中,极狐 GitLab 部署推荐至少三个节点,每个节点至少 16Gi 内存。如果需要使用 8Gi 内存或更低,需要将 GitLab 的部分功能关闭。具体可参考此文档。
部署架构
以下为 GitLab 包含的不同组件的说明。
- gitlab-webservice:运行 GitLab 的 Web 前端(Unicorn/Puma)和 API 服务,处理 HTTP/HTTPS 请求(如代码仓库、页面访问)。
- gitlab-sidekiq:处理后台异步任务(邮件发送、CI 流水线调度)。
- gitlab-toolbox:提供维护工具(备份、恢复、健康检查)和轻量级 SSH 服务(gitlab-sshd)。
- gitlab-shell:管理 Git over SSH 操作(如 git clone、git push)。
- gitaly:提供 Git 仓库存储服务,处理所有 Git 读写操作。
- postgresql:存储用户、项目、CI 配置等元数据。
- redis:缓存数据、会话和 Sidekiq 队列。
- gitlab-runner(可选):执行 CI/CD 流水线任务。
- gitlab-pages:托管静态网站(如 GitLab Pages)。
- minio:提供对象存储(默认替代 S3),保存 CI 日志、制品等文件。
- registry:托管 Docker 镜像。
- nginx-ingress:路由外部流量到 GitLab 服务。
- cert-manager:自动管理 TLS 证书。
部署参数说明
您在创建服务实例的过程中,需要配置服务实例信息。下文介绍 GitLab 服务实例输入参数的详细信息,分为已有 ACK 集群和新建 ACK 集群两种。
已有 ACK 集群
如果选择现有 ACK 集群,则需要填写以下参数。
参数组 |
参数项 |
示例 |
说明 |
服务实例名称 |
test |
实例的名称 |
|
地域 |
华东1(杭州) |
选中服务实例的地域,建议就近选中,以获取更好的网络延时。 |
|
是否新建 ACK 集群 |
是否新建 ACK 集群 |
否 |
选择否代表已有 ACK 集群,不用新建 |
是否新建 ACK 集群 |
K8s 集群 ID |
ccde6deb0f612402786e611a7e1230d |
根据地域选择地域中用户已有的集群 ID |
应用配置 |
namespace |
gitlab |
Helm 应用工作的命名空间。 |
应用配置 |
Helm 配置 |
{} |
Helm 的配置详细参考 GitLab Helm Values |
数据库配置 |
内部或云原生数据库 |
{} |
新建 ACK 集群
如果选择新建 ACK 集群,则需要填写以下参数。
参数组 |
参数项 |
示例 |
说明 |
服务实例名称 |
test |
实例的名称 |
|
地域 |
华东1(杭州) |
选中服务实例的地域,建议就近选中,以获取更好的网络延时。 |
|
是否新建 ACK 集群 |
是 |
选择是代表新建 ACK 集群 |
|
付费类型配置 |
付费类型 |
按量付费 或 包年包月 |
|
基础配置 |
可用区 |
可用区 I |
地域下的不同可用区域 |
基础配置 |
专有网络 VPC 实例 ID |
vpc-xxx |
选择地域下可用的 VPC,不存在可以新建 |
基础配置 |
交换机实例 ID |
vsw-xxx |
选择 VPC 下的 VSW,这个 VSW 筛选会受上面不同可用区域影响,不存在可以新建 |
基础配置 |
实例密码 |
******** |
设置实例密码。长度 830 个字符,必须包含三项(大写字母、小写字母、数字、()!@#$%^&*-+={}[]:;'<>,.?/ 中的特殊符号) |
Kubernetes 配置 |
Worker 节点规格 |
ecs.g6.large |
选择对应 CPU 核数和内存大小的 ECS 实例,用作 K8s 节点 |
Kubernetes 配置 |
Worker 系统盘磁盘类型 |
ESSD 云盘 |
选择 K8s 集群 Worker 节点使用的系统盘磁盘类型 |
Kubernetes 配置 |
Worker 节点系统盘大小 (GB) |
120 |
设置 Worker 节点系统盘大小,单位为 GB |
Kubernetes 配置 |
ACK 网络插件 |
Flannel |
ACK 集群对应的网络插件,可以选择 Flannel 或者 Terway,网络插件不同,下面设置的 Pod 网络参数不同 |
Kubernetes 配置 |
Pod 网络 CIDR |
10.0.0.0/16 |
ACK Pod 网络段,网络插件为 Flannel 时必填,请填写有效的私有网段,即以下网段及其子网:10.0.0.0/8,172.16-31.0.0/12-16,192.168.0.0/16,不能与 VPC 及 VPC 内已有 Kubernetes 集群使用的网段重复。 |
Kubernetes 配置 |
Pod 交换机实例 ID |
vsw-xx |
ACK Pod 交换机实例 ID,网络插件为 Terway 时必填,建议选择网段掩码不大于 19 的虚拟交换机 |
Kubernetes 配置 |
Service CIDR |
172.16.0.0/16 |
ACK Service 网络段,可选范围:10.0.0.0/16-24,172.16-31.0.0/16-24,192.168.0.0/16-24,不能与 VPC 及 VPC 内已有 Kubernetes 集群使用的网段重复。 |
应用配置 |
namespace |
gitlab |
Helm 应用工作的命名空间。 |
应用配置 |
Helm 配置 |
{} |
Helm 的配置详细参考 GitLab Runner Helm Values |
数据库配置 |
内部或云原生数据库 |
{} |
部署流程
- 访问计算巢:部署链接,按提示填写部署参数。
- 选择集群:填写是否新建或选择已有的集群。
- 新建集群流程(如果选择新建,则需完成以下步骤;已有 ACK 集群则可跳过此步骤):
-
- 选择付费类型配置。按量付费或包年包月!新建参数1
- 填写可用区和网络配置,建议选择直接新建虚拟网络和交换机。
- 填写新建的 ACK 集群的配置。
。推荐打开弹性伸缩。推荐至少三个节点,且每个节点的内存大于等于 16Gi。 - 磁盘大小和类型建议采用默认配置。
- 如果选择已有的网络和交换机,则此处的网段可能会冲突,需要手动修改网段,才能保证部署成功。
- 第一个参数为该 Helm 应用运行的命名空间,默认值为 "gitlab"。
- 选择数据库:选择内部或云原生的数据库。如选择云原生数据库可参考以下步骤:
-
- 除了数据库密码外可直接采用默认配置。
- 注:云原生的数据库为 PG14,内部的数据库为 PG12。
- 除了数据库密码外可直接采用默认配置。
- 配置 Helm values:最后部分参数为 Chart values 相关,即 Helm 应用运行所需的参数。可以直接采用默认参数。
- 设置管理员密码:记得填写您的初始 root 管理员密码。
- 配置 TLS 与邮箱:推荐开启 TLS 并输入您的邮箱。在应用内部会自动部署 cert-manager 来申请 SSL 证书。如果您有可用的域名,可填写您自己的域名,否则默认使用计算巢提供的测试域名。测试域名需要绑定 host 后使用,否则无法访问。
- 确认部署:参数填写完成后可以看到对应的询价明细,确认参数后点击下一步:确认订单。确认订单完成后同意服务协议并点击立即创建,进入部署阶段。
- 等待部署完成:等待部署完成后即可开始使用服务。进入服务实例详情可查看使用说明和 GitLab 访问页面。若使用域名,需要按照使用说明的提示绑定 host 或配置解析后使用。
- 登录 GitLab:管理员账号名为
root
,密码为您输入的GitlabRootPassword
。如果您开启了 TLS 访问,则登录时请使用 HTTPS 域名。
使用说明
如果选择已有ACK集群进行部署,可手动配置外部Ip地址实现访问
方式一: 通过负载均衡访问,按照如下步骤进行配置
配置完成后,您会看到gitlab-web-service服务的外部IP地址(External IP),将该外部IP地址输入浏览器地址栏即可访问gitlab服务。
方式二: 通过路由访问,按照如下步骤进行配置
- 运维管理下,组件,安装Nginx组件
- 找到gitlab-webservice-default路由,并点击更新
- 确保ingress的class为:nginx
如果为新建ACK集群部署。参考以下内容:
- 找到gitlab-webservice-default路由
将外部端点值与自己的域名进行绑定即可通过您的域名访问。
不管为新建ACK或是已有ACK集群部署,如想在本地测试。则需在本地配置host。以mac系统为例,需编辑/etc/hosts文件,添加如下内容:
您集群的外部ip地址 您配置的域名
#以下为示例
127.0.0.1 example.com
进阶配置
动态修改 Helm 的 Values 值
以下高阶配置需依赖此功能:
- 进入服务实例详情页,点击右上角的修改配置
- 选择修改 Helm 参数。
- 修改部署参数,并保存配置。
- 等待实例变配,即实现了 Helm 的动态更新。
配置外部 Redis
- 参考官方文档,修改 Helm 的
values.yaml
文件,配置外部 Redis 的连接信息。 - 应用修改后的 Helm 配置,实现与外部 Redis 的集成。
配置外部的 Gitaly
- 参考官方文档,修改 Helm 的
values.yaml
文件,配置外部 Gitaly 服务的连接信息。 - 应用修改后的 Helm 配置,实现与外部 Gitaly 的集成。
完整 Values 参考
访问 GitLab Helm Values 获取完整的 values.yaml
配置参考。基于此,您可以实现更高阶的配置,比如通过 Horizontal Pod Autoscaler (HPA) 实现 Runner manager 节点的动态扩缩容。注意,虽然可以通过修改 gitlabVersion
设置 GitLab 的版本,但官方并不推荐这样使用。
GitLab 官方配置文档参考:GitLab Configuration
常见问题 (FAQ)
问:GitLab 部署后,如何升级到最新版本?
答:您可以通过修改 Helm 的 values.yaml
文件中的 gitlabVersion
参数,并执行 Helm 升级命令来更新 GitLab。建议在升级前备份重要数据,并参考 GitLab 升级指南 进行操作。
问:在部署 GitLab 时,遇到数据库连接失败,该如何排查?
答:首先检查 PostgreSQL 数据库的状态和连接配置,确保数据库服务已启动并且网络连通。其次,检查 GitLab 的 values.yaml
文件中数据库配置是否正确,特别是主机地址、端口、用户名和密码是否匹配。
问:集群中没有可用的存储卷,导致Pod起不来?
答:可手动创建存储卷和分配。
问:明明节点中剩余内存未被占满,但还是提示内存不足,无法分配到节点怎么办?
答:系统组件会占用部分内存,需要排除此部分内存。