失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud

云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud

时间:2024-04-12 09:00:41

相关推荐

云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud

目录

一、简介二、代码三、monitor监控服务流水线(先推送一个服务把整个流程走完)3.1 创建流水线3.2 拉取代码3.3 项目编译3.4 构建镜像3.5 推送镜像仓库3.6 monitor部署k8s3.7 邮件通知四、monitor监控服务部署成功五、部署所有微服务构建镜像推送镜像部署k8s六、前端项目流水线代码修改deployDockerfile附录前端项目Jenkinsfilemonitor服务Jenkinsfile文件所有微服务Jenkinsfiel文件deploy.yml k8s部署文件

一、简介

在前面的学习中,我们已经通过手动的打包、制作镜像、推送镜像仓库、部署k8s的形式完成了对RuoYICloud项目的部署:/DreamsArchitects/article/details/121121109

但是这种方式过于复杂繁琐。现在我们来学习一下通过流水线来自动化部署RuoYICloud项目。

前提需要部署好MySQL、Nacos、Redis 服务。

Nacos 上云部署

完整流程:

拉取代码项目编译制作镜像推送镜像仓库k8s部署邮件通知

二、代码

三、monitor监控服务流水线(先推送一个服务把整个流程走完)

先推送一个服务把整个流程走完

3.1 创建流水线

3.2 拉取代码

3.3 项目编译

3.4 构建镜像

3.5 推送镜像仓库

需要创建镜像仓库凭证

3.6 monitor部署k8s

需要指定Kubeconfig

3.7 邮件通知

以QQ邮箱为例:

点击 如何设置:http://service./cgi-bin/help?subtype=1&&id=28&&no=369

为 KubeSphere 流水线设置电子邮件服务器:

编辑配置文件:

收到的邮件没有动态取值$BUILD_NUMBER

我们需要修改body:

将单引号修改为双引号:

四、monitor监控服务部署成功

查看容器运行日志:

五、部署所有微服务

需要在构建镜像、推送镜像、部署k8s时候添加并行阶段

构建镜像

推送镜像

部署k8s

六、前端项目流水线

流程与后端微服务部署是一样的:

拉取代码项目编译构建镜像推送镜像部署k8s邮件通知

注意 在前端项目执行流水线时我们需要指定nodejs容器,不是maven容器。

KubeSphere 的 内置四种容器模板

代码修改

deploy

ruoyi-ui目录下创建deploy目录,创建deploy.yml文件

apiVersion: apps/v1kind: Deploymentmetadata:labels:app: ruoyi-uiname: ruoyi-uinamespace: ruoyi #一定要写名称空间spec:progressDeadlineSeconds: 600replicas: 1selector:matchLabels:app: ruoyi-uistrategy:rollingUpdate:maxSurge: 50%maxUnavailable: 50%type: RollingUpdatetemplate:metadata:labels:app: ruoyi-uispec:imagePullSecrets:- name: aliyun-docker-hub #提前在项目下配置访问阿里云的账号密码containers:- image: $REGISTRY/$ALIYUNHUB_NAMESPACE/ruoyi-ui:SNAPSHOT-$BUILD_NUMBER# readinessProbe:# httpGet:# path: /actuator/health# port: 8080# timeoutSeconds: 10# failureThreshold: 30# periodSeconds: 5imagePullPolicy: Alwaysname: app# 前端的端口为80 不是8080ports:- containerPort: 80protocol: TCPresources:limits:cpu: 300mmemory: 600MiterminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysterminationGracePeriodSeconds: 30---apiVersion: v1kind: Servicemetadata:labels:app: ruoyi-uiname: ruoyi-uinamespace: ruoyispec:ports:- name: http# Service 暴露 80 端口port: 80protocol: TCPtargetPort: 80nodePort: 32248selector:app: ruoyi-uisessionAffinity: Nonetype: NodePort

Dockerfile

ruoyi-ui目录下创建Dockerfile文件。

Dockerfile文件的内容是基于nginx镜像 复制编译后的dist文件夹下的文件到容器内的/usr/share/nginx/html/目录,最后暴露80端口。

FROM nginx#将dist目录内容复制到nginx容器html内部COPY dist /usr/share/nginx/html/EXPOSE 80

附录

前端项目Jenkinsfile

pipeline {agent {node {label 'nodejs'}}stages {stage('拉取代码') {agent nonesteps {container('nodejs') {git(url: '/L1692312138/RuoYi-Cloud.git', credentialsId: 'gitee-lsh', branch: 'master', changelog: true, poll: false)sh 'ls -al ruoyi-ui/'}}}stage('项目编译') {agent nonesteps {container('nodejs') {sh 'npm i node-sass --sass_binary_site=/mirrors/node-sass/'sh 'npm install --registry=https://registry.'sh 'cd ruoyi-ui/'sh 'npm run build 'sh 'ls -al'}}}stage('构建镜像') {agent nonesteps {container('nodejs') {sh 'ls'sh 'docker build -t ruoyi-ui:latest -f ruoyi-ui/Dockerfile ./ruoyi-ui'}}}stage('推送镜像') {agent nonesteps {container('nodejs') {withCredentials([usernamePassword(credentialsId : 'aliyun-docker-registry' ,usernameVariable : 'DOCKER_USER_VAR' ,passwordVariable : 'DOCKER_PWD_VAR' ,)]) {sh 'echo "$DOCKER_PWD_VAR" | docker login $REGISTRY -u "$DOCKER_USER_VAR" --password-stdin'sh 'docker tag ruoyi-ui:latest $REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-ui:SNAPSHOT-$BUILD_NUMBER'sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-ui:SNAPSHOT-$BUILD_NUMBER'}}}}stage('部署到dev环境') {agent nonesteps {kubernetesDeploy(configs: 'ruoyi-ui/deploy/**', enableConfigSubstitution: true, kubeconfigId: 'demo-kubeconfig')}}stage('邮件确认') {agent nonesteps {mail(to: 'liushihao1210@', subject: 'RuoyiCloud流水线执行结果', body: 'RuoyiCloud UI DevOps流水线 第 "$BUILD_NUMBER" 次 执行成功! ', cc: '827875054@')}}}environment {DOCKER_CREDENTIAL_ID = 'dockerhub-id'GITHUB_CREDENTIAL_ID = 'github-id'KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'REGISTRY = '-'DOCKERHUB_NAMESPACE = 'lsh_k8s_repository'ALIYUNHUB_NAMESPACE = 'lsh_k8s_repository'GITHUB_ACCOUNT = 'kubesphere'APP_NAME = 'devops-java-sample'}}

monitor服务Jenkinsfile文件

pipeline {agent {node {label 'maven'}}stages {stage('拉取代码') {agent nonesteps {container('maven') {git(url: '/L1692312138/RuoYi-Cloud.git', credentialsId: 'gitee-lsh-monitor', branch: 'master', changelog: true, poll: false)sh 'ls -al'}}}stage('项目编译') {agent nonesteps {container('maven') {sh 'mvn clean package -Dmaven.test.skip=true'sh 'ls -al'}}}stage('构建monitor镜像') {agent nonesteps {container('maven') {sh 'ls -l ruoyi-visual/ruoyi-monitor/target/'sh 'docker build -t ruoyi-monitor:latest -f ruoyi-visual/ruoyi-monitor/Dockerfile ./ruoyi-visual/ruoyi-monitor/'}}}stage('推送monitor镜像') {agent nonesteps {container('maven') {withCredentials([usernamePassword(credentialsId : 'aliyun-repository' ,passwordVariable : 'DOCKER_PWD_VAR' ,usernameVariable : 'DOCKER_USER_VAR' ,)]) {sh 'echo "$DOCKER_PWD_VAR" | docker login $REGISTRY -u "$DOCKER_USER_VAR" --password-stdin'sh 'docker tag ruoyi-monitor:latest $REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-monitor:SNAPSHOT-$BUILD_NUMBER'sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-monitor:SNAPSHOT-$BUILD_NUMBER'}}}}stage('monitor部署k8s') {agent nonesteps {kubernetesDeploy(enableConfigSubstitution: true, deleteResource: false, kubeconfigId: 'demo-kubeconfig', configs: 'ruoyi-visual/ruoyi-monitor/deploy/**')}}stage('邮件确认') {agent nonesteps {mail(to: 'liushihao1210@', subject: 'RuoyiCloud流水线执行结果', body: "RuoyiCloud Monitor服务 DevOps流水线 第 $BUILD_NUMBER 次 执行成功!", cc: '827875054@')}}}environment {DOCKER_CREDENTIAL_ID = 'dockerhub-id'GITHUB_CREDENTIAL_ID = 'github-id'KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'REGISTRY = '-'DOCKERHUB_NAMESPACE = 'lsh_k8s_repository'ALIYUNHUB_NAMESPACE = 'lsh_k8s_repository'GITHUB_ACCOUNT = 'kubesphere'APP_NAME = 'devops-java-sample'}parameters {string(name: 'TAG_NAME', defaultValue: '', description: '')}}

所有微服务Jenkinsfiel文件

pipeline {agent {node {label 'maven'}}stages {stage('拉取代码') {agent nonesteps {container('maven') {git(url: '/L1692312138/RuoYi-Cloud.git', credentialsId: 'gitee-lsh-monitor', branch: 'master', changelog: true, poll: false)sh 'ls -al'}}}stage('项目编译') {agent nonesteps {container('maven') {sh 'mvn clean package -Dmaven.test.skip=true'sh 'ls -al'}}}stage('构建monitor镜像') {agent nonesteps {container('maven') {sh 'ls -l ruoyi-visual/ruoyi-monitor/target/'sh 'docker build -t ruoyi-monitor:latest -f ruoyi-visual/ruoyi-monitor/Dockerfile ./ruoyi-visual/ruoyi-monitor/'}}}stage('推送monitor镜像') {agent nonesteps {container('maven') {withCredentials([usernamePassword(credentialsId : 'aliyun-repository' ,passwordVariable : 'DOCKER_PWD_VAR' ,usernameVariable : 'DOCKER_USER_VAR' ,)]) {sh 'echo "$DOCKER_PWD_VAR" | docker login $REGISTRY -u "$DOCKER_USER_VAR" --password-stdin'sh 'docker tag ruoyi-monitor:latest $REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-monitor:SNAPSHOT-$BUILD_NUMBER'sh 'docker push $REGISTRY/$DOCKERHUB_NAMESPACE/ruoyi-monitor:SNAPSHOT-$BUILD_NUMBER'}}}}stage('monitor部署k8s') {agent nonesteps {kubernetesDeploy(enableConfigSubstitution: true, deleteResource: false, kubeconfigId: 'demo-kubeconfig', configs: 'ruoyi-visual/ruoyi-monitor/deploy/**')}}stage('邮件确认') {agent nonesteps {mail(to: 'liushihao1210@', subject: 'RuoyiCloud流水线执行结果', body: "RuoyiCloud Monitor服务 DevOps流水线 第 $BUILD_NUMBER 次 执行成功!", cc: '827875054@')}}}environment {DOCKER_CREDENTIAL_ID = 'dockerhub-id'GITHUB_CREDENTIAL_ID = 'github-id'KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'REGISTRY = '-'DOCKERHUB_NAMESPACE = 'lsh_k8s_repository'ALIYUNHUB_NAMESPACE = 'lsh_k8s_repository'GITHUB_ACCOUNT = 'kubesphere'APP_NAME = 'devops-java-sample'}parameters {string(name: 'TAG_NAME', defaultValue: '', description: '')}}

deploy.yml k8s部署文件

注意创建名称空间,及修改app、name及拉取的镜像名称。

还需要注意拉取镜像时候使用的镜像仓库的凭证imagePullSecrets

apiVersion: apps/v1kind: Deploymentmetadata:labels:app: ruoyi-monitorname: ruoyi-monitornamespace: ruoyi #一定要写名称空间spec:progressDeadlineSeconds: 600replicas: 1selector:matchLabels:app: ruoyi-monitorstrategy:rollingUpdate:maxSurge: 50%maxUnavailable: 50%type: RollingUpdatetemplate:metadata:labels:app: ruoyi-monitorspec:imagePullSecrets:- name: aliyun-docker-hub #提前在项目下配置访问阿里云的账号密码containers:- image: $REGISTRY/$ALIYUNHUB_NAMESPACE/ruoyi-monitor:SNAPSHOT-$BUILD_NUMBER# readinessProbe:# httpGet:# path: /actuator/health# port: 8080# timeoutSeconds: 10# failureThreshold: 30# periodSeconds: 5imagePullPolicy: Alwaysname: appports:- containerPort: 8080protocol: TCPresources:limits:cpu: 300mmemory: 600MiterminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysterminationGracePeriodSeconds: 30---apiVersion: v1kind: Servicemetadata:labels:app: ruoyi-monitorname: ruoyi-monitornamespace: ruoyispec:ports:- name: httpport: 8080protocol: TCPtargetPort: 8080#使用NodePort方式暴露端口 固定端口#nodePort: 30887selector:app: ruoyi-monitorsessionAffinity: Nonetype: ClusterIP# type: NodePort

如果觉得《云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。