使用 Oracle Cloud Infrastructure DevOps 服务和 Oracle Cloud Infrastructure 函数构建 CI/CD 管道
要想高效地在云中运行您的应用,快速交付软件至关重要。Oracle DevOps 服务为开发人员提供持续集成和部署 (CI/CD) 平台。您可以使用 DevOps 服务在 Oracle Cloud 上轻松构建、测试和部署软件和应用。DevOps 构建和部署管道可减少更改驱动的错误,并减少客户在构建和部署版本上花费的时间。
该服务还提供专用 Git 系统信息库来存储代码,并支持与外部代码系统信息库的连接。无论您是要将工作负载迁移到内部部署或其他云中的 Oracle Cloud Infrastructure (OCI),还是要在 OCI 上开发新应用,都可以使用 DevOps 服务来简化软件交付生命周期。
体系结构
在此参考架构中,您将使用 OCI DevOps 和 OCI 函数服务构建和部署 python 应用程序。
应用程序源代码托管在 DevOps 代码资料档案库中。最终用户将代码提交到代码资料档案库中。对代码资料档案库的新提交将触发构建管道的启动。构建管道遵循用户定义的流来构建要部署到 OCI 功能服务的函数对象。构建的输出以 Docker 映像形式存储在容器注册表中。然后,部署管道使用容器注册表中的内置映像部署到 OCI 函数环境。下面的体系结构图显示了如何使用默认映像和定制映像(通过使用 Dockerfile)构建和部署应用程序。
为了简化此 CI/CD 工作流示例的设置,此示例应用程序使用 Terraform 自动创建和配置 DevOps 资源。
下图说明了此参考体系结构。
插图 cicd-pipe-devops-functions-arch.png 的说明
cicd-pipe-devops-functions-arch-oracle.zip
- 区域
OCI 区域是一个局部地理区域,包含一个或多个数据中心,称为可用性域。区域与其他区域无关,它们的距离可以分离(跨国家 / 地区甚至大陆)。该体系结构使用单个区域。
- DevOps 项目
实施 CI/CD 工作流所需的 DevOps 资源的逻辑分组。DevOps 资源可以是构件、构建管道、部署管道、外部连接、触发器和环境。通过 DevOps 项目,可以轻松地对所有 DevOps 资源启用日志记录、监视和通知。
- 构建管道
构建管道从源代码资料档案库获取提交 ID,然后使用该源代码运行构建指令。构建管道定义构建流程的一组阶段:构建、测试和编译软件构件,向 OCI 系统信息库传送构件,以及(可选)触发部署。可以在构建规范文件中定义构建运行的流和指令。
- 代码存储库
由 DevOps 服务托管的专用 Git 系统信息库。您可以使用我们的 DevOps 代码资料档案库存储、管理和开发源代码。
- 部署管道
用于向目标环境交付和部署一组对象的步骤序列。可以通过定义可以串行或并行运行的阶段来控制软件发行版的流和逻辑。
- 部署阶段
阶段是在运行管道期间发生的单个操作。DevOps 部署管道包括以下预定义的阶段类型,您可以在发行流程中使用:
- 滚动部署:Oracle Container Engine for Kubernetes (OKE)、函数或实例组的增量发行版
- 等待:等待 N 秒
- 人工审批:如果已进行审批,则继续;如果审批被拒绝,则停止。
- 调用函数:通过调用函数来执行定制任务或集成,并传递请求参数的对象。
- DevOps 构件
DevOps 构件是指对构成应用程序的任何文件、二进制文件、软件包、清单或映像的引用或指针。创建构件时,将实际构件的源位置通知 Oracle DevOps。DevOps 支持 OCI 容器映像注册表和 OCI 构件注册表系统信息库。
- 构件资料档案库
构件资料档案库创建资料档案库以对类似构件进行分组。创建资料档案库时,可以将对象上载到该资料档案库。这些构件是交付到目标部署环境的文本文件、二进制文件和部署清单的集合。每个构件都有一个由其路径(版本)组成的名称。路径是用于组织对象的字符串。
- OCI 日志记录和通知服务
OCI 日志记录服务存储与部署相关的日志。部署运行时输出和部署的最终结果显示为日志条目。通过 OCI 通知服务,您可以了解部署项目及其资源的最新状态,并执行必要的操作。例如,重要事件(如部署管道中等待审批的阶段)时会通知您。收到通知消息时,您可以转到 DevOps 部署管道并批准该阶段。
- 部署环境
环境是部署构件的客户计算资源的集合。环境可以是函数、计算虚拟机 (VM)、裸金属实例或 OKE 集群。
- Oracle Kubernetes 集群 :OCI Container Engine for Kubernetes (OKE) 是完全托管、可扩展的高可用性服务,可用于将容器化应用部署到云中。
- 计算实例 :OCI 计算服务允许您在云中预配和管理计算主机。您可以部署计算实例,其配置可满足 CPU、内存、网络带宽和存储资源需求。
- 函数:Oracle Functions 是一个完全托管的多租户、高度可扩展、按需运行的函数即服务平台。该服务基于企业级 Oracle Cloud Infrastructure 构建,由 Fn 项目开源引擎提供支持。
建议
- 函数的内存分配和超时
可以根据以下设置更新 func.yaml 文件来更改配置:
参数说明 设置 允许函数运行的最长时间 - 默认值:30
- 单位:秒
- func.yaml 参数:超时
- 环境变量:n/a
- Fn CLI 选项:n/a
- 备注:
- 最大值:300
- 最佳做法是指定一个与可能需要的时间接近的超时值,而不是较大的超时值。
函数的最大内存阈值 - 默认值:128
- 单位:MB
- func.yaml 参数:内存
- 环境变量:FN_MEMORY
- Fn CLI 选项:n/a
- 备注:
以下项之一:
- 128
- 256
- 512
- 1024
- 虚拟云网络 (VCN)
创建 VCN 时,根据您计划连接到 VCN 中子网的资源数,确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。
创建 VCN 后,您可以更改、添加和删除其 CIDR 块。
此体系结构使用公共 VCN 来托管 OKE。您还可以使用专用 VCN。在这种情况下,请使用 NAT 网关提供通过公共互联网的集群访问。
- 容器映像注册表
此体系结构将注册表部署为专用 Docker 注册表供内部使用。将 Docker 映像推送到注册表并进行拉取。您还可以使用注册表作为公共 Docker 注册表,支持任何具有 Internet 访问权限的用户以及了解相应 URL 的用户,以从 OCI 中的公共资料档案库提取映像。
考虑事项
使用 OCI DevOps 和 OCI 函数服务构建和部署 Python 应用时,请考虑:
- DevOps 支持对 OKE、计算主机和函数的部署。
- 将实例组部署到计算实例组时,仅支持 Linux 主机。
- 使用 DevOps 部署的构件必须位于 OCI Artifact 注册表或容器映像注册表资料档案库中。
- 最佳实践是将每个应用及其所有微服务分组到一个项目中。
部署
GitHub 中提供了部署此引用体系结构所需的代码。只需单击一下即可将代码拉入 Oracle Cloud Infrastructure Resource Manager,创建堆栈并部署它。您也可以使用 Terraform CLI 将代码从 GitHub 下载到您的计算机,定制代码并部署架构。
- 使用 Oracle Cloud Infrastructure Resource Manager 中的示例堆栈进行部署:
- 在 GitHub 中使用 Terraform 代码部署:
- 转到 GitHub。
- 将资料档案库克隆或下载到本地计算机。
- 按照
README
文档中的说明进行操作。