部署 GitLab 以在 OCI 上启用 CI/CD 管道

GitLab 是一个基于 Web 的 DevOps 平台,提供基于 Git 的资料档案库管理服务、问题跟踪以及连续集成和部署 (CI/CD) 管道功能。您可以自己管理 GitLab 并部署到 Oracle Cloud Infrastructure (OCI) 以自动执行云部署。

体系结构

此引用体系结构有两个部署选项:独立部署和分布式部署。

  • 独立(< 1,000 个用户)

    独立体系结构是 GitLab 最简单的选项。它将所有 GitLab 组件部署到 OCI 租户内的单个计算实例中。如果您最多需要为 1,000 个用户提供服务,并且您没有严格的可用性要求,则具有频繁备份的独立解决方案适合许多组织。单个租户可以托管多个 GitLab 服务器。下图说明了此引用体系结构:

    后面是 deploy_gitlab_sa.png 的说明
    插图 deploy_gitlab_sa.png 的说明

  • 分布式(1000–2000 个用户)

    分布式解决方案是一种多层体系结构,它将专用 GitLab 服务器的各个组件分为不同的实例,每个实例都分配给执行特定任务。具体而言,分布式体系结构具有专用的 PostgreSQL 服务器、Redis Server、Gitaly 服务器和 Prometheus 监视实例,这些都是完全运行的 GitLab 部署所必需的。根据 GitLab 建议,此分布式部署支持大约 2,000 个用户。由于某些内置冗余,其性能高于独立部署和容错性能更高。但是,分布式部署不可用。

    后面是 deploy_gitlab_dist.png 的说明
    插图 deploy_gitlab_dist.png 的说明

这些体系结构包含以下组件:

  • 区域

    Oracle Cloud Infrastructure 区域是一个本地化地理区域,包含一个或多个数据中心,称为可用性域。区域独立于其他区域,其距离很广(跨越国家或甚至大陆)。

  • 可用性域

    可用性域是区域中的独立数据中心。每个可用性域中的物理资源与其他可用性域中的资源隔离,这些资源提供故障容差。可用性域不共享基础设施,例如电源、冷却或内部可用性域网络。因此,一个可用性域的故障不可能影响该区域中的其他可用性域。作为这些 GitLab 引用体系结构的一部分部署的实例都会进入单个可用性域。

  • 虚拟云网络 (VCN) 和子网

    VCN 是在 OCI 区域中设置的软件定义的网络。VCN 可以分为特定于某个区域或可用性域的子网。特定于区域的子网和可用性域特定的子网都可以在同一 VCN 中共存。子网可以是公共的或专用的。可以将此 GitLab 体系结构部署到包含公共和专用子网的现有 VCN 中,也可以将其配置为使用所需子网创建 VCN。

    • 底座主机子网

      堡垒主机子网是包含堡垒主机实例的专用公共子网。堡垒主机是此体系结构的可选组件,如果 GitLab 直接连接到 Internet 或公共子网,则不需要该组件。

    • 负载平衡器子网

      负载平衡器子网是包含负载平衡器的专用公共子网。

    • GitLab 专用子网

      GitLab 专用子网包含两个 GitLab 服务器:Gitaly 服务器、Redis 服务器、Postgres 服务器、Prometheus- Grafana(监视)服务器以及任何可选的 GitLab 运行器。

  • 负载平衡器

    负载平衡器包含用于连接到 GitLab 实例的面向公共的 IP。如果要为 GitLab 实例定制域名,请将负载平衡器的 IP 地址注册到 DNS 提供程序。负载平衡器使用循环运行状况检查策略监视 GitLab 服务器。

  • 计算
    对于 GitLab,仅创建单个 GitLab 服务器计算实例。对于分布式体系结构,共创建八个计算实例。其中的每个实例都提供以下服务:
    • GitLab 服务器

      主 GitLab 基于 Web 的应用程序安装在两个 GitLab 服务器上。对这些实例执行 GitLab 管理,负载平衡器充当前端。

    • PostgreSQL 服务器

      存储 GitLab 应用程序的持久数据库信息。例如,用户、权限、问题或其他元数据存储在 PostgreSQL 数据库中。

    • Redis 服务器

      GitLab 应用程序使用 Redis 作为作业信息、元数据和传入作业的非持久数据库后端。

    • Gitaly 服务器

      Gitaly 服务为 Git 资料档案库提供文件存储。属于 GitLab 中资料档案库的所有文件都存储在 Gitaly 服务器上。创建两个 Gitaly 实例以证明额外容量级别。您可以定制哪个服务器在每个资源库的基础上存储特定项目的数据。

    • PostgreSQL 服务器

      GitLab 在 PostgreSQL 服务器上存储持久数据库信息。持久性数据的示例包括用户、权限、问题和其他项目元数据。

    • Redis 服务器

      GitLab 应用程序使用 Redis 作为作业信息、特定类型的元数据和传入作业的非持久数据库后端。

    • Prometheus + Grafana(监视)服务器

      Prometheus + Grafana 服务器是系统和服务监视服务器。它按给定时间间隔从配置的目标收集度量,评估规则表达式,显示结果,并在观察到指定条件时触发预警。

    • 跑步者

      GitLab 运行器是使用 GitLab CI/CD 在管道中运行作业的专用计算机。它们通常在 GitLab 实例启动、运行和测试后部署到 GitLab 环境中。它们不是作为部署的一部分创建的。

  • 对象存储

    分布式部署在 OCI 租户内创建一系列对象存储桶,用于存储与 GitLab 项目关联的各种类型的数据,包括备份。

建议

部署 GitLab 以在 Oracle Cloud Infrastructure 上启用 CI/CD 管道时,使用以下建议作为起点。 您的要求可能与此处描述的体系结构不同。
  • 计算配置

    此体系结构使用 Oracle Linux OS 映像并支持所有计算配置系列(标准或灵活)。GitLab 建议为独立和分布式部署使用以下配置参数:

    独立
    分布式GitLab 建议使用这些配置,但您可以在部署时进行定制。
  • VCN

    创建 VCN 和子网时,请使用与您打算设置专用连接的任何其他网络(在 OCI、内部部署数据中心或其他云提供商中)不重叠的 CIDR 块。VCN CIDR 块是可编辑的后期创建。

    设计子网时,请考虑流量和安全要求。将特定层或角色中的所有资源附加到可用作安全边界的同一子网。

  • 安全性

    使用 Oracle Cloud Guard 可以主动监视和维护 OCI 中资源的安全性。Cloud Guard 使用检测器配方,您可以定义这些配方来检查资源是否存在安全弱点,以及监视操作员和用户是否有风险活动。检测到任何不正确的配置或不安全的活动时,Cloud Guard 会根据您可以定义的响应方配方建议更正操作并协助这些操作。

    对于需要最大安全性的资源,Oracle 建议您使用安全区域。安全区域是与基于最佳做法的 Oracle 定义的安全策略配方关联的区间。例如,安全区中的资源不能从公共 Internet 访问,并且必须使用客户管理的密钥对其进行加密。在安全区域中创建和更新资源时,OCI 将根据安全区域配方中的策略验证操作,并拒绝违反任何策略的操作。

  • 跑步者

    可以将 GitLab 运行器部署到与现有 GitLab 实例相同的专用子网中,也可以部署到专用 VCN 或子网中。

考虑事项

部署此引用体系结构时,请考虑以下几点。

  • 性能

    作为此体系结构的一部分启动的所有默认计算配置都遵循 GitLab 文档中提供的建议。但是,如果粒子节点需要更多资源,则可以缩放计算形状。分布式体系结构的性能高于独立部署。体系结构具有以下预期的性能度量选项。

  • 安全性

    除了负载平衡器和堡垒主机之外,如果存在,则 GitLab 体系结构的所有组件都位于专用子网中。分布式体系结构中的计算实例都启用了防火墙,启用了 iptables,并且仅打开了启用节点之间通信所需的端口。

  • 可用性

    GitLab 服务器将作为对部署,并由负载平衡器进行平衡。所有实例都部署在单个可用性域中。此引用体系结构还会创建多个对象存储桶,用于存储各种类型的数据。对象存储是一种区域服务,未绑定到任何特定的计算实例或可用性域。只要您具有 Internet 连接并且可以访问对象存储端点之一,就可以从 OCI 上下文内外的任何位置访问数据。此部署使用服务网关连接到对象存储桶。服务网关允许从专用子网中的专用 IP 地址连接到对象存储公共端点

  • 备份和恢复
    分布式部署创建用于存储备份的对象存储桶,并设置将数据上载到该存储桶所需的所有配置设置。它还在主 GitLab 服务器实例上创建 cron 作业,该作业创建 GitLab 数据的每日备份、上载到存储桶并在计算机上存储副本。gitlab-secrets.json 文件包含敏感数据,并且不包含在此备份中。我们建议您将/etc/gitlab 目录或/etc/gitlab/gitlab-secrets.json 文件的副本保留在管理员此部署之外的安全位置。考虑是否希望更频繁地备份并在对象存储桶上设置适当的保留策略。
    ## Run a backup everyday at 1am.
    0 1 * * * sudo gitlab-backup create
     
    ## Run a separate backup for configuration settings (creates a tar archive in /etc/gitlab/config_backup)
    0 2 * * * sudo gitlab-ctl backup-etc

    不仅可以备份 GitLab 数据,还可以备份整个 GitLab 服务器。OCI 块存储卷服务允许您根据调度自动执行块存储卷备份并根据所选备份策略保留这些备份。有关更多详细信息,请参阅基于策略的备份文档。

  • 成本

    此体系结构的成本与任何 OCI 部署的基础结构(如计算实例、网络负载平衡器和数据存储)以及从 GitLab 购买的许可证相关。有关 OCI 服务成本的详细信息,请参阅 Oracles 的云过程列表页。

  • 公共 URL

    考虑使用 DNS 提供程序将 GitLab 实例的公共 IP 地址与定制域名关联。在分布式体系结构中,定制 URL 应与负载平衡器的公共 IP 地址关联。您可以在部署时设置外部 URL 域名,然后将 URL 与 GitLab 部署中的 IP 地址关联。您始终可以在事实之后更改自定义 URL。

部署

此引用体系结构的 Terraform 代码在 Oracle Cloud Infrastructure Resource Manager 中作为示例堆栈提供。您还可以从 GitLab 下载代码,并根据特定要求进行定制。

  • 使用 Oracle Cloud Infrastructure Resource Manager 中的示例堆栈进行部署:
    1. 单击部署到 Oracle Cloud

      如果尚未登录,请输入租户和用户身份证明。

    2. 选择要在其中部署堆栈的区域。
    3. 按照屏幕上的提示和说明创建堆栈。
    4. 创建堆栈后,单击 Terraform 操作,然后选择计划
    5. 等待作业完成,然后复查计划。

      要进行任何更改,请返回“堆栈详细信息”页,单击编辑堆栈,然后进行所需的更改。然后,再次运行计划操作。

    6. 如果不需要进一步更改,请返回“堆栈详细信息”页,单击 Terraform 操作,然后选择应用
  • 在 GitLab 中使用 Terraform 代码进行部署:
    1. 转到 GitLab
    2. 将资料档案库克隆或下载到本地计算机。
    3. 按照 README 文档中的说明操作。

了解更多信息

了解有关部署 GitLab 以在 Oracle Cloud Infrastructure 上启用 CI/CD 管道的更多信息。

复查以下附加资源: