为云部署设置 CI/CD 管道

快速交付软件对于在云中高效运行应用非常重要。Jenkins 是为 Oracle Cloud 中的负载自动执行连续 Iintegration (CI) 和连续部署 (Continuous Deployment,CD) 管道的常用产品。

体系结构

在此参考架构中,Jenkins 托管在 Oracle Cloud Infrastructure 上,以集中实现构建自动化并扩展部署。连续集成过程通过使用 Oracle Cloud Infrastructure Registry (OCIR) 和容器引擎 for Kubernetes (OKE) 来创建和部署应用程序。GitHub 用于管理源代码。

GitHub 提供 Web 挂钩集成,因此 Jenkins 在每个代码检入后开始运行自动构建和测试。示例 Web 应用程序部署为 CI/CD 管道的一部分,最终用户可以从 Container Engine for Kubernetes 集群访问该管道。为了简化流程,Terraform 用于基础结构自动化。

在此参考体系结构中,Terraform 利用一个 Terraform 模块,该模块能够在从单个 Jenkins VM 到控制器(服务器)和代理(员工)节点配置的多种不同配置中部署 Jenkins。这意味着可以将 Jenkins 模块合并到其他适用于非 Kubernetes 用例的体系结构部署中(例如,APEX 应用程序开发、VM 上的 WebLogic 等)。

代理配置意味着可以重新配置环境以提供反映工作负载需求的不同计算实例数。这包括替换代理 VM 的可能性,以避免累积旧依赖项、瞬态依赖性冲突以及使用未声明依赖项构建时出现问题。

运行 Jenkins 的 VM 节点使用预定义的 VM 映像进行配置,该映像使用所有必要的软件预先构建以支持 Jenkins。

下图说明了此引用体系结构。

后面是 cicd-oci.png 的说明
插图 cicd-oci.png 的说明

cicd-oci-oracle.zip

此体系结构包括以下组成部分:
  • 区域

    Oracle Cloud Infrastructure 区域是包含一个或多个数据中心(称为可用性域)的本地化地理区域。区域独立于其他区域,其距离很广(跨越国家或甚至大陆)。

  • 可用性域

    可用性域是区域内的独立独立数据中心。每个可用性域中的物理资源与其他可用性域中的资源隔离,这些资源提供了容错功能。可用性域不共享基础设施,例如电源、冷却或内部可用性域网络。因此,一个可用性域的故障不可能影响该区域中的其他可用性域。

  • 虚拟云网络 (VCN) 和子网

    Jenkins 在部署在 VCN 中的虚拟机 (VM) 计算实例上运行,您可以细分到子网中。Jenkins 托管在区域公共子网 A 上,Container Engine for Kubernetes 部署在区域公共子网 B 中。

  • 计算实例

    Jenkins 已部署到计算实例 VM。Container Engine for Kubernetes 集群还在计算实例上运行其节点。

  • Container Engine for Kubernetes

    Container Engine for Kubernetes 是一个完全托管、可扩展和高可用性的服务,可用于将容器化应用程序部署到云中。您可以指定应用程序所需的计算资源,Container Engine for Kubernetes 将在现有租户中的 Oracle Cloud Infrastructure 上设置这些资源。

  • 注册表

    注册表是 Oracle 管理的注册表,可用于简化生产工作流的开发。注册表使您作为开发人员可以轻松地存储、共享和管理 Docker 映像等开发对象。

  • Jenkins

    Jenkins 是一款开放源代码自动化服务器,让开发人员可以可靠地构建、测试和部署软件。Jenkins 支持主/代理模式,其中构建项目的工作量由主节点委托给多个代理节点。单个 Jenkins 安装可以托管多个项目,也可以为构建和测试提供不同的环境。

建议

您的要求可能不同于此处介绍的体系结构。将以下建议案用作起点。

  • 计算配置

    此体系结构使用带有 VM.Standard2.1 配置的 Oracle Linux OS 映像来托管 Jenkins 服务器和 Container Engine for Kubernetes 群集节点。如果您的应用程序需要更多的内存或核心,则可以选择其他配置。

  • VCN

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

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

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

  • Jenkins

    此体系结构在计算实例上部署 Jenkins。Jenkins 主节点用于构建 CI/CD 管道。如果您有多个管道可并行构建和运行,则可以使用 Jenkins 代理节点开发更多管道。

  • Container Engine for Kubernetes

    此体系结构部署 Container Engine for Kubernetes 集群。worker 节点部署在 VM.Standard2.1 Oracle Linux OS 上。此体系结构在群集中使用三个 worker 节点,但在每个群集上最多可以创建 1000 个节点。

  • 注册表

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

考虑事项

  • 可扩展性

    可以通过更新 Container Engine for Kubernetes 集群中的 worker 节点数(具体取决于负载)来扩展应用程序。您还可以通过减少集群中的 worker 节点数来放大。在群集上创建服务时,可以创建负载平衡器,以便在分配给该服务的节点之间分配流量。对于 Jenkins,可以使用 Jenkins 主节点为多个管道创建更多代理。

  • 应用程序可用性

    故障域提供了单个可用性域中的最佳恢复能力。您可以在多个可用性域中部署执行相同任务的计算实例。此设计通过引入冗余来消除单点故障。

  • 可管理性

    此体系结构使用 GitHub 上托管的示例 Web 应用程序进行源控制。注册表在构建管道中用于存储应用程序的 Docker 构建映像。

  • 安全性

    使用策略限制谁可以访问贵公司拥有的 Oracle Cloud Infrastructure 资源以及如何访问这些资源。

    Container Engine for Kubernetes 与 Oracle Cloud Infrastructure Identity and Access Management (IAM) 集成,使用本机 Oracle Cloud Infrastructure 身份功能可以轻松进行身份验证。

部署

部署此引用体系结构所需的代码在 GitHub 中可用。单击一次即可将代码拉入 Oracle Cloud Infrastructure Resource Manager,创建堆栈并部署该堆栈。或者,也可以使用 Terraform CLI 将代码从 GitHub 下载到计算机,定制代码并部署体系结构。

  • 使用 Oracle Cloud Infrastructure Resource Manager 进行部署:
    1. 单击 部署到 Oracle Cloud

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

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

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

    7. 如果不需要进一步更改,请返回堆栈详细信息页,单击 Terraform 操作,然后选择应用
  • 使用 Terraform CLI 进行部署:
    1. 转至 GitHub
    2. 将代码下载或克隆到本地计算机。
    3. 请按照 README.md 中的说明执行操作。

更改日志

此日志列出了重大更改: