Jenkins集成容器动态Agent构建
在传统 CI/CD 架构中,Jenkins 采用静态虚拟机作为构建节点(Agent),存在资源浪费、多项目依赖冲突、环境难以维护等痛点。本文介绍基于 Kubernetes / 阿里云 ACK 集群 实现 Jenkins 容器化动态 Agent 构建方案:任务触发时自动拉起 Pod,运行完毕立即销毁释放资源。
一、集成 ACK 集群配置
1.1 添加 Kubernetes 云
- 登录 Jenkins,进入 系统管理 -> 节点和云管理 -> Clouds;
- 点击「新建一个 cloud」,类型选择 Kubernetes。


1.2 配置 Kubernetes 连接参数
进入 Cloud 配置详情页,核心参数如下:
* Kubernetes 地址 (API Server):https://kubernetes.default.svc
* Kubernetes 命名空间:devops-tools(建议与 Jenkins Deployment 在同一个 Namespace)
* Jenkins 地址:http://jenkins-service:8080(集群内部 Service 访问地址)
* Jenkins 通道地址 (Tunnel):jenkins-service:50000(集群内部 JNLP 节点通信端口)
* 点击「测试连接」,确认连接成功(Connected to Kubernetes)。

二、Pod 模板配置 (Pod Template)
2.1 新增 Pod 模板
在 Cloud 设置下,新增一个名为 aliworker 的 Pod 模板,用于定义执行流水线任务的容器环境。

2.2 基础设置与标签匹配
- 名称:
aliworker - 命名空间:
devops-tools - 标签列表 (Labels):
text aliworker nodejs master common worker maven提示:为兼容旧版流水线任务的
node(label: '...')声明,可以在标签列表中添加多个以空格分隔的别名,使得指定的脚本均可调度到该容器模板执行。


三、双容器协同架构 (Main + Sidecar Dind)
为了在无特权隔离的容器环境下安全、高效地进行业务编译与 Docker 镜像构建,推荐采用 主构建容器 + Sidecar Dind (Docker-in-Docker) 双容器架构:
3.1 主构建容器 (jnlp)
- 容器名称:
jnlp - 镜像地址:
jtp-test-acr-registry-vpc.cn-shenzhen.cr.aliyuncs.com/tools/inbound-agent:slave(基于官方jenkins/inbound-agent:jdk21定制打入企业依赖) - 工作目录:
/home/jenkins/agent - 职责说明:负责执行 Pipeline 脚本逻辑,运行 Maven / Gradle 编译 Java,或者运行 Node.js 编译前端代码。
镜像构建建议:需参考原有虚拟机 Agent 节点的构建工具版本,将一致版本的
nodejs、maven、gradle、docker cli、git、python等统一固化到 Dockerfile 中构建制品镜像。

3.2 Sidecar 容器 (dind)
- 容器名称:
dind - 镜像地址:
jtp-test-acr-registry-vpc.cn-shenzhen.cr.aliyuncs.com/tools/inbound-agent:dind(基于官方docker:stable-dind搬运至私网 ACR) - 职责说明:作为 Sidecar 与主容器协同工作。当主容器执行
docker build或docker push时,通过宿主通信调用 dind 容器提供的 Docker Daemon 服务。

3.3 存储卷共享 (Volume Mount)
因为 Agent 构建完成后会随 Pod 自行销毁,具备临时性生命周期,故采用 EmptyDir 卷共享通信套接字:
* 挂载路径 1:/var/run
* 挂载路径 2:/var/lib/docker
通过该卷共享,主容器内的 Docker CLI 可直接与 dind 容器的 docker socket 交互。

3.4 节点亲和性调度 (Node Affinity)
为防止突发高并发构建消耗集群业务节点的 CPU / 内存资源,建议在 Jenkins Pod Template 中配置软亲和(PreferredDuringSchedulingIgnoredDuringExecution),将动态构建 Pod 优先调度到打有特定标签的 CI Worker 节点。
四、常见问题排查与避坑指南
4.1 缺失构建工具
- 现象:Pipeline 构建报错提示找不到命令(如
mvn: not found或npm: not found); - 原因与方案:
inbound-agent:slave基础镜像中缺少相应工具,需在 Dockerfile 中补充安装对应版本并重新推送到 ACR。
4.2 SSH 免密配置缺失
- 现象:Pipeline 部署阶段提示 SSH 报错(
Connection refused或Permission denied); - 原因与方案:
inbound-agent:slave镜像中未打包部署所需的 SSH 私钥,或~/.ssh/config缺少StrictHostKeyChecking no配置。
4.3 网络不通目的部署机器
- 现象:容器内 SSH 或 Curl 目标机器 IP 超时;
- 原因与方案:Kubernetes Worker 节点所属网段未在目标主机所在的安全组中放通入站 22 / 对应业务端口。
4.4 Docker 镜像推送 / 拉取失败
- 现象:执行
docker push提示凭据错误或认证失败; - 原因与方案:
inbound-agent:slave镜像中未预置正确的 ACR 认证凭据(/root/.docker/config.json);- Sidecar
dind容器未能正常启动,检查特权模式(Privileged)或安全策略是否受限。