文章目录
- 相关文章
- 部署过程
- 准备工作
- 创建 DevOps 项目
- 创建凭证
- 创建流水线
- 编辑流水线
- JAVA后端微服务
- 拉取源码
- 构建源码
- 构建镜像
- 推送镜像
- 部署项目
 
- VUE前端
- 拉取源码
- 构建源码
- 构建镜像
- 推送镜像
- 部署项目
 
 
- 运行流水线
- 查看流水线详情
- 完整流水线脚本
- 微服务后端
- VUE前端
 
- 参考
 
相关文章
- kubernetes集群基于kubeadm部署以及常见问题解决
- kubernetes集群配置默认存储类(nfs)
- Docker工作中常用知识总结
- Ubuntu本地安装MySQL8.0以及常见问题设置方法
- kubernetes集群安装Ingress-nginx
- Spring Cloud微服务迁移到Kubernetes容器化
- 持续补充中…
KubeSphere (https://Kubesphere.io) 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。
部署过程

准备工作
创建 DevOps 项目
DevOps 系统为用户提供了一个自动化的环境,应用可以自动发布到同一个平台。它还兼容第三方私有镜像仓库(如 Harbor)和代码库(如 GitLab/GitHub/SVN/BitBucket)。它为用户提供了全面的、可视化的 CI/CD 流水线,打造了极佳的用户体验,而且这种兼容性强的流水线能力在离线环境中非常有用。
创建凭证
- 在 DevOps 项目设置下的凭证页面创建以下凭证
  

创建流水线

编辑流水线
- 编辑流水线,可以参考提供的模板,也可以选择自定义流水线。
  
流水线的五个阶段:
拉取源码 -> 构建源码 -> 构建镜像->推送镜像 -> 部署项目

JAVA后端微服务
拉取源码
-  在图形编辑面板上,从类型下拉列表中选择 node,从 Label 下拉列表中选择 maven。 
  
-  请点击左侧的加号图标来添加阶段。点击添加步骤上方的文本框,然后在右侧的名称字段中为该阶段设置名称。 
  
-  点击添加步骤。在列表中选择 git,以从 GitLab 拉取项目代码。在弹出的对话框中,填写必需的字段。点击确定完成操作。 
  

构建源码

mvn clean package -Dmaven.test.skip=true -Pdev

构建镜像
- 点击前一个阶段右侧的加号图标添加一个新的阶段,以构建镜像。
docker build -t wms-gateway:v1 -f wms-gateway/Dockerfile ./wms-gateway/


- 选择添加 添加并行阶段, 重复以上步骤添加其他微服务。
推送镜像
- 点击前一个阶段右侧的加号图标添加一个新的阶段,以推送镜像至Harbor。点击任务下的添加步骤,选择添加凭证。
  
- 将其填写完成,然后点击确定。 
  - 凭证名称:选择您创建的 harbor 凭证。
- 密码变量:输入 HARBOR_PWD_VAR。
- 用户名变量:输入 HARBOR_USER_VAR。
 
出于安全原因,帐户信息在脚本中显示为变量。

- 点击添加嵌套步骤添加一个嵌套步骤。
  
- 在列表中选择 shell 并在弹出窗口中输入以下命令,点击确定完成操作。
echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin
- 下面两条命令参考上面命令依次添加输入。
# 镜像打tag
docker tag  wms-gateway:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-gateway:SNAPSHOT-$BUILD_NUMBER
# 推送镜像
docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-gateway:SNAPSHOT-$BUILD_NUMBER

- 选择添加 添加并行阶段, 重复以上步骤添加其他微服务。
部署项目
- 添加凭证
  
- 添加嵌套步骤,执行shell脚本
envsubst < devops/deploy/gateway.yaml | kubectl apply -f -

VUE前端
拉取源码

构建源码

构建镜像

推送镜像

部署项目

运行流水线

查看流水线详情
-  如果所有配置都成功运行,可以看到所有阶段都已完成。 
  
-  在右上角点击查看日志,查看所有日志。点击每个阶段查看其详细日志。您可以根据日志排除故障和问题,也可以将日志下载到本地进行进一步分析。 
完整流水线脚本
- 可以在这儿把下面的模板填充进去,然后在这个基础上进行修改。

微服务后端
pipeline {
  agent {
    node {
      label 'maven'
    }
  }
  stages {
    stage('clone code') {
      agent none
      steps {
        container('maven') {
          git(url: 'http://192.168.0.126/saas-wms/linkinsense-wms-public.git', credentialsId: 'gitlab', changelog: true, poll: false, branch: "$env_name")
        }
        sh 'ls -al'
      }
    }
    stage('编译 构建代码') {
      agent none
      steps {
        container('maven') {
          sh 'ls'
          sh 'mvn clean package -Dmaven.test.skip=true -Pdev'
        }
      }
    }
    stage('default-2') {
      parallel {
        stage('构建gateway镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls'
              sh 'docker build -t wms-gateway:v1 -f wms-gateway/Dockerfile ./wms-gateway/'
            }
          }
        }
        stage('构建auth镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls'
              sh 'docker build -t wms-auth:v1 -f wms-auth/Dockerfile ./wms-auth/'
            }
          }
        }
        stage('构建admin镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls'
              sh 'docker build -t wms-admin:v1 -f wms-admin/Dockerfile ./wms-admin/'
            }
          }
        }
        stage('构建warehouse镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls'
              sh 'docker build -t wms-warehouse:v1 -f wms-warehouse/Dockerfile ./wms-warehouse/'
            }
          }
        }
        stage('构建orders镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls'
              sh 'docker build -t wms-orders:v1 -f wms-orders/Dockerfile ./wms-orders/'
            }
          }
        }
        stage('构建outbound镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls'
              sh 'docker build -t wms-outbound:v1 -f wms-outbound/Dockerfile ./wms-outbound/'
            }
          }
        }
        stage('构建log镜像') {
          agent none
          steps {
            container('maven') {
              sh 'ls'
              sh 'docker build -t wms-log:v1 -f wms-log/Dockerfile ./wms-log/'
            }
          }
        }
      }
    }
    stage('default-3') {
      parallel {
        stage('推送gateway镜像') {
          agent none
          steps {
            container('maven') {
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
                sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
                sh 'docker tag  wms-gateway:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-gateway:SNAPSHOT-$BUILD_NUMBER '
                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-gateway:SNAPSHOT-$BUILD_NUMBER '
              }
            }
          }
        }
        stage('推送auth镜像') {
          agent none
          steps {
            container('maven') {
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
                sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
                sh 'docker tag  wms-auth:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-auth:SNAPSHOT-$BUILD_NUMBER '
                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-auth:SNAPSHOT-$BUILD_NUMBER '
              }
            }
          }
        }
        stage('推送admin镜像') {
          agent none
          steps {
            container('maven') {
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
                sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
                sh 'docker tag  wms-admin:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-admin:SNAPSHOT-$BUILD_NUMBER '
                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-admin:SNAPSHOT-$BUILD_NUMBER '
              }
            }
          }
        }
        stage('推送warehouse镜像') {
          agent none
          steps {
            container('maven') {
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
                sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
                sh 'docker tag  wms-warehouse:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-warehouse:SNAPSHOT-$BUILD_NUMBER '
                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-warehouse:SNAPSHOT-$BUILD_NUMBER '
              }
            }
          }
        }
        stage('推送orders镜像') {
          agent none
          steps {
            container('maven') {
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
                sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
                sh 'docker tag  wms-orders:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-orders:SNAPSHOT-$BUILD_NUMBER '
                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-orders:SNAPSHOT-$BUILD_NUMBER '
              }
            }
          }
        }
        stage('推送outbound镜像') {
          agent none
          steps {
            container('maven') {
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
                sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
                sh 'docker tag  wms-outbound:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-outbound:SNAPSHOT-$BUILD_NUMBER '
                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-outbound:SNAPSHOT-$BUILD_NUMBER '
              }
            }
          }
        }
        stage('推送log镜像') {
          agent none
          steps {
            container('maven') {
              withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
                sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
                sh 'docker tag  wms-log:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-log:SNAPSHOT-$BUILD_NUMBER '
                sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-log:SNAPSHOT-$BUILD_NUMBER '
              }
            }
          }
        }
      }
    }
    stage('default-4') {
      parallel {
        stage('部署gateway到dev环境') {
          agent none
          steps {
            container('maven') {
              withCredentials([
                                                kubeconfigFile(credentialsId : env.KUBECONFIG_CREDENTIAL_ID ,variable : 'KUBECONFIG' ,)]) {
                  sh 'envsubst < devops/deploy/gateway.yaml | kubectl apply -f -'
                }
              }
            }
          }
          stage('部署auth到dev环境') {
            agent none
            steps {
              container('maven') {
                withCredentials([
                                                      kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
                    sh 'envsubst < devops/deploy/auth.yaml | kubectl apply -f -'
                  }
                }
              }
            }
            stage('部署admin到dev环境') {
              agent none
              steps {
                container('maven') {
                  withCredentials([
                                                                                                                                                                                              kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
                      sh 'envsubst < devops/deploy/admin.yaml | kubectl apply -f -'
                    }
                  }
                }
              }
              stage('部署warehouse到dev环境') {
                agent none
                steps {
                  container('maven') {
                    withCredentials([
                                                                                                                                                                                                                kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
                        sh 'envsubst < devops/deploy/warehouse.yaml | kubectl apply -f -'
                      }
                    }
                  }
                }
                stage('部署orders到dev环境') {
                  agent none
                  steps {
                    container('maven') {
                      withCredentials([
                                                                                                                                                                                                                                  kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
                          sh 'envsubst < devops/deploy/orders.yaml | kubectl apply -f -'
                        }
                      }
                    }
                  }
                  stage('部署outbound到dev环境') {
                    agent none
                    steps {
                      container('maven') {
                        withCredentials([
                                                                                                                                                                                                                                                    kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
                            sh 'envsubst < devops/deploy/outbound.yaml | kubectl apply -f -'
                          }
                        }
                      }
                    }
                    stage('部署log到dev环境') {
                      agent none
                      steps {
                        container('maven') {
                          withCredentials([
                                                                                                                                                                                                                          kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {
                              sh 'envsubst < devops/deploy/log.yaml | kubectl apply -f -'
                            }
                          }
                        }
                      }
                    }
                  }
                }
                environment {
                  DOCKER_CREDENTIAL_ID = 'dockerhub-id'
                  GITHUB_CREDENTIAL_ID = 'github-id'
                  KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
                  REGISTRY = '192.168.0.127:8084'
                  DOCKERHUB_NAMESPACE = 'onlee'
                  GITHUB_ACCOUNT = 'kubesphere'
                  APP_NAME = 'devops-java-sample'
                }
                parameters {
                  choice(description: '你需要选择哪条环境进行构建?', name: 'env_name', choices: ["test", "dev", "k8s"])
                }
              }
VUE前端
pipeline {
  agent {
    node {
      label 'nodejs'
    }
  }
  stages {
    stage('拉取代码') {
      agent none
      steps {
        git(url: 'http://192.168.0.126/saas-wms/linkinsense-wms-admin.git', credentialsId: 'gitlab', branch: 'main', changelog: true, poll: false)
      }
    }
    stage('构建代码') {
      agent none
      steps {
        container('nodejs') {
          sh 'npm cache clean -f'
          sh 'npm config set registry http://registry.npmmirror.com'
          sh 'npm install -g n --registry=http://registry.npmmirror.com'
          sh 'n v17.9.0'
          sh 'node -v'
          sh 'npm i'
          sh 'npm run build:dev'
        }
      }
    }
    stage('构建镜像') {
      agent none
      steps {
        container('nodejs') {
          sh 'ls'
          sh 'docker build -t wms-web:v1 -f  Dockerfile .'
        }
      }
    }
    stage('推送镜像') {
      agent none
      steps {
        container('nodejs') {
          withCredentials([usernamePassword(credentialsId : 'harbor' ,passwordVariable : 'HARBOR_PWD_VAR' ,usernameVariable : 'HARBOR_USER_VAR' ,)]) {
            sh 'echo "$HARBOR_PWD_VAR" | docker login $REGISTRY -u "$HARBOR_USER_VAR" --password-stdin'
            sh 'docker tag  wms-web:v1 $REGISTRY/$DOCKERHUB_NAMESPACE/wms-web:v1 '
            sh 'docker push  $REGISTRY/$DOCKERHUB_NAMESPACE/wms-web:v1 '
          }
        }
      }
    }
    stage('部署项目') {
      agent none
      steps {
        container('nodejs') {
          withCredentials([
                                                                                        kubeconfigFile(credentialsId : env.KUBECONFIG_CREDENTIAL_ID ,variable : 'KUBECONFIG' ,)]) {
              sh 'envsubst < deploy-dev.yaml | kubectl apply -f -'
            }
          }
        }
      }
    }
    environment {
      DOCKER_CREDENTIAL_ID = 'dockerhub-id'
      GITHUB_CREDENTIAL_ID = 'github-id'
      KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
      REGISTRY = '192.168.0.127:8084'
      DOCKERHUB_NAMESPACE = 'onlee'
      GITHUB_ACCOUNT = 'kubesphere'
      APP_NAME = 'devops-java-sample'
    }
  }
参考
- KubeSphere 文档
你知道的越多,你不知道的越多。




















