CI/CD部署环境隔离方案

ShallowMage +0/-0 0 0 正常 2025-12-24T07:01:19 Kubernetes · CI/CD

在CI/CD流水线中实现环境隔离是保障发布质量的关键实践。本文分享一个基于Kubernetes的多环境隔离方案。

环境架构

我们采用命名空间(Namespace)方式隔离开发、测试、预发布和生产环境,每个环境对应独立的K8s命名空间。

核心配置

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
  namespace: {{ENV_NAMESPACE}}  # 动态替换
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: app-container
        image: myapp:{{IMAGE_TAG}}
        ports:
        - containerPort: 8080
        envFrom:
        - configMapRef:
            name: app-config-{{ENV_NAME}}

Jenkins Pipeline配置

pipeline {
    agent any
    environment {
        NAMESPACE = "dev"
        IMAGE_TAG = "v1.0.${BUILD_NUMBER}"
    }
    stages {
        stage('Deploy') {
            steps {
                script {
                    if (env.BRANCH_NAME == 'main') {
                        NAMESPACE = 'prod'
                    } else if (env.BRANCH_NAME == 'release') {
                        NAMESPACE = 'staging'
                    }
                    sh "kubectl set image deployment/app-deployment app-container=myapp:${IMAGE_TAG} -n ${NAMESPACE}"
                }
            }
        }
    }
}

隔离策略

  1. 网络隔离:通过NetworkPolicy控制命名空间间通信
  2. 资源隔离:为不同环境设置ResourceQuota和LimitRange
  3. 配置隔离:使用不同的ConfigMap和Secret

监控指标

  • 部署成功率:99.5%
  • 平均部署时间:3分钟
  • 环境间切换延迟:< 10秒

该方案已在公司多个项目中应用,可有效避免环境污染问题。

推广
广告位招租

讨论

0/2000