Browse Source

"修改jenkinsfile到初始版"

hxd 2 tháng trước cách đây
mục cha
commit
e0fc147f66
1 tập tin đã thay đổi với 22 bổ sung93 xóa
  1. 22 93
      Jenkinsfile

+ 22 - 93
Jenkinsfile

@@ -4,16 +4,14 @@ pipeline {
     parameters {
         choice(name: 'env', choices: ['dev', 'test', 'prod'], description: '部署环境(dev/test/prod)')
         string(name: 'NAMESPACE', defaultValue: 'hfln-dev', description: 'Kubernetes 命名空间')
-
     }
 
     environment {
-        PROJECT_NAME       = 'device-service'
-        MODULE_NAME        = 'device-service-server'
-        MAVEN_HOME         = '/usr/local/apache-maven-3.9.9/bin'
-        HARBOR_HOST        = '8.130.28.21:81'
-        KUBECONFIG_PATH    = '/root/.kube/config'
-        SPRING_PROFILES_ACTIVE = "${params.env}"
+        PROJECT_NAME    = 'device-service'
+        MODULE_NAME     = 'device-service-server'
+        MAVEN_HOME      = '/usr/local/apache-maven-3.9.9/bin'
+        HARBOR_HOST     = '8.130.28.21:81'
+        KUBECONFIG_PATH = '/root/.kube/config'
     }
 
     stages {
@@ -28,7 +26,7 @@ pipeline {
                         env.HARBOR_PROJECT = 'dev'
                     }
 
-                    echo ">>> 使用环境:${params.env},HARBOR 项目:${env.HARBOR_PROJECT},K8S 命名空间:${params.NAMESPACE},Ingress 域名:${params.INGRESS_HOST ?: '无'}"
+                    echo ">>> 使用环境:${params.env},HARBOR 项目:${env.HARBOR_PROJECT},K8S 命名空间:${params.NAMESPACE}"
                 }
             }
         }
@@ -36,7 +34,7 @@ pipeline {
         stage('🧬 拉取 Git 代码') {
             steps {
                 script {
-                    echo ">>> 正在拉取 Git 代码..."
+                    echo ">>> 拉取代码..."
                     checkout scm
                     echo ">>> 代码拉取完成 ✅"
                 }
@@ -48,12 +46,12 @@ pipeline {
                 script {
                     echo ">>> 开始构建模块:${MODULE_NAME}"
                     sh "${MAVEN_HOME}/mvn clean package -DskipTests -pl ${MODULE_NAME} -am"
-                    echo ">>> 开始构建模块 ${MODULE_NAME}"
+                    echo ">>> 构建完成 ✅"
                 }
             }
         }
 
-        stage('🐳 构建推送 Docker 镜像') {
+        stage('🐳 构建 & 推送 Docker 镜像') {
             steps {
                 script {
                     def imageTag = "${HARBOR_HOST}/${env.HARBOR_PROJECT}/${PROJECT_NAME}:${BUILD_NUMBER}"
@@ -66,12 +64,10 @@ pipeline {
                         docker rmi ${imageTag}
                     """
                     echo ">>> Docker 镜像构建并推送完成 ✅"
-                    echo ">>> 镜像推送完成 ✅"
                 }
             }
         }
 
-
         stage('🚀 部署到 Kubernetes') {
             steps {
                 script {
@@ -81,82 +77,9 @@ pipeline {
 
                     sh """
                         export KUBECONFIG=${KUBECONFIG_PATH}
-
-                        # 创建命名空间(如果不存在)
-                        kubectl get ns ${params.NAMESPACE} || kubectl create ns ${params.NAMESPACE}
-
-                        # 部署 Deployment(2 副本)
-                        kubectl apply -n ${params.NAMESPACE} -f - <<EOF
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  name: ${PROJECT_NAME}
-spec:
-  replicas: 2
-  selector:
-    matchLabels:
-      app: ${PROJECT_NAME}
-  template:
-    metadata:
-      labels:
-        app: ${PROJECT_NAME}
-    spec:
-      containers:
-      - name: ${PROJECT_NAME}
-        image: ${imageTag}
-        ports:
-        - containerPort: 8092
-        env:
-        - name: SPRING_PROFILES_ACTIVE
-          value: "${params.env}"
-EOF
-
-                        # 部署 Service
-                        kubectl apply -n ${params.NAMESPACE} -f - <<EOF
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: ${PROJECT_NAME}
-spec:
-  selector:
-    app: ${PROJECT_NAME}
-  ports:
-  - protocol: TCP
-    port: 80
-    targetPort: 8092
-  type: ClusterIP
-EOF
-
-                        # 判断是否有域名,有则部署Ingress
-                        if [ -n "${params.INGRESS_HOST}" ]; then
-                            cat <<EOT | kubectl apply -n ${params.NAMESPACE} -f -
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: ${PROJECT_NAME}-ingress
-  annotations:
-    nginx.ingress.kubernetes.io/rewrite-target: /
-spec:
-  ingressClassName: nginx
-  rules:
-  - host: ${params.INGRESS_HOST}
-    http:
-      paths:
-      - path: /
-        pathType: Prefix
-        backend:
-          service:
-            name: ${PROJECT_NAME}
-            port:
-              number: 80
-EOT
-                        else
-                            echo ">>> 未配置 Ingress 域名,跳过 Ingress 部署"
-                        fi
+                        kubectl set image deployment/${PROJECT_NAME} ${PROJECT_NAME}=${imageTag} -n ${params.NAMESPACE}
                     """
                     echo ">>> 部署完成 ✅"
-
                 }
             }
         }
@@ -169,12 +92,19 @@ EOT
             script {
                 echo "🧹 开始清理旧镜像(只保留最新 3 个)"
                 sh """
-                    docker images --format "{{.Repository}}:{{.Tag}} {{.CreatedAt}}" | \
+                    docker images --format "{{.Repository}}:{{.Tag}}" | \
                     grep "${HARBOR_HOST}/${env.HARBOR_PROJECT}/${PROJECT_NAME}:" | \
-                    sort -rk2 | \
-                    tail -n +4 | \
-                    awk '{print \$1}' | \
-                    xargs -r docker rmi
+                    sed 's/.*://g' | sort -rn | tail -n +4 | while read oldTag; do
+                        image="${HARBOR_HOST}/${env.HARBOR_PROJECT}/${PROJECT_NAME}:\${oldTag}"
+                        echo ">>> 检查镜像是否正在使用:\$image"
+                        CONTAINER=\$(docker ps -a --filter ancestor=\$image --format "{{.ID}}")
+                        if [ -z "\$CONTAINER" ]; then
+                            echo "✅ 删除镜像:\$image"
+                            docker rmi \$image
+                        else
+                            echo "⚠️ 镜像 \$image 正在被容器使用,跳过删除。"
+                        fi
+                    done
                 """
                 echo "🧹 旧镜像清理完成 ✅"
             }
@@ -190,4 +120,3 @@ EOT
         }
     }
 }
-