温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Jenkins与Kubernetes协同工作

发布时间:2025-11-20 06:41:57 来源:亿速云 阅读:132 作者:小樊 栏目:系统运维

Jenkins 与 Kubernetes 协同工作实战指南

一 架构与优势

  • Jenkins Master 负责调度与流水线编排,Jenkins AgentPod 形式在 Kubernetes 中按需动态创建与销毁,实现弹性伸缩与资源隔离,显著降低常驻构建节点的成本。
  • 借助 Kubernetes 插件,Jenkins 可在集群内运行构建任务,结合 Docker/Kaniko 完成镜像构建,适配 Java/Node.js/Python/Go 等多语言项目。
  • 典型收益:环境一致性提升、资源利用率提高、发布流程标准化与自动化。

二 快速落地步骤

  • 部署 Jenkins(任选其一)
    • 使用 Helm(推荐):
      • 添加仓库并安装:
        • helm repo add jenkins https://charts.jenkins.io
        • helm repo update
        • helm install myjenkins jenkins/jenkins
      • 获取管理员密码:
        • kubectl get secret myjenkins -o jsonpath=“{.data.jenkins-admin-password}” | base64 --decode
      • 访问控制台:http://:8080
    • 使用 YAML/Manifest
      • 示例核心字段:
        • Deployment + Service(NodePort 或 LoadBalancer),持久化 JENKINS_HOME(PVC)。
        • 示例访问:http://:
  • 安装核心插件
    • Kubernetes Plugin、Pipeline Plugin、Docker Pipeline、Git/GitLab/Bitbucket 插件、Blue Ocean
  • 配置 Kubernetes Cloud
    • 路径:Manage Jenkins → Configure System → Cloud → Add a new cloud → Kubernetes
    • 关键项:
      • Kubernetes URL:https://kubernetes.default.svc(或完整域名 https://kubernetes.default.svc.cluster.local)
      • Namespace:如 jenkins
      • Jenkins URL:如 http://myjenkins:8080(集群内 DNS
      • Credentials:选择 ServiceAccount(推荐)或 Kubeconfig
  • 创建第一个流水线
    • 新建 Pipeline,使用 Declarative Pipelineagent { kubernetes { … } },在容器内执行构建与测试。

三 示例流水线

  • 目标:拉取代码 → 构建 → 单元测试 → 构建并推送镜像 → 部署到 Kubernetes(可按需接入 Helm 或多环境策略)。
pipeline {
  agent {
    kubernetes {
      label 'jenkins-agent'
      yaml '''
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: maven
    image: maven:3.8.1-jdk-8
    command: ['cat']
    tty: true
  - name: docker
    image: docker:24-dind
    securityContext:
      privileged: true
    volumeMounts:
    - name: docker-sock
      mountPath: /var/run/docker.sock
  volumes:
  - name: docker-sock
    hostPath:
      path: /var/run/docker.sock
'''
    }
  }
  environment {
    IMAGE_REPO = 'your-registry/your-namespace/app'
    IMAGE_TAG  = "${env.BUILD_NUMBER}-${env.GIT_COMMIT.take(7)}"
    K8S_NS     = 'dev'
  }
  stages {
    stage('Build') {
      steps {
        container('maven') {
          sh 'mvn -B -DskipTests clean package'
        }
      }
    }
    stage('Unit Test') {
      steps {
        container('maven') {
          sh 'mvn test'
        }
      }
      post {
        always {
          junit '**/target/surefire-reports/*.xml'
        }
      }
    }
    stage('Build & Push Image') {
      steps {
        withCredentials([usernamePassword(credentialsId: 'dockerhub-creds', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
          container('docker') {
            sh '''
              docker login -u "$DOCKER_USER" -p "$DOCKER_PASS"
              docker build -t $IMAGE_REPO:$IMAGE_TAG .
              docker push $IMAGE_REPO:$IMAGE_TAG
            '''
          }
        }
      }
    }
    stage('Deploy to K8s') {
      steps {
        container('docker') {
          // 方式A:kubectl 直接替换镜像(示例)
          sh '''
            kubectl set image deployment/app app=$IMAGE_REPO:$IMAGE_TAG -n $K8S_NS
            kubectl rollout status deployment/app -n $K8S_NS
          '''
          // 方式B:Helm(取消注释并按需调整)
          // sh 'helm upgrade --install app ./charts/app -n $K8S_NS --set image.repository=$IMAGE_REPO --set image.tag=$IMAGE_TAG --wait'
        }
      }
    }
  }
  post {
    success {
      echo "Deployed $IMAGE_REPO:$IMAGE_TAG to $K8S_NS"
    }
    failure {
      echo "Pipeline failed. Check logs for details."
    }
  }
}
  • 说明
    • 镜像标签建议使用 Git Commit 短哈希 + 构建号,保证唯一与可追溯。
    • 多环境(dev/test/prod)可通过 Namespace 隔离,配合 手动审批GitOps 策略推进。
    • 生产发布建议接入 金丝雀发布/蓝绿发布自动回滚 机制。

四 多环境与发布策略

  • 多环境隔离:以 Namespace 划分 dev/test/staging/prod,配合 ResourceQuotaNetworkPolicy 控制资源与网络访问。
  • 发布策略:
    • 滚动更新:默认 Deployment 策略,平滑替换实例。
    • 蓝绿发布:两套环境切换流量,回滚迅速。
    • 金丝雀发布:按权重逐步引流,结合 监控/指标自动回滚 降低风险。
  • 版本与回滚:
    • 使用 Helm 管理 Chart 版本 与应用版本,支持 helm rollback;
    • 使用 kubectl rollout undo 回滚 Deployment;
    • 在 Jenkins 中沉淀版本记录与回滚任务,形成一键回滚能力。

五 安全与最佳实践

  • 认证与权限
    • 优先使用 ServiceAccount 绑定 RBAC,遵循最小权限原则;
    • 外部 Jenkins 通过 Kubeconfig 安全注入;
    • 凭据统一用 Credentials Plugin 管理,避免在代码中硬编码。
  • 构建与镜像
    • 生产构建建议使用 Kaniko 或远程 BuildKit 守护进程,避免在集群内运行特权容器;
    • 镜像仓库使用 私有仓库(Harbor/Docker Hub) 并启用镜像签名与漏洞扫描。
  • 流水线治理
    • 使用 Declarative Pipeline + Jenkinsfile 入仓
    • 接入 代码扫描(SonarQube)单元测试安全扫描(Trivy/Clair)质量门禁
    • 关键阶段加入 人工审批通知(邮件/企业微信/Slack)
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI