使用kubesphere的devops部署SpringCloud项目

devops部署SpringCloud项目

环境说明

部署流程

创建DevOps工程


填写流水线信息


创建流水线


1 我们编写JenkinsFile

流水线的部署流程如下图
拉取代码 编译代码 打包镜像 推送镜像 部署应用

jenkinsfile

因为所有服务都写出来实在太长也不方便观看,故以gateway,admin 两个模块为例,增加其他模块也是亦是相同,复制粘贴即可

sh 复制代码
pipeline {
    agent {
        node {
            label 'jdk11'
        }

    }
    stages {
        stage('拉取代码') {
            agent none
            steps {
                container('maven') {
                    git(url: '你的代码地址', credentialsId: 'git-code-auth', branch: '代码分支', changelog: true, poll: false)
                    sh 'ls'
                }

            }
        }

        stage('编译代码') {
            agent none
            steps {
                container('maven') {
                    sh '''ls
pwd
java -version'''
                    sh 'mvn clean install -Dmaven.test.skip=true'
                }

            }
        }

        stage('default-2') {
            parallel {
                stage('构建镜像gateway') {
                    agent none
                    steps {
                        container('maven') {
                            sh 'ls $GATEWAY/target'
                            sh 'docker build -t $GATEWAY:latest -f $GATEWAY/Dockerfile ./$GATEWAY/'
                        }

                    }
                }

                stage('构建镜像tingyuan-cloud-api-admin') {
                    agent none
                    steps {
                        container('maven') {
                            sh 'ls $BASE_PATH/$ADMIN/target'
                            sh 'docker build -t $ADMIN:latest -f $BASE_PATH/$ADMIN/Dockerfile ./$BASE_PATH/$ADMIN/'
                        }

                    }
                }

            }
        }

        stage('default-3') {
            parallel {
                stage('推送镜像gateway') {
                    agent none
                    steps {
                        container('maven') {
                            withCredentials([usernamePassword(credentialsId: 'aliyun-docker', passwordVariable: 'DOCKER_PASSWORD_VAR', usernameVariable: 'DOCKER_USER_VAR',)]) {
                                sh 'echo "$DOCKER_PASSWORD_VAR" | docker login $REGISTRY -u "$DOCKER_USER_VAR" --password-stdin'
                                sh 'docker tag $GATEWAY:latest $REGISTRY/$DOCKERHUB_NAMESPACE/$GATEWAY:SNAPSHOT-$BUILD_NUMBER'
                                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$GATEWAY:SNAPSHOT-$BUILD_NUMBER'
                            }

                        }

                    }
                }

                stage('推送镜像admin') {
                    agent none
                    steps {
                        container('maven') {
                            withCredentials([usernamePassword(credentialsId: 'aliyun-docker', passwordVariable: 'DOCKER_PASSWORD_VAR', usernameVariable: 'DOCKER_USER_VAR',)]) {
                                sh 'echo "$DOCKER_PASSWORD_VAR" | docker login $REGISTRY -u "$DOCKER_USER_VAR" --password-stdin'
                                sh 'docker tag $ADMIN:latest $REGISTRY/$DOCKERHUB_NAMESPACE/$ADMIN:SNAPSHOT-$BUILD_NUMBER'
                                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/$ADMIN:SNAPSHOT-$BUILD_NUMBER'
                            }

                        }

                    }
                }

            }
        }

        stage('default-4') {
            parallel {
                stage('deploy gateway to pro') {
                    agent none
                    steps {
                        kubernetesDeploy(configs: '文件所在路径/deploy/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
                    }
                }

                stage('deploy admin to pro') {
                    agent none
                    steps {
                        kubernetesDeploy(configs: '文件所在路径/deploy/**', enableConfigSubstitution: true, kubeconfigId: "$KUBECONFIG_CREDENTIAL_ID")
                    }
                }
              

            }
        }

    }
    environment {
        DOCKER_CREDENTIAL_ID = 'dockerhub-id'
        GITHUB_CREDENTIAL_ID = 'github-id'
        KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
        REGISTRY = '镜像仓库地址'
        DOCKERHUB_NAMESPACE = '镜像创库nameSpace'
        GITHUB_ACCOUNT = 'kubesphere'
        BASE_PATH = 'api'
        GATEWAY = 'gateway'
        APP = 'app'
        ADMIN = 'admin'
        GUILD = 'guild'
        LANDPAGE = 'landpage'
        SCHEDULE = 'schedule'
        WS = 'ws'
        DB = 'db'
        SERVICE = 'service'
        FILE = 'file'
    }
    parameters {
        string(name: 'TAG_NAME', defaultValue: '', description: '')
    }
}

Dockerfile

打包镜像文件

sh 复制代码
FROM openjdk:11
LABEL maintainer=hrd
ENV PARAMS="--server.port=8080 --spring.profiles.active=k8sProd"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
COPY target/*.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]

deploy.yaml

应用部署文件

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: 容器名
  name: 容器名
  namespace: 名称空间   #一定要写名称空间
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  selector:
    matchLabels:
      app: 容器名
  strategy:
    rollingUpdate:
      maxSurge: 50%
      maxUnavailable: 50%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: 容器名
    spec:
      imagePullSecrets:
        - name: aliyun-docker  #提前在项目下配置访问阿里云的账号密码 
      containers:
        - image: 推送到镜像仓库的地址
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
            timeoutSeconds: 10
            failureThreshold: 30
            periodSeconds: 5
          imagePullPolicy: Always
          name: app
          ports:
            - name: http-8080
              containerPort: 8080
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: 容器名
  name: 容器名
  namespace: 名称空间
spec:
  ports:
    - name: http
      port: 8080
      protocol: TCP
      targetPort: 8080
  selector:
    app: 容器名
  sessionAffinity: None
  type: ClusterIP

如何设置

imagePullSecrets:

  • name: aliyun-docker #提前在项目下配置访问阿里云的账号密码

相关推荐
龙智DevSecOps解决方案15 小时前
JFrog供应链流量控制器架构解析:如何通过 SASE 集成阻断 AI 智能体的恶意依赖拉取?
ai编程·devops·jfrog·软件供应链安全
あ-17 小时前
proxmox控制台占用内存高虚拟机占用内存低排查
devops
龙智DevSecOps解决方案21 小时前
Perforce P4 2026 更新详解:P4 MCP 服务器、REST API、Spark Stream 与 P4 Signals
人工智能·devops·版本控制·p4·perforce
苏渡苇21 小时前
Spring Insight 里如何把 Span 收成一条链路
spring boot·spring·spring cloud·系统监控·apm
宋均浩1 天前
告警规则 243 砍到 27:Prometheus 降噪实战,日均打扰 47 次 → 3 次
云原生·监控·devops
叶总没有会1 天前
微服务--分布式基础
java·spring·spring cloud·微服务
智能运维指南1 天前
代码管理软件如何融入 DevOps 工具链?全链路联通的 5 个关键点
运维·devops·信创适配·嘉为蓝鲸
weixin_435247061 天前
DevOps成熟度评估与改进方案模版
devops
孙启超2 天前
【AI开发之Rust】第 7 课:错误处理 —— panic、Result 与 `?`
人工智能·分布式·后端·爬虫·spring cloud·架构·rust
极小狐2 天前
CI 算力饥渴症:Runner 弹性伸缩的架构权衡与落地
ci/cd·kubernetes·devops·弹性伸缩