【DevOps工具篇】Jenkins的Master-Slave Agent(主从)架构

2020-12-19T16:11:36+08:00 | 5分钟阅读 | 更新于 2020-12-19T16:11:36+08:00

Macro Zhao

【DevOps工具篇】Jenkins的Master-Slave Agent(主从)架构

@TOC

推荐超级课程:

Jenkins拥有强大的主从架构功能,可以实现分布式构建。本文我们将学习如何在Ubuntu机器上建立从节点并与Jenkins主节点集成。

在Jenkins中配置主从设置的不同方法

  • 永久代理(JNLP从机) 这是设置Jenkins从机的传统方法。代理通过Java Web Start(JNLP)从Jenkins主节点启动。它们与主节点建立连接,使主节点能够向它们发送构建作业。
  • SSH代理 在这种配置中,Jenkins从机通过SSH连接到主节点。与JNLP从机相比,SSH代理提供了更安全的通信方式,因为连接是加密的。当需要增强安全性以及在不同网络间工作时,SSH代理非常有用。
  • Docker代理 Docker容器可以用作Jenkins代理。可以根据需求启动每个容器来执行特定的构建作业,作业完成后销毁容器。

Jenkins主节点

您的主体Jenkins服务器是主节点。主节点的工作是处理:

  • 调度构建作业。
  • 将构建作业分派给从机实际执行。
  • 监控从机(可能根据需要将它们上线或下线)。
  • Jenkins的主节点实例也可以直接执行构建作业。

Jenkins从机

从机是一个在远程机器上运行的Java可执行程序。以下是Jenkins从机的特点:

  • 它接收来自Jenkins主节点实例的请求。
  • 从机可以在各种操作系统上运行。
  • 从机的工作是按照指令执行,这涉及执行由主节点分派的构建作业。
  • 您可以配置一个项目总是在特定的从机机器上运行,或者特定类型的从机机器上运行,或者简单地让Jenkins选择下一个可用的从机。

设置

先决条件

  • 启动三个EC2实例——Jenkins主节点、从机1、从机2和Docker主机(对于Docker主机,您可以创建新的虚拟机或使用现有的)
  • AMI——Ubuntu 20.04,实例类型——t2.micro,生成新的密钥对
  • 网络设置——默认VPC,安全组——创建新的,并设置入站规则——打开所有流量(这不是最佳实践推荐的,但仅出于实际目的)
  • 配置存储——15GB并启动

设置步骤

  • 在所有机器安装Java
sudo su -  
sudo apt update  
sudo apt install openjdk-11-jdk  
java --version
  • 在主机中安装Jenkins
sudo apt-get update  
sudo apt install openjdk-11-jdk  
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc   https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key  
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]   https://pkg.jenkins.io/debian-stable binary/ | sudo tee   /etc/apt/sources.list.d/jenkins.list > /dev/null  
sudo apt-get update  
sudo apt-get install jenkins

Slave1节点配置启动方法 — SSH代理

  • Maven安装
sudo apt install maven -y  
  • 以Jenkins用户创建用户
sudo useradd -m jenkins  
sudo -u jenkins mkdir /home/jenkins/.ssh

现在登录到Jenkins主节点 通过执行以下命令创建SSH密钥:

ssh-keygen
# 将SSH密钥从主节点复制到从节点
# 在Jenkins主节点的EC2实例上执行以下命令。
sudo cat ~/.ssh/id_rsa.pub
# 复制上述命令的输出
# 现在登录到从节点并执行以下命令
sudo -u jenkins vi /home/jenkins/.ssh/authorized_keys
# 这将是一个空文件,现在将主节点的公钥复制到上述文件中。一旦你在从节点的上述文件中粘贴了公钥,
# 通过输入 :wq! 退出文件
现在回到主节点
ssh jenkins@slave_node_ip
  
# 这是为了确保主节点能够连接到从节点。

在Jenkins中注册从节点:

  • 现在进入Jenkins主节点,管理Jenkins,管理节点。
  • 点击新建节点。输入名称并勾选永久代理。
  • 输入名称并将执行器数量设置为1。输入远程目录为 /home/jenkins。
  • 选择启动方法为通过SSH启动从节点。
  • 输入从节点IP地址作为主机。
  • 点击凭据。输入用户名为jenkins。确保jenkins是小写的,如所示。
  • 类型为带有私钥的SSH用户名。通过执行以下命令直接输入主节点的私钥:
sudo cat ~/.ssh/id_rsa
  • 选择主机密钥验证策略为“手动信任的密钥验证策略”。
  • 点击启动代理…确保它连接到代理节点

从节点配置 - 启动方法 - JNLP

  • 在 Jenkins 仪表板 - 管理 Jenkins - 管理节点和云 - 新节点
  • 将节点名称添加为永久代理
  • 名称:在此 Jenkins 安装中唯一标识一个代理。描述:任何内容
  • 执行器数量:2
  • 远程根目录:/opt/build
  • 标签:标签(或标签)用于将多个代理分组到一个逻辑组中。
  • 使用情况:尽可能使用这个节点
  • 启动方法:通过在控制器上执行命令来启动代理
  • 自定义工作目录路径:如果您保留空白,它将自动引用根目录,将使用自定义 Remoting 工作目录而不是代理根目录
  • 可用性:尽可能保持这个代理在线
  • 保存上述配置后,您将获得应在代理中执行的命令。它包含 agent.jar、一个 secret-file 和一个 jnlp 文件
  • 在执行以下命令之前更改 IP 地址 - 主机 IP 地址
  • 连接后,您可以创建或编辑一个作业,在“限制此项目可以运行的位置”中选择这个选项
 curl -sO http://54.84.175.179:8080/jnlpJars/agent.jar  
 java -jar agent.jar -jnlpUrl http://54.84.175.179:8080/computer/java%2Dnode/jenkins-agent.jnlp -secret 048ad980b94153362fedfb85123e72c0f0093f53b8fec44849f5848ddf29b2b0 -workDir "/opt/build"

Docker 从节点 - 动态从节点配置

  • 更好的资源利用率
  • 定制化代理,因为它可以运行不同的构建,如 Java 8、Java 11
  • 可扩展性
  1. 安装 Docker:
    sudo apt install docker.io -y  
    sudo systemctl start docker  
    sudo systemctl enable docker  
    sudo systemctl status docker
    
  2. 使用远程 API 配置 Docker 主机
    sudo vi /lib/systemd/system/docker.service  
    你可以用以下行替换:  
    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock  
    sudo systemctl daemon-reload  
    sudo service docker restart
    
  3. 通过执行以下 curl 命令验证 API
    curl http://localhost:4243/version  
    从以下仓库下载 Dockerfile。  
    git clone https://github.com/akannan1087/jenkins-docker-slave; cd jenkins-docker-slave  
    
  4. 构建 Docker 镜像
    sudo docker build -t my-jenkins-slave .  
    sudo docker images
    
  • 使用 Docker 插件配置 Jenkins 服务器
  • 现在登录到 Jenkins 主节点。确保你在 Jenkins 中安装了 Docker 插件
  • 现在转到管理 Jenkins -> 配置节点和云
  • 点击 Docker 云详情
  • 输入 Docker 主机的 DNS 名称或 IP 地址
  • tcp://docker_host_dns:4243
  • 确保选中了“启用”
  • 现在点击“测试连接”,以确保与 Docker 主机的连接正常工作。

  • 配置 Docker 代理模板
    1. 现在点击 Docker 代理模板:
    2. 输入标签为“docker-slave”并给一个名称
    3. 点击“启用”
    4. 现在输入你之前在 Docker 主机上构建的 Docker 镜像的名称。
    5. 输入 /home/jenkins 作为远程文件系统根目录

    6. 选择“使用 SSH 连接”作为连接方法:

    7. 选择“从不拉取”作为拉取策略,因为我们已经在 Docker 主机上存储了镜像。
    8. 根据你的 Dockerfile 输入 SSH 凭据 — jenkins/password

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee