基于Kubernetes的jenkins上线

1、基于helm 部署jenkins

要求:当前集群配置了storageClass,并已指定默认的storageClass,一般情况下,创建的storageClass即为默认类 指定默认storageClass的方式

# 如果是新创建默认类:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: managed-nfs-storageannotations:# 这里注解说明了这个是默认的storageclassstorageclass.kubernetes.io/is-default-class: "true"
provisioner: fuseim.pri/ifs 
parameters:archiveOnDelete: "true"# 如果是修改为默认类
kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'# 检查,可以看到类后面增加了(default)
[root@kube-master ~]# kubectl get sc
NAME                            PROVISIONER                    RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage (default)   gxf-nfs-storage                Retain          Immediate              false                  41d

1.1 部署helm

[root@kube-master ~]# wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
[root@kube-master ~]# tar zxvf helm-v3.2.4-linux-amd64.tar.gz 
[root@kube-master ~]# mv linux-amd64/helm /usr/bin/

1.2 部署jenkins

# 1、添加jenkins仓库
[root@kube-master ~]# helm repo add jenkinsci https://charts.jenkins.io && helm repo update# 2、安装jenkins
## 2.1 如果需要自定义配置,需要先将chart下载下来,如果无需修改配置,直接install即可
[root@kube-master ~]# helm pull jenkinsci/jenkins
[root@kube-master ~]# tar xf jenkins-4.8.4.tgz # 修改目录中的values.yml
[root@kube-master ~]# helm install jenkins . -f values.yaml
## 2.2 直接安装
[root@kube-master ~]# helm install jenkins jenkinsci/jenkins

1.3 检查 jenkins

# helm list
NAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
jenkins default         1               2023-12-17 14:19:50.59739362 +0800 CST  deployed        jenkins-4.8.4   2.426.1 [root@kube-master ~]# kubectl get pod
NAME                                      READY   STATUS    RESTARTS       AGE
jenkins-0                                 2/2     Running   0              2m30s
nfs-client-provisioner-66bc5457d6-vbzfj   1/1     Running   16 (20m ago)   38d# 需要查看登录密码,可以使用
[root@kube-master ~]# helm get notes jenkins
NOTES:
1. Get your 'admin' user password by running:kubectl exec --namespace default -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo
2. Get the Jenkins URL to visit by running these commands in the same shell:echo http://127.0.0.1:8080kubectl --namespace default port-forward svc/jenkins 8080:80803. Login with the password from step 1 and the username: admin
4. Configure security realm and authorization strategy
5. Use Jenkins Configuration as Code by specifying configScripts in your values.yaml file, see documentation: http://127.0.0.1:8080/configuration-as-code and examples: https://github.com/jenkinsci/configuration-as-code-plugin/tree/master/demosFor more information on running Jenkins on Kubernetes, visit:
https://cloud.google.com/solutions/jenkins-on-container-engineFor more information about Jenkins Configuration as Code, visit:
https://jenkins.io/projects/jcasc/NOTE: Consider using a custom image with pre-installed plugins

1.4 配置访问

# 这是当前jenkins的服务,将他改为nodeport,或通过ingress代理
[root@kube-master ~]# kubectl get svc jenkins
NAME      TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
jenkins   ClusterIP   10.99.36.63   <none>        8080/TCP   32h[root@kube-master ~]# vim ingress.yml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:labels:name: myingressname: myingressnamespace: default
spec:ingressClassName: nginxrules:- host: qf.jenkins.viphttp:paths:- backend:service:name: jenkinsport:number: 8080path: /pathType: Prefix

2、安装插件

插件列表: 将准备好的插件包,替换掉对应的pv数据卷中的plugins目录

3、准备工作

3.1 准备ruoyi数据

[root@kube-master ~]# git clone https://gitea.beyourself.org.cn/newrain001/RuoYi-Vue-cloud.git
[root@kube-master ~]# cd RuoYi-Vue-cloud/
[root@kube-master RuoYi-Vue-cloud]# ls
bin  cloud  doc  LICENSE  pom.xml  README.md  ruoyi-admin  ruoyi-common  ruoyi-framework  ruoyi-generator  ruoyi-quartz  ruoyi-system  ruoyi-ui  ry.bat  ry.sh  sql
[root@kube-master RuoYi-Vue-cloud]# cd sql/
[root@kube-master sql]# ls
quartz.sql  ry_20230223.sql
[root@kube-master sql]# kubectl create configmap ruoyi-init-data --from-file=.

3.2 准备k8s证书

[root@kube-master ~]# kubectl create secret generic kubeconfig --from-file=/root/.kube/config

3.3 准备maven配置文件

[root@kube-master ~]# vim settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd"><pluginGroups></pluginGroups><proxies></proxies><servers></servers><mirrors><mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name><url>https://maven.aliyun.com/repository/public</url></mirror></mirrors><profiles></profiles>
</settings>
[root@kube-master ~]# kubectl create configmap maven-repo --from-file=settings.xml

3.4 配置钉钉插件

在系统管理的下方有未归类的插件

4、项目配置

4.1 创建pipeline项目

 

4.2 配置参数

# 参数内容:
字符参数:
PROJECT_NAME 项目名称
凭据参数:
DOCKER_REPOSITORY_CREDENTIAL_ID 需要推送的docker镜像仓库凭据id,可指定多个,然后加介绍
选项参数:
HARBOR_HOST 需要推送的镜像仓库,可以指定多个,需要与凭据对应
选项参数:
NAMESPACE_NAME 需要推送的命名空间
字符参数:后端镜像的tag
JAVA_TAG
字符参数:前端镜像的tag
NODE_TAG
字符参数:
JAVA_REPLICAS 后端副本数
字符参数:
NODE_REPLICAS 前端副本数
字符参数:
JENKINS_URL 当前jenkins的url,通知时使用,一般不变,可以设置默认值 

 

5、构建项目

6、cloud 目录内的文件解析

6.1 cloud/Jenkinsfile

 

pipeline {// 定义流水线中使用的环境变量environment {PROJECT_NAME = "${PROJECT_NAME}"  // 项目名称DOCKER_REPOSITORY_CREDENTIAL_ID = "${DOCKER_REPOSITORY_CREDENTIAL_ID}"  // Docker仓库的凭证IDHARBOR_HOST = "${HARBOR_HOST}"  // Docker Harbor主机NAMESPACE_NAME = "${NAMESPACE_NAME}"  // Kubernetes命名空间JAVA_REPOSITORY_NAME = "ruoyi-java"  // Java应用的仓库名称NODE_REPOSITORY_NAME = "ruoyi-node"  // Node.js应用的仓库名称JAVA_TAG = "${JAVA_TAG}"  // Java应用的Docker标签NODE_TAG = "${NODE_TAG}"  // Node.js应用的Docker标签JAVA_REPLICAS = "${JAVA_REPLICAS}"  // Java应用的副本数NODE_REPLICAS = "${NODE_REPLICAS}"  // Node.js应用的副本数YAML_PATH = "cloud/deploy/"  // Kubernetes YAML文件的路径JAVA_DEPLOYMENT_NAME = "ruoyi-java.yaml"  // Java部署的YAML文件名称NODE_DEPLOYMENT_NAME = "ruoyi-nginx.yaml"  // Node.js部署的YAML文件名称STATUS_URL = "${JENKINS_URL}/job/ruoyi/${BUILD_NUMBER}"  // 查看构建状态的URLCONSOLE_URL = "${JENKINS_URL}/job/ruoyi/${BUILD_NUMBER}/console"  // 查看构建控制台输出的URL}// 使用Kubernetes定义代理配置agent {kubernetes {cloud "kubernetes"yaml """// 定义Kubernetes Pod的规格apiVersion: v1kind: Podspec:// 定义Pod中的容器containers:- name: jnlpimage: jenkins/inbound-agent:3107.v665000b_51092-15args: ['\$(JENKINS_SECRET)', '\$(JENKINS_NAME)']imagePullPolicy: IfNotPresentvolumeMounts:- mountPath: "/etc/localtime"name: "volume-2"readOnly: false- name: mavenimage: maven:3.6.3-jdk-11command: ['cat']tty: truevolumeMount:- mountPath: "/usr/share/maven/ref/"name: "maven-repo"subPath: "settings.xml"readOnly: true- mountPath: "/root/.m2"name: "maven-data"- name: nodejsimage: node:14command: ['cat']tty: true- name: kubectlimage: kubesphere/kubectl:v1.22.0imagePullPolicy: IfNotPresenttty: truecommand: ["cat"]volumeMounts:- mountPath: "/etc/localtime"name: "volume-2"readOnly: false- mountPath: "/var/run/docker.sock"name: "volume-docker"readOnly: false- mountPath: "/root/.kube/config"subPath: configname: "kubeconfig"readOnly: false- name: dockerimage: docker:19.03.15-gitcommand: ['cat']tty: truevolumeMounts:- mountPath: "/var/run/docker.sock"name: "volume-docker"readOnly: false// 定义Pod使用的卷volumes:- name: volume-2hostPath:path: "/usr/share/zoneinfo/Asia/Shanghai"- name: volume-dockerhostPath:path: "/var/run/docker.sock"- name: kubeconfigsecret:secretName: kubeconfigitems:- key: configpath: config- name: maven-repoconfigMap:name: maven-repo- name: maven-datahostPath: path: "/opt/data/m2""""}}// 定义流水线的各个阶段stages {// 第一阶段:Maven打包stage('Maven 打包') {steps {// 使用Maven容器来构建Java应用container('maven') {sh """mvn clean package -Dmaven.test.skip=true && cp ruoyi-admin/target/ruoyi-admin.jar cloud/ruoyi-java"""}}post {// Maven打包成功或失败后的通知success {// Maven打包成功时的钉钉消息配置dingtalk (// 其他配置...)}failure {// Maven打包失败时的钉钉消息配置dingtalk (// 其他配置...)}}}// 第二阶段:Node.js打包stage('Node.js 打包') {steps {container('nodejs') {sh """cd ruoyi-ui && npm install --registry http://registry.npmmirror.com && npm run build:prod && cp -r dist ../cloud/ruoyi-nginx"""}}post {success {// Node.js打包成功的钉钉消息配置dingtalk (// 其他配置...)}failure {// Node.js打包失败的钉钉消息配置dingtalk (// 其他配置...)}}}// 第三阶段:构建镜像stage('构建镜像') {steps {withCredentials([usernamePassword(credentialsId: env.DOCKER_REPOSITORY_CREDENTIAL_ID, passwordVariable: 'PASSWORD', usernameVariable: 'USERNAME')]) {container('docker') {sh """docker build -t ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.JAVA_REPOSITORY_NAME}:${env.JAVA_TAG} cloud/ruoyi-javadocker build -t ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.NODE_REPOSITORY_NAME}:${env.NODE_TAG} cloud/ruoyi-nginxdocker login ${env.HARBOR_HOST} --username ${env.USERNAME} --password ${env.PASSWORD}docker push ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.JAVA_REPOSITORY_NAME}:${env.JAVA_TAG}docker push ${env.HARBOR_HOST}/${env.NAMESPACE_NAME}/${env.NODE_REPOSITORY_NAME}:${env.NODE_TAG}"""}}}post {success {// 构建镜像成功的钉钉消息配置dingtalk (// 其他配置...)}failure {// 构建镜像失败的钉钉消息配置dingtalk (// 其他配置...)}}}// 第四阶段:部署到kubernetesstage('部署到kubernetes') {steps {container('kubectl') {sh """sed -i "s/REPLICAS/${env.JAVA_REPLICAS}/;s/HARBOR_HOST/${env.HARBOR_HOST}/;s/NAMESPACE_NAME/${env.NAMESPACE_NAME}/;s/REPOSITORY_NAME/${env.JAVA_REPOSITORY_NAME}/;s/TAG/${env.JAVA_TAG}/" ${env.YAML_PATH}${env.JAVA_DEPLOYMENT_NAME}sed -i "s/REPLICAS/${env.NODE_REPLICAS}/;s/HARBOR_HOST/${env.HARBOR_HOST}/;s/NAMESPACE_NAME/${env.NAMESPACE_NAME}/;s/REPOSITORY_NAME/${env.NODE_REPOSITORY_NAME}/;s/TAG/${env.NODE_TAG}/" ${env.YAML_PATH}${env.NODE_DEPLOYMENT_NAME}kubectl apply -f ${env.YAML_PATH} --record"""}}post {success {// 部署成功的钉钉消息配置dingtalk (// 其他配置...)}failure {// 部署失败的钉钉消息配置dingtalk (// 其他配置...)}}}}
}

6.2 cloud/deploy/ruoyi-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-nginx
spec:replicas: REPLICASselector:matchLabels:app: ruoyi-nginxtemplate:metadata:labels:app: ruoyi-nginxspec:containers:- name: ruoyi-nginximage: HARBOR_HOST/NAMESPACE_NAME/REPOSITORY_NAME:TAGimagePullPolicy: Alwaysports:- containerPort: 80---
apiVersion: v1
kind: Service
metadata:name: ruoyi-nginx-service
spec:selector:app: ruoyi-nginxports:- port: 80targetPort: 80---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ruoyi-nginx-ingresslabels:name: ruoyi-nginx-ingress
spec:ingressClassName: nginxrules:- host: ruoyi.nginx.comhttp:paths:- pathType: Prefixpath: "/"backend:service:name: ruoyi-nginx-serviceport: number: 80

6.3 cloud/deploy/ruoyi-java.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-java
spec:replicas: REPLICASselector:matchLabels:app: ruoyi-javatemplate:metadata:labels:app: ruoyi-javaspec:containers:- name: ruoyi-javaimage: HARBOR_HOST/NAMESPACE_NAME/REPOSITORY_NAME:TAGimagePullPolicy: Alwaysports:- containerPort: 8080---
apiVersion: v1
kind: Service
metadata:name: ruoyi-java-service
spec:selector:app: ruoyi-javaports:- port: 8080targetPort: 8080

6.4 cloud/deploy/mysql.yml

apiVersion: apps/v1
kind: Deployment
metadata:name: database
spec:selector:matchLabels:app: databasetemplate:metadata:labels:app: databasespec:containers:- name: databaseimage: daocloud.io/library/mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalue: "123456"- name: MYSQL_DATABASEvalue: "ry"volumeMounts:- mountPath: /docker-entrypoint-initdb.dname: ruoyi-dataresources:limits:memory: "500Mi"cpu: "500m"ports:- containerPort: 3306volumes:- name: ruoyi-dataconfigMap:name: ruoyi-init-data---
apiVersion: v1
kind: Service
metadata:name: ruoyi-db
spec:selector:app: databaseports:- port: 3306targetPort: 3306

6.5 cloud/deploy/redis.yml

apiVersion: apps/v1
kind: Deployment
metadata:name: redis
spec:selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redisresources:limits:memory: "128Mi"cpu: "500m"ports:- containerPort: 6379---
apiVersion: v1
kind: Service
metadata:name: ruoyi-redis
spec:selector:app: redisports:- port: 6379targetPort: 6379

6.6 cloud/ruoyi-java/Dockerfile

FROM buildo/java8-wkhtmltopdf:latestCOPY ruoyi-admin.jar /optEXPOSE 8080CMD ["java", "-jar", "/opt/ruoyi-admin.jar"]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/296110.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法——桶排序

把数据放进若干个桶&#xff0c;然后在桶里用其他排序&#xff0c;近乎分治思想。从数值的低位到高位依次排序&#xff0c;有几位就排序几次。例如二位数就排两次&#xff0c;三位数就排三次&#xff0c;依次按照个十百...的顺序来排序。 第一次排序&#xff1a;50 12 …

Confluent 与阿里云将携手拓展亚太市场,提供消息流平台服务

10 月 31 日&#xff0c;杭州云栖大会上&#xff0c;阿里云云原生应用平台负责人丁宇宣布&#xff0c;Confluent 成为阿里云技术合作伙伴&#xff0c;合作全新升级&#xff0c;一起拓展和服务亚太市场。 本次合作伙伴签约&#xff0c;阿里云与消息流开创领导者 Confluent 将进一…

爬虫工作量由小到大的思维转变---<第二十二章 Scrapy开始很快,越来越慢(诊断篇)>

前言: 相信很多朋友在scrapy跑起来看到速度200/min开心的不得了;可是,越跑到后面,发现速度变成了10-/min;刚开始以为是ip代理的问题,结果根本不得法门... 新手跑3000 ~ 5000左右数据,我相信大多数人没有问题,也不会发现问题; 可一旦数据量上了10W,你是不是就能明显感觉到速度…

MATLAB - 四元数(quaternion)

系列文章目录 前言 一、简介 四元数是一种四元超复数&#xff0c;用于三维旋转和定向。 四元数的表示形式为 abicjdk&#xff0c;其中 a、b、c 和 d 为实数&#xff0c;i、j 和 k 为基元&#xff0c;满足等式&#xff1a;i2 j2 k2 ijk -1。 四元数集用 H 表示&#xff0c…

BigQuery Clustered Table 简介 - 聚簇表

Clustered Table的定义 聚簇可以提高某些类型的查询&#xff08;例如&#xff0c;使用过滤条件子句的查询和聚合数据的查询&#xff09;的性能。当通过查询作业或加载作业将数据写入聚簇表时&#xff0c;BigQuery 会使用聚簇列中的值对这些数据进行排序。这些值用于将数据整理…

使用 KVM 管理程序优化虚拟化

KVM&#xff08;基于内核的虚拟机&#xff09;是一项强大的开源虚拟化技术&#xff0c;内置于Linux 内核。它支持在单个物理主机上运行多个虚拟机 (VM)&#xff0c;这对于资源效率、服务器整合以及为不同目的创建隔离环境特别有帮助。 本文将深入介绍 KVM 管理程序&#xff0…

1863_电荷泵的基本原理

Grey 全部学习内容汇总&#xff1a; GitHub - GreyZhang/g_hardware_basic: You should learn some hardware design knowledge in case hardware engineer would ask you to prove your software is right when their hardware design is wrong! 1863_电荷泵的基本原理 一直…

【经典LeetCode算法题目专栏分类】【第11期】递归问题:字母大小写全排列、括号生成

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…

C++反向迭代器

反向迭代器在实现上其实是复用了正向迭代器的代码&#xff0c;即利用正向迭代器进行适配&#xff0c;能适配的原因&#xff1a;有很多功能都是重合的&#xff0c;如 *&#xff0c;->&#xff0c;&#xff0c;--等&#xff0c;正反迭代器唯一的区别就是方向相反。 如图 那么…

小程序本地文件读、写、追加数据操作,以及修改文件内容

小程序系统文件管理器 FileSystemManager 要操作/读取本地文件&#xff0c;首先需要创建文件或文件夹&#xff0c;然后再对文件进行读写操作&#xff1b; 首先创建文件 FileSystemManager.writeFile 可直接创建文件并写入内容 定义文件路径&#xff0c;此路径在读写操作时保…

ubuntu 22.04 安装mysql服务

完整内容&#xff1a; https://developer.aliyun.com/article/1260321 # 安装服务 sudo apt install mysql-server# 按向导设置root密码 sudo mysql_secure_installation# 使用设置的密码登录 sudo mysql -u root -p也可以使用工具登录&#xff0c;例如: navicat for mysql

word2003 open word2007+

Win 7 C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates 还是不行&#xff0c;重装office2003吧&#xff0c;再安装转换插件&#xff0c;但是再高版本好像没转换工具