欢迎访问深圳敏捷云计算科技有限公司!

在甲骨文云OCI上部署GitLab以激活持续集成/持续部署流水线

2024-04-11 原创文章

GitLab是一个基于Web的DevOps平台,提供基于Git的代码仓库管理服务、问题跟踪以及持续集成和部署(CI/CD)流水线功能。您可以自行管理GitLab,并部署到Oracle云基础设施(OCI)以自动化您的云部署。

架构

此参考架构有两种部署选项:独立部署和分布式部署。

独立部署(<1000用户)

独立架构是GitLab的最简单选项。它将所有GitLab组件部署到您的OCI租户中的单个计算实例中。如果您需要为多达1000个用户提供服务,并且没有严格的可用性要求,对于许多组织来说,具有频繁备份的独立解决方案是合适的。一个租户可以托管多个GitLab服务器。以下图表展示了这一参考架构:

分布式(1000-2000用户)

分布式解决方案是一个多层架构,将专用GitLab服务器的各种组件分离到不同的实例中,每个实例分配执行特定任务。具体来说,分布式架构拥有专用的PostgreSQL服务器、Redis服务器、Gitaly服务器和Prometheus监控实例,这些都是全功能GitLab部署所必需的。根据GitLab的建议,这种分布式部署可支持大约2000个用户。它比独立部署有更高的性能,并且因为一些内置的冗余而具有更高的故障容忍性。然而,分布式部署并不是高度可用的。

这些架构包含以下组件:

区域

Oracle云基础设施区域是一个地理位置本地化的区域,包含一个或多个称为可用性域的数据中心。各区域相互独立,彼此之间可能相隔很远(横跨国家甚至大洲)。

可用性域

可用性域是区域内独立、互不依赖的数据中心。每个可用性域中的物理资源与其他可用性域的资源隔离,提供故障容忍性。可用性域不共享基础设施,如电力或冷却系统,或内部可用性域网络。因此,一个可用性域的故障不太可能影响该区域内其他可用性域。作为这些GitLab参考架构的一部分部署的实例都位于单个可用性域中。

虚拟云网络(VCN)和子网

VCN是您在OCI区域内设置的软件定义网络。VCN可以被划分为子网,这些子网可以特定于一个区域或一个可用性域。特定于区域和特定于可用性域的子网可以在同一个VCN中共存。子网可以是公共的或私有的。您可以将这个GitLab架构部署到一个包含公共和私有子网的现有VCN中,或配置它以创建带有所需子网的VCN。

堡垒主机子网

堡垒主机子网是一个专用的公共子网,包含堡垒主机实例。堡垒主机是这个架构的一个可选组件,如果GitLab直接连接到互联网或公共子网,则不需要堡垒主机。

负载均衡器子网

负载均衡器子网是一个专用的公共子网,包含负载均衡器。

GitLab私有子网

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

负载均衡器

负载均衡器包含用于连接GitLab实例的公共IP地址。如果您希望为您的GitLab实例使用自定义域名,请将负载均衡器的IP地址注册到DNS提供商。负载均衡器使用轮询健康检查策略来监控GitLab服务器。

计算

对于GitLab,仅创建一个GitLab服务器计算实例。对于分布式架构,总共创建了八个计算实例。每个实例提供以下服务:
GitLab服务器

主要的基于Web的GitLab应用程序安装在两个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项目相关的各种类型的数据,包括备份。

建议

当在Oracle云基础设施上部署GitLab以启用CI/CD流水线时,可以从以下建议开始。您的需求可能与此处描述的架构有所不同。

计算形状

这种架构使用Oracle Linux操作系统镜像,并支持所有类型的计算形状,标准或灵活。GitLab针对独立和分布式部署推荐以下配置参数:

独立部署

分布式部署

GitLab推荐这些配置,但您可以在部署时进行自定义。

VCN

当您创建VCN和子网时,使用不与任何其他网络(在OCI、您的本地数据中心或其他云提供商)重叠的CIDR块,以便您打算建立私有连接。VCN的CIDR块在创建后可以编辑。

在设计子网时,考虑您的流量流向和安全要求。将特定层或角色内的所有资源附加到同一个子网,这可以作为一个安全边界。

安全

使用Oracle Cloud Guard主动监控和维护您在OCI中的资源安全。Cloud Guard使用您可以定义的探测器配方来检查资源的安全弱点,并监控操作员和用户的风险活动。当检测到任何配置错误或不安全活动时,Cloud Guard会推荐纠正措施,并根据您可以定义的响应者配方协助采取这些措施。

对于需要最大安全性的资源,Oracle推荐您使用安全区域。安全区域是与Oracle定义的基于最佳实践的安全政策配方相关联的一个区域。例如,安全区域中的资源不得从公共互联网访问,并且必须使用客户管理的密钥进行加密。当您在安全区域中创建和更新资源时,OCI会根据安全区域配方中的政策验证操作,并拒绝违反任何政策的操作。

运行器

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

考虑因素

部署此参考架构时,请考虑以下几点。

性能

作为这一架构的一部分启动的所有默认计算形状都遵循GitLab文档中提供的建议。然而,如果某个节点需要更多资源,您可以扩展计算形状。分布式架构的性能高于独立部署。这些架构具有以下预期性能指标选项。

安全性

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

可用性

GitLab服务器作为一对部署,并由负载均衡器平衡。所有实例都部署在单个可用性域中。此参考架构还创建了几个对象存储桶,用于存储各种类型的数据。对象存储是一个区域服务,不与任何特定的计算实例或可用性域绑定。只要您有互联网连接,并且可以访问对象存储端点之一,就可以在OCI内部或外部的任何地方访问数据。此部署使用服务网关连接到对象存储桶。服务网关允许从私有子网中的私有IP地址访问对象存储的公共端点。

备份和恢复

分布式部署创建了一个对象存储桶,用于存储备份,并设置了所有必要的配置设置,以将数据上传到该桶。它还在主GitLab服务器实例上创建了一个cron作业,该作业每天创建GitLab数据的备份,上传到桶,并在机器上存储副本。gitlab-secrets.json文件包含敏感数据,不包含在此备份中。我们建议您将/etc/gitlab目录或/etc/gitlab/gitlab-secrets.json文件的副本保存在此部署之外的安全位置,由管理员管理。考虑是否需要更频繁的备份,并在对象存储桶上设置适当的保留策略。

您不仅可以备份GitLab数据,还可以备份整个GitLab服务器。Oracle云基础设施(OCI)块存储服务允许您根据选定的备份策略自动按计划执行块卷备份并保留它们。更多详情,请参阅基于策略的备份文档。

成本

这种架构的成本与部署在OCI上的任何基础设施(例如计算实例、网络负载均衡器和数据存储)相关,加上从GitLab购买的任何许可。有关OCI服务成本的更多信息,请参阅Oracle的云价格列表页面。

公共URL

考虑使用您的DNS提供商将GitLab实例的公共IP地址与自定义域名关联。在分布式架构中,自定义URL应与负载均衡器的公共IP地址关联。您可以在部署时设置外部URL域名,然后在GitLab部署后将URL与IP地址关联。在事后您总是可以更改自定义URL。

部署

这个参考架构的Terraform代码作为样本堆栈在Oracle Cloud Infrastructure Resource Manager中可用。您也可以从GitLab下载代码,并根据您的具体需求进行定制。

使用Oracle Cloud Infrastructure Resource Manager中的样本堆栈进行部署:

a. 点击,如果您还没有登录,请输入租户和用户凭证。

b. 选择您想要部署堆栈的区域。

c. 按照屏幕上的提示和指示创建堆栈。

d. 创建堆栈后,点击Terraform Actions,并选择Plan。

e. 等待作业完成,并审查计划。

f. 如果需要进行任何更改,请返回到Stack Details页面,点击Edit Stack,并进行所需更改。然后再次运行Plan操作。

g. 如果不需要进一步更改,请返回到Stack Details页面,点击Terraform Actions,并选择Apply。

使用GitLab中的Terraform代码进行部署:

a. 前往GitLab。

b. 将仓库克隆或下载到您的本地计算机。

c. 按照README文件中的指示操作。

开启您的Oracle云之旅:Agilewing - 您的智能云服务伙伴

作为Oracle的高级合作伙伴,Agilewing正重新定义企业体验Oracle云服务的方式。借助于其简化的开户流程和一流的技术支持,Agilewing将复杂的开户和操作流程转化为一种轻松、直观的体验。通过我们的一站式服务,您可以迅速开启并享受Oracle云的全方位服务,从而无缝融入云端世界。

Agilewing的AgileCDN服务,结合了OCI的云基础服务,提供了一流的全球内容加速解决方案。超过2800个全球POP节点和7000个直连点的强大网络,确保了无论您的业务扩展到全球哪个角落,都能保持高效稳定的运行。

利用Oracle云的先进技术,Agilewing致力于简化云服务搭建、云迁移和业务出海的过程。我们的合作模式为客户带来经济高效的解决方案,使他们能够更加专注于核心业务,同时享受Oracle云的高性能和安全保障。

Oracle云服务,作为一个充满潜力的领域,以其高性能、安全性和全球统一的服务标准,为各类企业开启了新的机遇之门。通过Agilewing的专业服务,无论是个人用户还是企业,都能轻松步入这个充满技术革新和高效能的新时代。现在,就让Agilewing引领您开始探索Oracle云服务,打开一个全新的世界大门