master/agent架构,一主多从,master节点负责webUI和用户定义流水线任务然后把任务分发给agent节点,agent节点进行负责执行构建任务的,可以通过节点标签来指定将哪些构建任务在指定的标签agent节点进行构建
Master和Agent连接方式有两种:ssh连接基于秘钥ssh-key生成给jenkins认证,JNLP连接java web代理连接通过生成secret密码串进行认证固定端口为5000/tcp
Agent节点有三种部署方式
1)节点Agent,在一个主机上部署一个jenkins实例,把他做为Master节点的被使用端,构建任务在该节点上进行
2)Docker Agent,只做为agent使用没有jenkins的webUI功能,更轻量化,容器只负责执行matser下发的构建任务;此agent有两种分别为“静态docker Agent”和“动态docker agent” ,静态是基于特定的docker镜像持续运行agent节点容器,动态就是通过jenkins的Master节点按需在docker上启动容器做为Agent节点完成构建任务后销毁
⚙️配置JJLP连接jenkins Agent节点
1)系统管理-->节点管理-->添加节点-->填写节点名称并勾选固定节点,点击Create
2) 参数定义配置
远程工作目录如果Agent主机部署jenkins有jenkins用户那么需要填写为默认的工作目录/home/jenkins/,用户有写权限
这里我们因为选择的是通过JNLP方式来连接Agent节点,所以选择"通过Java Web启动代理"
因为使用JNLP方式连接需要把代理端口打开,在全局安全配置
然后点击节点,根据系统linux或Windows复制对应命令在Agent主机上执行,不需要安装jenkins实例,需要在Agent主机上创建jenkins用户家目录,如果是特定工作目录,需要把目录属主属组全部改为jenkins用户和组
进行连接并查看是否连接成功
因为给的命令式前端运行的,在关闭终端或ctrl+c中断会导致离线,所以需要执行一个后台运行的命令加一个nohup命令,或者写一个system文件
方法1:使用nohup
nohup java -jar agent.jar -url http://10.150.9.121:8080/ -secret e23e38598309c4b59935f27fdc0af82d63a0173628e6e1887cca9254204661f3 -name Agent1 -webSocket -workDir "/home/jenkins" > /home/jenkins/agent.log 2>&1 &方法2:使用systemd管理
创建一个 systemd 服务文件,例如/etc/systemd/system/jenkins-agent.service
[Unit] Description=Jenkins Agent After=network.target [Service] Type=simple User=jenkins WorkingDirectory=/home/jenkins ExecStart=/usr/bin/java -jar /home/jenkins/agent.jar -url http://10.150.9.121:8080/ -secret e23e38598309c4b59935f27fdc0af82d63a0173628e6e1887cca9254204661f3 -name Agent1 -webSocket -workDir "/home/jenkins" Restart=always RestartSec=10 [Install] WantedBy=multi-user.target新建一个构建任务进行测试
🔐c:SSH 方式更常见、更受生产环境青睐
在agent主机上创建jenkins用户并设置密码,在master上添加Username with Password凭据口令凭据,输入用户名和密码进行调用;
也可以选择SSH Username with private key添加私钥凭据进行连接需要在agent执行命令在本地生成公钥文件,ssh-copy-id -i .ssh/id_rsa.pub jenkins@自己的Agent主机IP地址,输入密码登录后,查看jenkins用户目录下生成了.ssh/authorized_keys文件就能够远程连接了
具体操作
1、Agent主机:useradd -m jenkins -s /bin/bash 2、如果执行构建任务需要特定工作目录,那么需要创建并把属主和属组改为jenkins mkdir -p /appdata/jenkins chown -R /appdata/jenkins 3、切换用户jenkins上 su jenkins 4、生成私钥 ssh-keygen -t rsa -P "" 5、查看复制私钥 cat .ssh/id_rsa 6、在jenkins master主机上保存,凭据为SSH Username with private key,在Private Key下添加刚才的 私钥 7、ssh-copy-id -i .ssh/id_rsa.pub jenkins@自己的Agent主机IP地址,输入密码登录后,查看jenkins用户目录下生成了.ssh/authorized_keys文件就能够远程连接了 ssh-copy-id -i .ssh/id_rsa.pub jenkins@10.150.9.120 ll .ssh/authorized_keys 8、验证是否连接成功🧩基于Docker容器的动态Agent
1)在jenkins master插件商店上安装dokcer插件
2)在Agent主机上安装Docker并创建jenkins用户,并将jenkins用户添加附属组为docker
3)添加Clound,将Docker Host URL内容远程主机填写tcp://主机IP+端口,还需要在agent主机上的docker的system文件添加-H tcp://0.0.0.0:2376暴露端口接受远程请求