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

甲骨文云OCI 构建基于GitHub Actions和Oracle云基础设施DevOps服务的云部署CI/CD流水线

2024-03-20 原创文章

在云中高效运行应用程序的关键是快速交付软件。Oracle DevOps服务为开发者提供端到端的持续部署体验。

在多云或混合解决方案中交付解决方案时,您可能希望出于多种原因将持续改进/持续部署(CI/CD)过程的不同阶段分开:

为了防止将所有部署目标暴露给位于部分安全层之外的服务。

部署过程的某些部分可能会因为基础设施即代码(IaC)可能是部署过程的一部分而有所不同。

尽量减少部署过程中潜在的延迟影响。因此,最后一步的执行是在本地控制的,只涉及本地连接和依赖。

能够在单一位置管理和发布跨多个环境的控制资产,而不是分散的来源。
这个参考架构通过其服务的部分位于Oracle云之外(例如,GitHub)和部分位于OCI内(如DevOps)来解决这些考虑。该参考架构考察了向Oracle云基础设施(OCI)平台部署过程(CD):Oracle容器引擎(OKE)、函数和计算实例。通用容器镜像使用单独的服务构建(因此该元素是通用的),然后由DevOps部署,以便它不直接与OKE通信。通过流水线部署自动化软件发布可以提高开发者的生产力,并让您更频繁、更少错误地发布功能。它有助于避免部署期间的停机,并自动化更新应用程序的复杂性。Oracle DevOps可以被迁移工作负载从本地或其他云到OCI的客户以及在OCI上开发新应用的客户使用。

架构

在这个参考架构中,一个示例应用程序通过使用GitHub Actions和OCI DevOps服务从GitHub部署。该应用程序部署到OKE集群。

下图展示了此参考架构。

此架构包含以下组件:

地域

OCI地域是包含一个或多个数据中心的本地化地理区域,这些数据中心称为可用性域。地域彼此独立,相隔很远(跨越国家甚至大洲)。

该架构使用单一地域。

外部CI系统

该架构使用GitHub Actions作为外部持续集成系统。GitHub Actions自动化、定制并在GitHub仓库中运行软件开发工作流。在此,GitHub Actions用于构建代码,然后使用Docker进行容器化。当容器化镜像准备好后,GitHub Actions将镜像推送到OCI工件仓库(或者,将工件放置在中央位置,GitHub Actions可配置为提示DevOps检索工件。这意味着内容是被拉取的,而非推送的)。在完成向工件仓库的转移后,它启动OCI DevOps部署管道。根据您的需求,您也可以使用其他持续集成系统,如Jenkins或Gitlab。

如果正在使用基础设施即代码(IaC)技术,那么在部署之前,管道可以使用诸如资源管理器之类的服务来实例化环境,一旦完成,使用资源管理器拆除这些资源。

DevOps部署管道还可以将结果输出存储在某个安全位置以供报告。

DevOps项目

DevOps项目是实施持续集成和部署(CI/CD)工作负载所需资源的逻辑分组。DevOps资源可以是工件、部署管道和环境。DevOps项目使启用日志记录、监控和通知以及所有DevOps资源变得简单。

部署管道

部署管道包含了将一组工件交付到环境中所必须满足的要求。管道包含阶段,这些阶段是管道的构建模块。管道可以有串行或并行运行的阶段,因此您可以控制软件发布的流程和逻辑。

部署阶段

阶段是管道运行期间发生的单个动作。DevOps部署管道包括以下预定义阶段类型,供您在发布过程中使用:

滚动部署:向OKE、Functions或实例组逐步发布。

等待:等待N秒。

手动审批:如果获得批准则继续;如果批准被拒绝则停止。

调用函数:通过调用函数并传递工件或请求参数来执行自定义任务和集成。

DevOps工件

DevOps工件是指向任何文件、二进制文件、包、清单或构成您应用程序的镜像的引用或指针。创建工件时,您必须通知Oracle DevOps实际工件的源位置。DevOps支持OCI容器镜像注册表和OCI工件注册表仓库。

工件仓库

工件仓库用于创建仓库以对类似的工件进行分组。一旦创建了仓库,就可以将工件上传到其中。这些工件是将交付给目标部署环境的文本文件、二进制文件和部署清单的集合。每个工件都有一个名称,由其路径:版本组成。路径是用于组织工件的字符串。

OCI日志和通知服务

OCI日志服务存储与部署相关的日志。部署运行时输出和部署的最终结果显示为日志条目。OCI通知服务提供对部署项目及其资源的最新状态的可见性,并采取必要的行动。例如,当重要事件发生时,比如部署管道中等待批准的阶段,您会收到通知。收到通知消息后,您可以进入DevOps部署管道并批准该阶段。

部署环境

环境是客户计算资源的集合,工件在其中部署。环境可以是函数、计算虚拟机(VM)或裸机实例,或OKE集群。

Oracle Kubernetes集群(OKE):Oracle容器引擎用于Kubernetes是一项完全托管、可扩展且高可用的服务,您可以使用它将容器化应用程序部署到云中。

计算实例:OCI计算服务使您能够在云中配置和管理计算主机。您可以启动符合CPU、内存、网络带宽和存储资源需求的计算实例形状。

函数:Oracle Functions是一项完全托管的、多租户的、高度可扩展的、按需的函数即服务平台。它建立在企业级OCI上,并由Fn Project开源引擎驱动。

在此架构中,我们使用OKE集群作为环境。环境可以位于与部署管道不同的OCI地域中。这允许开发者使用相同的部署管道在多个OCI地域部署。

建议

使用以下建议作为起点。您的需求可能有所不同。

VCN

创建VCN时,根据您计划附加到VCN子网中的资源数量,确定所需CIDR块的数量和每个块的大小。使用标准私有IP地址空间内的CIDR块。

创建VCN后,您可以更改、添加和移除其CIDR块。

此架构使用公共VCN来托管OKE集群。您也可以使用私有VCN。在这种情况下,使用NAT网关让集群能够通过公共互联网访问。

计算形状

此架构使用带有E3或E4弹性形状的Oracle Linux OS镜像,以最小资源配置托管OKE集群节点中的计算主机。如果您的应用程序需要更多内存或核心,您可以选择不同的形状。

OKE

此架构将OKE集群作为目标端点进行部署。工作节点部署在E3或E4 Oracle Linux OS上。此架构在集群中使用三个工作节点,但您可以在每个集群上创建多达1000个节点。

容器镜像注册表

此架构将Registry部署为内部使用的私有Docker注册表。Docker镜像被推送到并从注册表中拉取。您也可以将Registry用作公共Docker注册表,使任何有互联网访问权限并了解适当URL的用户都能从Oracle Cloud中的公共存储库拉取镜像。

工件注册表

此架构为OKE集群使用的软件和配置创建一个工件。架构为内部使用创建一个工件注册表仓库。软件二进制文件、文本和部署配置被上传到并从工件注册表仓库下载。

考虑因素

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

DevOps支持的部署

DevOps支持部署到OKE、计算主机和Functions。此架构部署到OKE集群。根据需求考虑部署到其他端点。

Linux支持

只支持Linux主机用于计算实例的实例组部署。

部署工件

使用DevOps部署的工件需要位于OCI工件注册表或容器镜像注册表仓库中。

分组应用程序

作为最佳实践,将每个应用程序及其所有微服务分组到一个项目中。确保理解分割流程的价值主张,并保持划分。

部署

要部署此架构,请按照这个Live Lab中Java应用部署的说明操作:

自动化部署Java应用程序到Oracle云基础设施

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

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

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

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

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