当前位置: 首页 > news >正文

Kubernetes持续集成与持续交付最佳实践:构建自动化部署流水线

Kubernetes持续集成与持续交付最佳实践:构建自动化部署流水线

一、CI/CD概述

**CI/CD(持续集成/持续交付)**是一种自动化软件交付的方法论,在Kubernetes环境中集成CI/CD可以实现应用的自动化构建、测试和部署。

1.1 CI/CD流程

代码提交 → CI构建 → 测试 → 镜像推送 → CD部署 → 验证 ↓ ↓ ↓ ↓ ↓ GitLab Jenkins SonarQube Harbor Kubernetes

1.2 CI/CD工具链

环节工具说明
源码管理Git、GitHub、GitLab代码版本控制
持续集成Jenkins、GitLab CI、GitHub Actions自动化构建测试
代码质量SonarQube代码质量检测
镜像管理Harbor、Docker Hub容器镜像仓库
持续部署Argo CD、Flux CDGitOps部署

二、GitHub Actions配置

2.1 基础CI/CD流水线

name: CI/CD Pipeline on: push: branches: [ main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push uses: docker/build-push-action@v4 with: context: . push: true tags: ${{ secrets.DOCKER_USERNAME }}/my-app:${{ github.sha }} test: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run tests run: npm test deploy: needs: test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Kubectl uses: azure/setup-kubectl@v3 - name: Deploy to Kubernetes run: | echo "${{ secrets.KUBE_CONFIG }}" | base64 -d > kubeconfig kubectl --kubeconfig=kubeconfig set image deployment/my-app app=${{ secrets.DOCKER_USERNAME }}/my-app:${{ github.sha }}

2.2 多环境部署

name: Multi-Environment Deploy on: push: branches: [ main ] jobs: build: runs-on: ubuntu-latest outputs: image-tag: ${{ steps.build.outputs.tag }} steps: - uses: actions/checkout@v3 - name: Build image id: build run: | TAG=$(git rev-parse --short HEAD) echo "tag=$TAG" >> $GITHUB_OUTPUT docker build -t my-app:$TAG . deploy-dev: needs: build environment: development runs-on: ubuntu-latest steps: - name: Deploy to dev run: kubectl set image deployment/my-app app=my-app:${{ needs.build.outputs.image-tag }} -n dev deploy-staging: needs: deploy-dev environment: staging runs-on: ubuntu-latest steps: - name: Deploy to staging run: kubectl set image deployment/my-app app=my-app:${{ needs.build.outputs.image-tag }} -n staging deploy-prod: needs: deploy-staging environment: production runs-on: ubuntu-latest steps: - name: Deploy to prod run: kubectl set image deployment/my-app app=my-app:${{ needs.build.outputs.image-tag }} -n prod

三、GitLab CI配置

3.1 基础CI配置

image: docker:latest services: - docker:dind stages: - build - test - deploy build: stage: build script: - docker build -t my-app:$CI_COMMIT_SHA . - docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD - docker push my-app:$CI_COMMIT_SHA test: stage: test script: - docker run my-app:$CI_COMMIT_SHA npm test deploy: stage: deploy script: - kubectl set image deployment/my-app app=my-app:$CI_COMMIT_SHA only: - main

3.2 环境变量配置

variables: DOCKER_HOST: tcp://docker:2376 DOCKER_TLS_CERTDIR: "/certs" KUBECONFIG: /etc/kubernetes/config stages: - build - test - deploy build: stage: build image: docker:latest services: - docker:dind script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA test: stage: test image: node:latest script: - npm install - npm test deploy: stage: deploy image: bitnami/kubectl:latest script: - kubectl apply -f deployment.yaml - kubectl set image deployment/my-app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

四、Jenkins配置

4.1 Jenkins Pipeline

pipeline { agent any stages { stage('Checkout') { steps { git branch: 'main', url: 'https://github.com/example/app.git' } } stage('Build') { steps { sh 'docker build -t my-app:${BUILD_NUMBER} .' } } stage('Test') { steps { sh 'docker run my-app:${BUILD_NUMBER} npm test' } } stage('Push') { steps { sh 'docker push my-app:${BUILD_NUMBER}' } } stage('Deploy') { steps { sh 'kubectl set image deployment/my-app app=my-app:${BUILD_NUMBER}' } } } post { success { echo 'Deployment successful!' } failure { echo 'Deployment failed!' } } }

4.2 Kubernetes Jenkins Agent

apiVersion: v1 kind: Pod metadata: name: jenkins-agent spec: containers: - name: docker image: docker:latest command: - cat tty: true volumeMounts: - name: docker-sock mountPath: /var/run/docker.sock - name: kubectl image: bitnami/kubectl:latest command: - cat tty: true volumes: - name: docker-sock hostPath: path: /var/run/docker.sock

五、Argo CD配置

5.1 Argo CD应用配置

apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: my-app namespace: argocd spec: project: default source: repoURL: https://github.com/example/gitops-repo targetRevision: HEAD path: apps/my-app destination: server: https://kubernetes.default.svc namespace: default syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true

5.2 Argo CD项目配置

apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: my-project namespace: argocd spec: description: My project sourceRepos: - https://github.com/example/* destinations: - namespace: default server: https://kubernetes.default.svc clusterResourceWhitelist: - group: '*' kind: '*'

六、Flux CD配置

6.1 Flux CD安装

flux bootstrap github \ --owner=my-github-username \ --repository=fleet-infra \ --branch=main \ --path=./clusters/my-cluster \ --personal

6.2 Flux CD Kustomization

apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 kind: Kustomization metadata: name: my-app namespace: flux-system spec: interval: 10m0s path: ./apps/my-app prune: true sourceRef: kind: GitRepository name: flux-system healthChecks: - apiVersion: apps/v1 kind: Deployment name: my-app namespace: default

七、代码质量检测

7.1 SonarQube集成

name: SonarQube Analysis on: push: branches: [ main ] jobs: sonarqube: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: SonarQube Scan uses: SonarSource/sonarqube-scan-action@master env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}

7.2 代码覆盖率

name: Code Coverage on: push: branches: [ main ] jobs: coverage: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install dependencies run: npm install - name: Run tests with coverage run: npm test -- --coverage - name: Upload coverage to Codecov uses: codecov/codecov-action@v3 with: files: ./coverage/lcov.info

八、部署验证

8.1 健康检查集成

apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: template: spec: containers: - name: app image: my-app:latest livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /ready port: 8080 initialDelaySeconds: 5 periodSeconds: 5

8.2 部署验证脚本

#!/bin/bash kubectl rollout status deployment/my-app kubectl get pods -l app=my-app curl -f http://my-app:8080/health || exit 1

九、总结

CI/CD最佳实践可以实现:

  1. 自动化构建:代码提交自动触发构建流程
  2. 自动化测试:集成代码质量和安全检测
  3. 自动化部署:GitOps实现持续交付
  4. 部署验证:自动验证部署结果

建议根据团队需求选择合适的CI/CD工具链,并结合GitOps实现可追溯、可回滚的部署流程。


参考资料

  • GitHub Actions文档
  • GitLab CI文档
  • Argo CD文档
  • Flux CD文档
http://www.jsqmd.com/news/893345/

相关文章:

  • 【Lovable预约系统开发实战指南】:20年专家亲授高并发、零宕机、用户留存提升300%的5大核心架构设计
  • Linux内核配置的‘活字典‘:手把手教你用/proc/config.gz查看与备份内核参数
  • Sub-THz全嵌入式介质天线设计:高增益宽带宽的集成方案
  • Kubernetes自动化运维与监控告警:构建智能化运维体系
  • 动态目标跨镜无缝接力追踪技术在危化品生产厂区安防场景中的应用白皮书
  • 基于进化信息与XGBoost的淀粉样蛋白预测:特征工程与模型构建全解析
  • 从零构建MATLAB GUI手写板:集成CNN模型实现实时数字识别
  • 四川防草除砂取水头技术解析与场景适配指南:全自动净水器推荐/净水设备厂家推联系方式/医院污水处理设备/四川污水处理设备/选择指南 - 优质品牌商家
  • 基于双曲深度学习与增强SPICE模型的SiC MOSFET阈值电压智能监测
  • 3分钟搞定中文文献管理:Zotero茉莉花插件终极指南
  • 20 + 维度全景透视:数据驱动下的品牌 GEO 健康度实战报告
  • Go语言认证与授权机制详解
  • 从m4s到MP4:数字内容保存者的技术救赎之路
  • 广州海珠区搬家公司 绿植搬家防枯萎完整指南 - 从来都是英雄出少年
  • Kubernetes存储方案与持久化配置:构建可靠的数据存储体系
  • 终极指南:XXMI启动器 - 一站式多游戏模组管理平台免费使用教程
  • SRIS-Net:基于空间-频域融合与双任务引导的鲁棒图像隐写术
  • Lovable平台灰度发布事故复盘:一次配置错误引发的30万用户课程中断,我们用11分钟热修复的底层机制
  • 2026年 镜面铝厂家/品牌推荐榜:德国安铝、意大利镜面铝及阳极氧化镜面铝优质供应商深度解析 - 品牌企业推荐师(官方)
  • 如何免费解锁WeMod专业版功能:完整三步终极指南
  • Kubernetes服务网格与网络策略配置:构建安全可控的微服务网络
  • 全国陪诊顾问报名费用详解,2980元包含哪些内容?无隐形收费! - 深鉴新闻
  • 避坑指南:R语言raster读取栅格时,na.rm参数没设置对,结果全变NA了怎么办?
  • 动态目标跨镜无缝接力追踪技术——工业园区访客与车辆管控场景中的空间智能应用白皮书
  • 工业级大模型学习之路027:LangGraph 高级特性与单 Agent 优化
  • 2026年 特快专线推荐榜单:东莞到湛江/南昌/江西/阳江/茂名专线,高效速达与极速时效口碑之选 - 品牌企业推荐师(官方)
  • 2026年陕西彩钢瓦厂家/彩钢瓦/不锈钢彩钢瓦/YX25-210-840型等规格推荐榜单:专业实力与品质口碑深度解析 - 品牌企业推荐师(官方)
  • AI Agent Harness Engineering 在汽车制造中的质量检测应用
  • 2026涡街流量计国产十大品牌深度测评:依斯特稳居榜首,谁在撬动工业过程控制新格局? - 水质仪表品牌排行榜
  • 为什么android原生的不直接在开机的时候,直接启动usb调试模式呢,还需要用户去点击呢?