Jenkins 拉取代码到动态 Agent Pod 并调用 Docker 构建镜像

Jenkins 拉取代码到动态 Agent Pod 并调用 Docker 构建镜像的详细过程说明,涵盖技术实现、关键配置和底层交互逻辑。


1. Jenkins 动态 Agent Pod 的启动

前提条件
  • Jenkins 已安装 kubernetes-plugin,并配置了 Kubernetes Cloud(连接至 K8s 集群)。
  • K8s 集群已为 Jenkins Agent 分配权限(通过 ServiceAccount 和 RBAC)。
步骤说明
  1. 触发流水线

    • 开发者提交代码到 Git 仓库(如 GitHub/GitLab),触发 Jenkins Webhook。
    • Jenkins 根据 Jenkinsfile 中的 agent 配置,向 Kubernetes API 发起请求,动态创建一个 Agent Pod。
  2. 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 节点。
  3. 代码拉取

    • 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 将宿主
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值