本页内容

  • Jenkins 的 'master/slave' 是如何工作的?
  • 先决条件
  • 我们将做什么?
  • 步骤 1 - 安装 Jenkins Master
  • 步骤 2 - 配置 Jenkins Master 凭据:生成 SSH 密钥、在 Jenkins 上设置凭据
  • 步骤 3 - 搭建 Slave 节点:安装 Java、新增 Jenkins 用户、将 SSH 密钥从 Master 复制到 Slave
  • 步骤 4 - 新增 Slave 节点
  • 步骤 5 - 准备 Slave Agent 节点以执行构建
  • 步骤 6 - 测试
  • 参考文档
  • 生成 SSH 密钥
  • 在 Jenkins 上设置凭据
  • 安装 Java
  • 新增 Jenkins 用户
  • 将 SSH 密钥从 Master 复制到 Slave

Jenkins 是一个从 Hudson 项目分叉出来的自动化服务器。它支持许多 SCM(源代码管理,Source Control Management)软件系统,包括 Git、SVN 和 Mercurial。Jenkins 提供了数百个插件来自动化你的项目。Jenkins 支持 master/slave 架构,使其能够承载大量的项目构建。

Jenkins 的 'master/slave' 是如何工作的?

Jenkins master/slave 架构用于分布式构建环境,在这种环境中,构建项目的工作负载被分配到多个 agent 节点,并且我们可以为每个构建使用不同的环境。

在 Jenkins 的 'master/slave' 架构中,master 表现为一个基础的 Jenkins 安装,并处理构建系统的所有任务。Jenkins master 节点将用于调度作业、监控 slave 节点、将构建分发到 slave 节点、记录并呈现构建结果,以及直接执行构建作业。

Jenkins slave 节点的设置是为了将构建项目从 master 上卸载下来,并且 master 与 slaves 之间需要建立连接。Jenkins slave 节点可以运行在 Windows 和 Linux 等多种操作系统上,且无需在其上安装完整的 Jenkins 软件包。

本教程将教我们如何使用最新的 Ubuntu 版本搭建 Jenkins master-slave 架构。我们将学习搭建 Jenkins master 服务器,并将其他 Ubuntu 节点添加为 Jenkins slaves。

先决条件

  • Ubuntu Server(Ubuntu 22.04 - Ubuntu 16.04)
  • Root 权限
  • master - 10.0.15.10
  • slave01 - 10.0.15.21
  • slave02 - 10.0.15.22

我们将做什么?

  • 安装 Jenkins Master
  • 配置 Jenkins Master 凭据
  • 配置 Slave Agent 节点
  • 新增 Slave 节点
  • 准备 Slave Agent 节点以执行构建
  • 测试

步骤 1 - 安装 Jenkins Master

在本教程中,我们不会涵盖 Jenkins 的基础安装。HowtoForge 上有多篇文章介绍了 Jenkins 的安装。

  • 在 Ubuntu 16.04 上安装 Jenkins
  • 在 Ubuntu 18.04 上安装 Jenkins
  • 在 Ubuntu 20.04 上安装 Jenkins
  • 在 Ubuntu 22.04 上安装 Jenkins
  • 在 CentOS 7 上安装 Jenkins

以下是已安装 Jenkins 的 Ubuntu master 服务器。

在Ubuntu服务器上搭建Jenkins主从架构的教程

步骤 2 - 配置 Jenkins Master 凭据

当 master 服务器上的 Jenkins 安装完成后,我们需要对 master 服务器本身进行配置。默认情况下,有多种方式可以启动 Jenkins agent 节点,我们可以通过 SSH、Windows 管理员账户,以及 Java Web Start(JNLP)来启动 agent 节点,请根据你的环境配置和操作系统选择最合适的方式。

在本指南中,我们将通过 SSH 启动 agent 节点,因此需要在 master 服务器上设置 Jenkins 凭据。

生成 SSH 密钥

我们将使用 SSH 密钥认证来搭建 agent 节点,因此我们需要为 Jenkins 用户生成 SSH 密钥,然后使用 'ssh-copy-id' 手动将该密钥上传到每个服务器节点。

在 Jenkins master 服务器上,登录到 Jenkins 用户并生成 SSH 密钥。

su - jenkins
ssh-keygen

你将在 '.ssh' 目录下得到 'id_rsa' 私钥和 'id_rsa.pub' 公钥。

在Ubuntu服务器上搭建Jenkins主从架构的教程

在 Jenkins 上设置凭据

打开你的 Jenkins 仪表盘,点击左侧的 'Credentials'(凭据)菜单。

在Ubuntu服务器上搭建Jenkins主从架构的教程

然后点击 'global'(全局)域链接。

现在点击 'Add Credentials'(添加凭据)。

在Ubuntu服务器上搭建Jenkins主从架构的教程

现在选择认证方式。

  • 类型(Kind):SSH Username with private key(带有私钥的 SSH 用户名)
  • 作用域(Scope):Global(全局)
  • 用户名(Username):jenkins
  • 私钥(Private key):直接输入,并粘贴来自 master 服务器的 Jenkins 用户的 'id_rsa' 私钥。

点击 'OK'(确定)。

在Ubuntu服务器上搭建Jenkins主从架构的教程

基于 SSH 认证密钥方式的 Jenkins 凭据已创建完成。

在Ubuntu服务器上搭建Jenkins主从架构的教程

步骤 3 - 搭建 Slave 节点

现在我们将通过在那些服务器上安装 Java 并创建一个新的 Jenkins 用户来搭建 slave 节点服务器。

安装 Java

安装 'software-properties-common' 软件包,并添加 Java 的 PPA 软件仓库。

sudo apt install software-properties-common apt-transport-https -y
sudo add-apt-repository ppa:openjdk-r/ppa -y

现在使用下面的 apt 命令安装 Java OpenJDK。

sudo apt install openjdk-8-jdk -y

安装完成后,检查已安装的 Java 版本。

java -version

你将看到系统上已安装 Java OpenJDK 1.8。

在Ubuntu服务器上搭建Jenkins主从架构的教程

新增 Jenkins 用户

现在向所有 agent 节点添加 'Jenkins' 用户。

运行下面的命令。

useradd -m -s /bin/bash jenkins
passwd Jenkins

用于 agent 节点的 'Jenkins' 用户已创建完成。

在Ubuntu服务器上搭建Jenkins主从架构的教程

将 SSH 密钥从 Master 复制到 Slave

接下来,我们必须将 'id_rsa.pub' 密钥从 master 上传到 slave 服务器节点。我们需要使用如下的 'ssh-copy-id' 命令将其上传到每个服务器节点。

ssh-copy-id 
[email protected]
ssh-copy-id 
[email protected]

输入 Jenkins 用户的密码。

SSH 密钥 'id_rsa.pub' 已上传到所有 agent 节点。

在Ubuntu服务器上搭建Jenkins主从架构的教程

步骤 4 - 新增 Slave 节点

在 Jenkins 仪表盘上,点击 'Manage Jenkins'(管理 Jenkins)菜单,然后点击 'Manage Nodes'(管理节点)。

在Ubuntu服务器上搭建Jenkins主从架构的教程

点击 'New Node'(新建节点)。

在Ubuntu服务器上搭建Jenkins主从架构的教程

输入节点名称 'slave01',选择 'permanent agent'(永久 agent),然后点击 'OK'(确定)。

在Ubuntu服务器上搭建Jenkins主从架构的教程

现在填写节点信息的详细内容。

  • 描述(Description):slave01 节点 agent 服务器
  • 远程根目录(Remote root directory):/home/jenkins
  • 标签(Labels):slave01
  • 启动方式(Launch method):通过 SSH 启动 slave agent,输入主机 IP 地址 '10.0.15.21',选择使用 'Jenkins' 凭据进行认证。

在Ubuntu服务器上搭建Jenkins主从架构的教程

现在点击 'Save'(保存)按钮,然后等待 master 服务器连接到所有 agent 节点并启动 agent 服务。

以下是 master 服务器连接到所有 agent 节点时的结果。

在Ubuntu服务器上搭建Jenkins主从架构的教程

Jenkins slave 节点已添加到 master 服务器。

步骤 5 - 准备 Slave Agent 节点以执行构建

在本步骤中,我们将配置 Jenkins master 以在 slave agent 节点上执行构建。

点击 'Manage Jenkins'(管理 Jenkins)菜单,然后点击 'Configure System'(配置系统)。

在Ubuntu服务器上搭建Jenkins主从架构的教程

现在进入 'Slave Setups'(Slave 设置)部分,并按如下所示定义你需要的所有内容。

在Ubuntu服务器上搭建Jenkins主从架构的教程

关于 'Slave Setups'(Slave 设置)的更多信息,请参见链接。

点击 'Save'(保存)按钮,现在我们已经准备好在 slave agent 节点上执行构建了。

步骤 6 - 测试

现在我们想要为 Jenkins 创建一个新的简单构建,并在 'slave01' 和 'slave02' agent 节点上执行该构建。

在 Jenkins 仪表盘上,点击 'New Item'(新建任务)菜单。

在Ubuntu服务器上搭建Jenkins主从架构的教程

输入任务名称,选择 freestyle project(自由风格项目),然后点击 'OK'(确定)。

在Ubuntu服务器上搭建Jenkins主从架构的教程

在常规(general)部分,输入作业描述,并勾选 'Restrict where this project can be run'(限制此项目可运行的位置)选项。

在 'Label Expression'(标签表达式)中,指定节点,例如 'slave01'。

在Ubuntu服务器上搭建Jenkins主从架构的教程

移动到构建(build)部分,选择 'Execute shell'(执行 shell)选项,输入如下命令。

top -b -n 1 | head -n 10 && hostname

点击 'Save'(保存)按钮,你将被重定向到作业页面。

在Ubuntu服务器上搭建Jenkins主从架构的教程

点击 'Build Now'(立即构建)来构建项目,然后点击 'Build History'(构建历史)部分中的条目。

在Ubuntu服务器上搭建Jenkins主从架构的教程

以下是我的结果。

在 'slave01' agent 节点上的构建。

在Ubuntu服务器上搭建Jenkins主从架构的教程

在 'slave02' agent 节点上的构建。

在Ubuntu服务器上搭建Jenkins主从架构的教程

Jenkins master/slave 架构的安装与配置,以及 Jenkins 的分布式构建已成功完成。

参考文档

  • https://wiki.jenkins.io/