使用 Oracle Cloud Infrastructure DevOps 服务构建连续集成和部署管道

快速交付软件是有效地在云中构建和部署应用的关键。Oracle Cloud Infrastructure (OCI) DevOps 服务提供了一个连续集成和部署 (CI/CD) 平台,可供开发人员在 Oracle Cloud 上轻松构建、测试和部署软件和应用。

OCI DevOps 构建和部署管道可减少变更驱动的错误,缩短客户在构建和补救问题上花费的时间,重新构建软件后在应用更改时进行重新测试,从而提前检测到任何不利影响。

该服务包括预配专用 GIT 系统信息库来存储代码,并支持连接到外部代码系统信息库来存储源代码和配置文件。由于构建流程依赖于并生成中间构件(模块、程序包等),因此它们还可与 Oracle 的构件和容器资料档案库结合使用。无论是将工作负载迁移到 OCI(从内部部署或其他云)还是 OCI 上开发新应用,您都可以使用 OCI DevOps 简化软件交付生命周期。

在混合或多云环境中工作时,OCI DevOps 可用于创建要在其他环境中部署的构件。

体系结构

此参考体系结构建立所有服务和配置,允许您构建和测试示例 Node.js Web 应用程序,然后使用 OCI DevOps 将其部署到 OKE。Terraform 部署包括创建所需的管道和资料档案库。应用程序源代码托管在 DevOps 代码资料档案库上。然后,用户可以将代码提交到系统信息库中,从而触发构建管道的启动。

构建管道遵循用户定义的流来构建和测试软件,然后使用应用程序的最新版本创建容器映像。构建的输出以图像形式存储在容器注册表中。然后,部署管道使用容器注册表中的构建映像和 Kubernetes 清单将应用程序的最新版本部署到 OKE。

提供的管道不考虑使用静态代码分析和 linter 工具应用单元测试和分析代码质量等因素。

下图说明了此参考体系结构。

下面是 deployment-pipeline-devops-arch.png 的说明
插图 deploy-pipeline-devops-arch.png 的说明

deploy-pipeline-devops-arch-oracle.zip

此体系结构具有以下组件:
  • 区域

    OCI 区域是本地化地理区域,包含一个或多个数据中心,称为可用性域。区域独立于其他区域,大片距离可以分开(跨国家甚至大陆)。该体系结构使用单个区域。

  • DevOps project(项目)

    实施 CI/CD 工作流所需的 DevOps 资源的逻辑分组。DevOps 资源可以是工件、构建管道、部署管道、外部连接、触发器和环境。通过 DevOps 项目,可以轻松地为所有 DevOps 资源启用日志记录、监视和通知。

  • 构建管道

    构建管道从源代码资料档案库获取提交 ID 并使用该源代码运行构建指令。构建管道为构建流程定义一组阶段 - 构建、测试和编译软件工件、将工件传送到 OCI 系统信息库以及(可选)触发部署。您可以在构建规范文件中定义构建运行的流和说明。

  • 代码存储库

    DevOps 服务托管的专用 Git 系统信息库。您可以使用 OCI DevOps 代码资料档案库存储、管理和开发源代码。

  • 部署管道

    向目标环境交付和部署一组工件的步骤序列。可以通过定义可在串行或并行中运行的阶段来控制软件发行版的流和逻辑。

  • 部署阶段
    阶段是在运行管道期间执行的单个操作。DevOps 部署管道包括以下预定义的阶段类型,供您在发行版流程中使用:
    • 滚动部署 :OKE、函数或实例组的增量发行版
    • 等待:等待 N 秒
    • 人工审批:如果提供了审批,则继续;如果拒绝审批,则停止。
    • 调用函数:通过调用函数来执行自定义任务或集成,并传递请求参数的构件。
  • DevOps 对象

    DevOps Artifact 是对构成应用程序的任何文件、二进制文件、程序包、清单或映像的引用或指针。创建对象时,请向 Oracle DevOps 通知实际对象的源位置。DevOps 支持 OCI 容器映像注册表和 OCI Artifact 注册表资料档案库。

  • Artifact 资料档案库

    Artifact 资料档案库创建资料档案库以对类似 Artifact 进行分组。创建资料档案库时, 可以向其上载 Artifact。这些工件是传送到目标部署环境的文本文件、二进制文件和部署清单的集合。每个项目对象都有一个名称,由其路径:版本组成。路径是用于组织对象的字符串。

  • OCI 日志记录和通知服务

    OCI 日志记录服务存储与部署相关的日志。部署运行时输出和部署的最终结果显示为日志条目。通过 OCI 通知服务,您可以查看部署项目及其资源的最新状态,并采取任何必要的操作。例如,当重要事件(如部署管道中的阶段等待审批)时,会通知您。当收到通知消息时,您可以转至 DevOps 部署管道并审批该阶段。

  • 部署环境
    环境是部署对象时客户计算资源的集合。环境可以是功能、计算虚拟机 (VM) 或裸金属实例,也可以是 OKE 集群。
    • Oracle Kubernetes 集群 (OKE):OCI Container Engine for Kubernetes 是完全托管、可扩展、高度可用的服务,可用于将容器化应用部署到云中。
    • 计算实例 :OCI 计算服务允许您在云中预配和管理计算主机。您可以使用符合 CPU、内存、网络带宽和存储资源要求的配置来部署计算实例。
    • 函数:Oracle Functions 是一个完全托管的多租户、高度可扩展的按需提供功能即服务平台。该服务基于企业级 Oracle Cloud Infrastructure 构建,由 Fn 项目开源引擎提供支持。
    环境可以位于部署管道区域的不同 OCI 区域中。此隔离允许开发人员使用相同的部署管道在多个 OCI 区域中部署。

建议

使用以下建议作为使用 OCI DevOps 创建构建和部署管道的起点。您的要求可能与此处介绍的体系结构有所不同。
  • 计算配置

    此体系结构使用具有 E3 或 E4 弹性配置的 Oracle Linux OS 映像。您可以从实例组环境和 OKE 集群节点中的计算主机所需的最小资源开始。如果您的应用需要更多的内存或核心,则可以选择不同的配置。

  • VCN

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

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

    此体系结构使用公共 VCN 来托管 Container Engine for Kubernetes。您还可以使用专用 VCN。在这种情况下,请使用 NAT 网关通过公共互联网授予群集访问权限。

  • Oracle Container Engine for Kubernetes (OKE)

    此体系结构将 OKE 群集部署为目标环境之一。Worker 节点部署在 E3 或 E4 Oracle Linux OS 上。此体系结构使用集群中的三个 worker 节点,但每个集群最多可创建 1,000 个节点。

  • 容器映像注册表

    此体系结构将注册表部署为专用 Docker 注册表以供内部使用。Docker 映像将推送到注册表中并从中提取。您还可以将注册表用作公共 Docker 注册表,使具有互联网访问权限的任何用户能够通过相应 URL 从 OCI 中的公共资料档案库提取映像。

考虑事项

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

  • DevOps 支持部署到 OKE、计算主机和函数。
  • 到计算实例的实例组部署只支持 Linux 主机。
  • 使用 DevOps 部署的对象必须位于 OCI 对象注册表或容器映像注册表资料档案库中。
  • 最佳做法是将每个应用程序及其所有微服务分组到一个项目中。

部署

GitHub 中提供了使用 OCI DevOps 创建构建和部署管道的 Terraform 代码。

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

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

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

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

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

更改日志

此日志列出了重大更改: