在主/代理模式下部署 Jenkins

更快的软件开发已成为公司的竞争优势。软件开发流程的自动化有助于速度和一致性,这导致连续集成 (Continuous Integration, CI) 和连续交付和部署 (Continuous Delivery and deployment, CD) 管道的兴起。Jenkins 是 Oracle Cloud Infrastructure 客户的流行产品,因为它可以自动执行 CI 和 CD 的所有阶段。您可以在 Oracle Cloud Infrastructure 上托管 Jenkins,以集中处理构建自动化,并随着软件项目需求的增加而扩展部署。

体系结构

此参考体系结构说明如何使用 Jenkins Oracle Cloud Infrastructure Compute 插件在控制器 / 代理模式下部署 Jenkins。该插件安装在 Jenkins 控制器实例上后,您可以在 Oracle Cloud Infrastructure 内根据需要创建代理实例,并在构建作业完成后自动删除实例或免费资源。

此体系结构包含一个控制器实例和两个代理实例作为部署的起点。您可以根据需要调整代理实例数或控制器实例的大小。Jenkins 控制器实例应安装有 Oracle Cloud Infrastructure 插件代码。

此体系结构使用具有一个可用性域和区域子网的区域。同一引用体系结构可用于具有多个可用性域的区域。建议您使用区域子网进行部署,而不考虑可用性域数。

此体系结构还包含一个负载平衡器和 NAT 网关,用于提供对 Internet 的安全访问。

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

下面是 jenkins-oci.png 的说明
插图 jenkins-oci.png 的说明

jenkins-oci-oracle.zip

作为此体系结构的替代方案,您可以使用 Oracle Container Engine for Kubernetes (OKE)。此体系结构的设置比 OKE 更简单,但在缩放所使用的代理数量时,OKE 提供了更大的灵活性。

体系结构包含以下组件:

  • Jenkins 控制器实例

    此虚拟计算实例充当控制器节点。它监视代理实例的状态(脱机或联机),并从代理接收任务结果响应。

  • Jenkins 代理实例

    这些虚拟计算实例充当代理节点。控制器节点根据需要创建它们,并按照控制器节点的指示执行任何作业。

  • 区域

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

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

    每个计算实例都部署到可以划分为子网的 VCN 中。

  • 可用性域

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

  • 容错域

    容错域是可用性域中的一组硬件和基础结构。每个可用性域都有三个具有独立电源和硬件的容错域。在多个容错域之间分配资源时,应用程序可以容许容纳容错域中的物理服务器故障、系统维护和电源故障。

  • 负载平衡器

    负载平衡器将传入流量分配给 Jenkins 控制器节点,并提供对访问控制器节点的用户的互联网访问。我们建议使用 100 Mbps 负载平衡器,因为负载平衡器主要用于连接到 Jenkins 控制器,流向用户的流量不会太大。

  • NAT 网关

    网络地址转换 (Network Address Translation, NAT) 网关提供 NAT 服务。您不必选择网关的大小

  • 堡垒主机

    堡垒主机是计算实例,用作从云外部访问拓扑的安全受控入口点。堡垒主机通常在非军事区 (DMZ) 中进行预配。它使您可以通过将敏感资源放置在无法直接从云外部访问的专用网络中来保护敏感资源。拓扑有一个已知入口点,您可以定期监视和审计。因此,您可以避免公开拓扑中更敏感的组件,而不会影响对它们的访问。

  • 安全列表

    对于每个子网,可以创建安全规则,以指定必须允许进出子网的源、目标和流量类型。

  • 路由表

    虚拟路由表包含将流量从子网路由到 VCN 之外的目的地(通常通过网关)的规则。

建议

您的要求可能与此处描述的体系结构不同。使用以下建议案作为起点。

  • 计算配置(Jenkins 控制器)

    此体系结构对 Jenkins 控制器节点使用两种核心虚拟机 (VM) 配置。控制器节点负责分配任务、收集代理节点结果以及监视代理节点以实现可用性。

  • 计算形状(Jenkins 代理)

    此体系结构对 Jenkins 代理节点使用四种核心 VM 配置。确保代理的 CPU 高于控制器节点的 CPU。

  • 计算配置(堡垒主机)

    堡垒主机用于访问专用子网中的任何节点。我们建议使用 VM.Standard.E2.1 或 VM.Standard.E2.2 配置。

  • VCN

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

    选择与要设置专用连接的任何其他网络(在 Oracle Cloud Infrastructure、您的内部部署数据中心或其他云提供商)不重叠的 CIDR 块。

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

    设计子网时,请考虑流量和安全要求。将特定层或角色中的所有资源附加到可用作安全边界的同一子网。

    使用区域子网。

  • 安全列表

    使用安全列表定义应用于整个子网的入站和出站规则。

    此体系结构允许对整个专用子网在内部使用 ICMP。

考虑事项

  • 性能

    要获得最佳性能,请确保 Jenkins 控制器节点具有足够的核心和内存。根据代理节点运行的构建或其他任务,创建具有足够核心和内存的代理节点。

  • 可用性

    Jenkins 控制器节点监视代理节点的可用性,并根据需要派生新的节点。在包含多个可用性域的区域中,您可以为不同可用性域中的代理节点创建部署模板(在 Jenkins 控制器上)。

  • 成本

    根据预期工作负载部署调整控制器节点和代理节点上的 CPU 大小。您可以更改控制台中的节点配置,以便从较小的 CPU 计数(最好是两个)开始,然后根据需要进行扩展。使用控制器节点中的实例模板指定代理节点的配置。

  • 监控和预警

    设置对控制器和代理节点的 CPU 和内存使用情况的监视和预警,以便您可以根据需要扩展或收缩 VM 配置。

部署

GitHub 中提供了此引用体系结构的 Terraform 代码。单击一次即可将代码拉入 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. 按照自述文件中的说明操作。

更改日志

此日志仅列出重大更改: