代理(agent)
在安装好 Jenkins,进入系统管理页面时,会有这样一句提示:
Building on the built-in node can be a security issue. You should set up distributed builds. See the documentation (opens new window).
在内置节点上构建可能会带来安全问题。您应该设置分布式构建。请参阅文档。
并在文档中提到:
It is therefore highly advisable to not run any builds on the built-in node, instead using agents (statically configured or provided by clouds) to run builds.
因此,强烈建议不要在内置节点上运行任何构建,而是使用代理 (静态配置或由云提供) 来运行构建。
inbound-agent和ssh-agent镜像的区别
在实践中发现,在官方文档中使用的是 ssh-agent
镜像,而在一些云厂商的文档中使用的
# 静态代理
也叫固定节点,节点一直运行,任务构建完成后不会销毁,创建完成后将一直占用集群资源,配置过程较简单。
提示
- 参考官方文档 Using Jenkins agents (opens new window)
- 需要注意的是,使用 SSH 方式连接时,需使用
ssh-keygen -t rsa -m PEM
生成密钥,参考 Jenkins slave node is offline : Authentication failed - Stack Overflow (opens new window)
# 添加节点
Dashboard - 系统管理 - 节点列表,New Node
配置以下节点信息:
Number of executors(并发构建的最大数目):默认为
1
,可根据实际需求填写。- 推荐最大值为 CPU 核心数
Remote root directory(远程工作目录):
/home/jenkins/agent
Launch method(启动方式):选择 “
Launch agent by connecting it to the controller
(通过 Java Web 启动代理)”。Labels(标签):给代理加上一些标签,空格分隔。
- 如:
linux docker node16
- 如:
其余参数可保持默认,无需填写,并单击 “保存”。
在 “节点列表” 中单击新增的节点名称,可看到 Agent 状态未连接,并提供了节点连接 Jenkins 的方式。该命令适用于虚拟机安装,而本示例为容器化安装,因此仅需复制其中的 secret,如下图所示。
# 部署节点
原生部署
以 Ubuntu 22.04 为例
# 安装 jdk
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install openjdk-11-jdk
# 复制上面的 Unix命令,运行
curl -sO http://xxx.xxx.xxx.xxx:8080/jnlpJars/agent.jar
java -jar agent.jar -jnlpUrl http://xxx.xxx.xxx.xxx:8080/computer/node2/jenkins-agent.jnlp -secret xxxxxxxxxxxxxxxx -workDir "/home/jenkins/agent"
改进,后台运行
nohup <上面的 java ..... -workDir "/home/jenkins/agent"> &
kill 进程
ps -ef | grep xxx.jar
# 找到进程号
kill -9 进程号
容器化部署
- 先从这里 jenkins/inbound-agent Tags | Docker Hub (opens new window) 找一个镜像版本
- 需要留意系统架构,是
windows/amd64
还是linux/amd64
- 本文以
jenkins/inbound-agent:alpine-jdk11
为例
- 需要留意系统架构,是
# Docker
docker run --init jenkins/inbound-agent -url http://<jenkins-server>:<port> -workDir=/home/jenkins/agent <secret> <agent name>
# K8S
以在 kubesphere(k8s)部署为例,Docker 同理:
- 镜像名称:
jenkins/inbound-agent:alpine-jdk11
。此处镜像版本可能随时间变化发生变动,请根据实际情况进行选择,或拉取 latest 版本。 - CPU 配额:本例中 CPU 配额限制为 2 Core
- 内存配额:本例中内存配额限制为 2048 MiB
- 特权容器:必需要开启 “
特权容器
”,使容器获得操作宿主机的权限,否则容器中无法执行 docker 命令。
提示
Agent 设置完成后,建议将 Master 的并发构建数设置为 0
,即不使用 Master 进行本地构建
# 动态代理
todo