基于KubeSphere图形编辑面板构建微服务项目的DevOps 系统
创始人
2024-03-17 04:29:27

文章目录

  • 相关文章
  • 部署过程
    • 准备工作
    • 创建 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 nonesteps {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 nonesteps {container('maven') {sh 'ls'sh 'mvn clean package -Dmaven.test.skip=true -Pdev'}}}stage('default-2') {parallel {stage('构建gateway镜像') {agent nonesteps {container('maven') {sh 'ls'sh 'docker build -t wms-gateway:v1 -f wms-gateway/Dockerfile ./wms-gateway/'}}}stage('构建auth镜像') {agent nonesteps {container('maven') {sh 'ls'sh 'docker build -t wms-auth:v1 -f wms-auth/Dockerfile ./wms-auth/'}}}stage('构建admin镜像') {agent nonesteps {container('maven') {sh 'ls'sh 'docker build -t wms-admin:v1 -f wms-admin/Dockerfile ./wms-admin/'}}}stage('构建warehouse镜像') {agent nonesteps {container('maven') {sh 'ls'sh 'docker build -t wms-warehouse:v1 -f wms-warehouse/Dockerfile ./wms-warehouse/'}}}stage('构建orders镜像') {agent nonesteps {container('maven') {sh 'ls'sh 'docker build -t wms-orders:v1 -f wms-orders/Dockerfile ./wms-orders/'}}}stage('构建outbound镜像') {agent nonesteps {container('maven') {sh 'ls'sh 'docker build -t wms-outbound:v1 -f wms-outbound/Dockerfile ./wms-outbound/'}}}stage('构建log镜像') {agent nonesteps {container('maven') {sh 'ls'sh 'docker build -t wms-log:v1 -f wms-log/Dockerfile ./wms-log/'}}}}}stage('default-3') {parallel {stage('推送gateway镜像') {agent nonesteps {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 nonesteps {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 nonesteps {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 nonesteps {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 nonesteps {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 nonesteps {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 nonesteps {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 nonesteps {container('maven') {withCredentials([kubeconfigFile(credentialsId : env.KUBECONFIG_CREDENTIAL_ID ,variable : 'KUBECONFIG' ,)]) {sh 'envsubst < devops/deploy/gateway.yaml | kubectl apply -f -'}}}}stage('部署auth到dev环境') {agent nonesteps {container('maven') {withCredentials([kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {sh 'envsubst < devops/deploy/auth.yaml | kubectl apply -f -'}}}}stage('部署admin到dev环境') {agent nonesteps {container('maven') {withCredentials([kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {sh 'envsubst < devops/deploy/admin.yaml | kubectl apply -f -'}}}}stage('部署warehouse到dev环境') {agent nonesteps {container('maven') {withCredentials([kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {sh 'envsubst < devops/deploy/warehouse.yaml | kubectl apply -f -'}}}}stage('部署orders到dev环境') {agent nonesteps {container('maven') {withCredentials([kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {sh 'envsubst < devops/deploy/orders.yaml | kubectl apply -f -'}}}}stage('部署outbound到dev环境') {agent nonesteps {container('maven') {withCredentials([kubeconfigFile(credentialsId: env.KUBECONFIG_CREDENTIAL_ID, variable: 'KUBECONFIG')]) {sh 'envsubst < devops/deploy/outbound.yaml | kubectl apply -f -'}}}}stage('部署log到dev环境') {agent nonesteps {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 nonesteps {git(url: 'http://192.168.0.126/saas-wms/linkinsense-wms-admin.git', credentialsId: 'gitlab', branch: 'main', changelog: true, poll: false)}}stage('构建代码') {agent nonesteps {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 nonesteps {container('nodejs') {sh 'ls'sh 'docker build -t wms-web:v1 -f  Dockerfile .'}}}stage('推送镜像') {agent nonesteps {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 nonesteps {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 文档

你知道的越多,你不知道的越多。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...