使用 Github 操作和 Oracle Cloud Infrastructure DevOps 服务为云部署构建 CI/CD 管道

快速交付软件对于在云中高效运行应用至关重要。Oracle DevOps 服务为开发人员提供端到端连续部署体验。
在多云或混合解决方案中提供解决方案时,您可能出于多种原因希望将持续改进/持续部署 (Continuous Improvement/Continuous Deployment,CI/CD) 流程的不同阶段区分开来:
  • 防止将所有部署目标暴露给位于某些安全层外部的服务。
  • 部署流程的某些部分可能有所不同,具体取决于基础设施即代码 (IaC) 是否是部署流程的一部分。
  • 最大限度地减少延迟对部署流程的潜在影响。因此,在本地控制执行最终步骤时,仅涉及本地连接和相关性。
  • 能够在单一位置管理和释放跨多个环境的控制资产。而不是分布式源。

此参考架构利用 Oracle Cloud 之外的部分服务(例如,GitHub 和 OCI 中的其他服务,例如 DevOps)来解决这些注意事项。此参考体系结构查看 Oracle Cloud Infrastructure (OCI) 平台的部署过程 (CD):Oracle Container Engine for Kubernetes (OKE)、函数和计算实例。公用容器映像使用单独的服务构建(因此该元素是通用性的),然后由 DevOps 部署,以使其不直接与 OKE 进行通信。

通过管道部署自动完成软件发行版,提高开发人员工作效率,并帮助您更频繁地发布特性,同时减少错误。它有助于避免部署期间的停机,并自动更新应用程序的复杂性。Oracle DevOps 可以由从内部部署或其他云迁移负载到 OCI 以及 OCI 上开发新应用的客户使用。

体系结构

在此引用体系结构中,使用 GitHub 操作和 OCI DevOps 服务从 GitHub 部署示例应用程序。应用程序已部署到 OKE 集群。

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

后面是 devops-arch.png 的说明
插图 devops-arch.png 的说明

devops-arch-oracle.zip

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

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

    该体系结构使用单个区域。

  • 外部 CI 系统

    此体系结构使用 GitHub 操作作为外部连续集成系统。GitHub 操作从 GitHub 系统信息库自动执行、定制和运行软件开发工作流。此处,GitHub 操作用于构建代码,然后使用 Docker 进行容器化。当容器化映像准备就绪时,GitHub 操作会将映像推送到 OCI Artifact 存储库(或者,可以将构件放入一个中心位置,其中可以将 GitHub 操作配置为推导 DevOps 以检索构件。这意味着提取内容,而不是推送内容 )。完成到构件资料档案库的传输后,将启动 OCI DevOps 部署管道。您也可以根据您的需求使用 Jenkins 或 Gitlab 等其他连续集成系统。

    如果使用 IaC 技术,则在部署之前,管道可以使用资源管理器等服务实例化环境,并在完成后使用资源管理器关闭这些资源。

    开发运维部署管道还可以将结果输出存储在安全的地方进行报告。

  • DevOps project(项目)

    DevOps 项目是实现连续集成和部署 (CI/CD) 负载所需资源的逻辑分组。DevOps 资源可以是工件、部署管道和环境。通过 DevOps 项目,可以轻松地为所有 DevOps 资源启用日志记录、监视和通知。

  • 部署管道

    部署管道满足向环境提供一组工件所必须满足的要求。管道包含阶段,这些阶段是管道的构建块。管道可以有串行或并行运行的阶段,因此您可以控制软件发行版的流和逻辑。

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

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

  • Artifact 资料档案库

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

  • OCI 日志记录和通知服务

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

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

建议

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

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

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

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

  • 计算配置

    此体系结构使用具有 E3 或 E4 灵活配置的 Oracle Linux OS 映像以及最小资源来托管 OKE 群集节点中的计算主机。如果您的应用需要更多的内存或核心,则可以选择不同的配置。

  • OKE

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

  • 容器映像注册表

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

  • Artifact 注册表

    此体系结构为 OKE 集群使用的软件和配置创建对象。该体系结构创建用于内部使用的 Artifact 注册表资料档案库。软件二进制文件、文本和部署配置将上载到 Artifact 注册表资料档案库并从中下载。

考虑事项

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

  • DevOps 支持的部署

    DevOps 支持部署到 OKE、计算主机和函数。此体系结构部署至 OKE 群集。根据要求考虑部署到其他端点。

  • Linux 支持服务

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

  • 已部署 Artifact

    使用 DevOps 部署的对象需要位于 OCI 对象注册表或容器映像注册表资料档案库中。

  • 应用程序分组

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

部署

要部署此体系结构,请按照此 Live Lab 中 Java 应用程序部署的说明进行操作:

更改日志

此日志列出重大更改: