Jenkins 拉取代码到动态 Agent Pod 并调用 Docker 构建镜像的详细过程说明,涵盖技术实现、关键配置和底层交互逻辑。
1. Jenkins 动态 Agent Pod 的启动
前提条件
- Jenkins 已安装
kubernetes-plugin,并配置了 Kubernetes Cloud(连接至 K8s 集群)。 - K8s 集群已为 Jenkins Agent 分配权限(通过 ServiceAccount 和 RBAC)。
步骤说明
-
触发流水线:
- 开发者提交代码到 Git 仓库(如 GitHub/GitLab),触发 Jenkins Webhook。
- Jenkins 根据
Jenkinsfile中的agent配置,向 Kubernetes API 发起请求,动态创建一个 Agent Pod。
-
Agent Pod 的创建:
- Pod 模板定义:在 Jenkins 的 Kubernetes Cloud 配置中定义 Agent Pod 的模板,例如:
# jenkins-agent-pod.yaml apiVersion: v1 kind: Pod metadata: labels: jenkins-agent: true spec: containers: - name: jnlp image: jenkins/inbound-agent:latest resources: limits: cpu: "1" memory: "2Gi" - name: docker # 必须的 Docker 构建环境 image: docker:dind securityContext: privileged: true # Docker in Docker 需要特权模式 volumeMounts: - name: docker-sock mountPath: /var/run/docker.sock volumes: - name: docker-sock hostPath: path: /var/run/docker.sock # 挂载宿主机 Docker Socket - 动态调度:Kubernetes 根据资源可用性将 Agent Pod 调度到某个 Worker 节点。
- Pod 模板定义:在 Jenkins 的 Kubernetes Cloud 配置中定义 Agent Pod 的模板,例如:
-
代码拉取:
- Agent Pod 启动后,Jenkins 将代码仓库的 URL 和凭证传递给 Agent。
- Agent 使用
git clone命令拉取代码到 Pod 的工作目录(如/home/jenkins/agent/workspace/<job-name>)。
关键配置
-
Jenkins Kubernetes 插件配置:
- 在 Jenkins 管理界面中配置 Kubernetes Cloud,指定 K8s API 地址、命名空间和 ServiceAccount。
- 指定 Agent Pod 模板的 YAML 文件路径(或直接填写 Pod 定义)。

-
RBAC 权限:
# 为 Jenkins ServiceAccount 授予创建 Pod 的权限 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: jenkins-agent-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["create", "delete", "get", "list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: jenkins-agent-rolebinding subjects: - kind: ServiceAccount name: jenkins namespace: default roleRef: kind: ClusterRole name: jenkins-agent-role apiGroup: rbac.authorization.k8s.io
2. Jenkins 调用 Docker 构建镜像
环境准备
- Docker in Docker(DinD):Agent Pod 中运行
docker:dind容器,提供 Docker 守护进程。 - 挂载 Docker Socket:通过
hostPath将宿主

最低0.47元/天 解锁文章
2137

被折叠的 条评论
为什么被折叠?



