当前位置: 首页 > news >正文

Jenkins与Kubernetes深度整合实践

采用的非jenkins-slave方式

jenkins配置:

Jenkins添加k8s master节点的服务器信息

在Jenkins容器内部与k8s master节点设置免费登录

# docker过滤查询出运行的Jenkins服务
$ docker ps | grep jenkins# 进入Jenkins容器内部
$ docker exec -it jenkins-server /bin/bash# 在 /root/.ssh 目录下生成了 id_rsa和id_rsa.pub,三次回车
$ ssh-keygen -t rsa# 进入生成秘钥的目录
$cd /root/.ssh/# 查看秘钥文件
$ ls###免密
ssh-copy-id -i /root/.ssh/id_rsa.pub ssh root@192.168.95.101

在Springboot工程准备k8s yml部署文件和修改Jenkinsfile

######Jenkinsfilepipeline {// 指定任务再哪个集群节点中执行agent any// 声明全局变量,方便后面使用environment {// harbor用户名harborUserName = 'DevOps'// harbor密码harborPassword = 'Dev12345'// harbor地址harborAddress = '192.168.95.131:9020'// harbor项目名harborRepo = 'repos'}stages {stage ('拉取git仓库代码') {steps {checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url: 'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])}}stage ('通过maven构建项目') {steps {sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'}}stage ('通过Sonarqube做质量检测') {steps {sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'}}stage ('通过Docker制作自定义镜像') {steps {sh '''cp -rf target/*.jar docker/docker build -t ${JOB_NAME}:$tag docker/'''}}stage ('将自定义镜像推送到Harbor') {steps {sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''}}stage ('将yml文件传到k8s-master上') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.95.101-k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'jenkins-publish-demo.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}post {// 构建成功通知success {dingtalk (robot: 'Dingding-robot',type: 'MARKDOWN',title: "success: ${JOB_NAME}",text: ["- 构建成功: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +"- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"])}// 构建失败通知failure {dingtalk (robot: 'Dingding-robot',type: 'MARKDOWN',title: "fail: ${JOB_NAME}",text: ["- 构建失败: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +"- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"])}}
}
#####k8s.ymlapiVersion: apps/v1
kind: Deployment
metadata:name: springboot-demonamespace: default
spec:selector:matchLabels:app: springboot-demotemplate:metadata:labels:app: springboot-demospec:containers:- image: IMAGE_NAMEimagePullPolicy: IfNotPresentname: springboot-demoports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: springboot-demonamespace: default
spec:selector:app: springboot-demotype: NodePortports:- protocol: TCPport: 8080targetPort: 8080name: myapp-http

Jenkinsfile增加远程执行k8s master服务器执行流水线脚本步骤

// 所有的脚本命令都放在pipeline中
pipeline {// 指定任务再哪个集群节点中执行agent any// 声明全局变量,方便后面使用environment {// harbor用户名harborUserName = 'DevOps'// harbor密码harborPassword = 'Dev12345'// harbor地址harborAddress = '192.168.95.131:9020'// harbor项目名harborRepo = 'repos'}stages {stage ('拉取git仓库代码') {steps {checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'b62b7b20-3b03-46e7-8f8b-09ab5efe0f12', url: 'http://192.168.95.130:8929/root/jenkins-publish-demo.git']]])}}stage ('通过maven构建项目') {steps {sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'}}stage ('通过Sonarqube做质量检测') {steps {sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.source=./ -Dsonar.java.binaries=./target/ -Dsonar.login=c8483abbf03c0fd4212ffce2c1e93c5ae8cd65bd'}}stage ('通过Docker制作自定义镜像') {steps {sh '''cp -rf target/*.jar docker/docker build -t ${JOB_NAME}:$tag docker/'''}}stage ('将自定义镜像推送到Harbor') {steps {sh '''docker login -u ${harborUserName} -p ${harborPassword} ${harborAddress}docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''}}stage ('将yml文件传到k8s-master上') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.95.101-k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'jenkins-publish-demo.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}stage ('远程执行k8s-master的kubectl命令') {steps {sh 'ssh root@192.168.95.101 kubectl apply -f /usr/local/deploy/k8s/jenkins-publish-demo.yml'}}}post {// 构建成功通知success {dingtalk (robot: 'Dingding-robot',type: 'MARKDOWN',title: "success: ${JOB_NAME}",text: ["- 构建成功: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +"- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"])}// 构建失败通知failure {dingtalk (robot: 'Dingding-robot',type: 'MARKDOWN',title: "fail: ${JOB_NAME}",text: ["- 构建失败: ${JOB_NAME}项目!\n- 版本: ${tag}\n" +"- 持续时间: ${currentBuild.durationString}\n- 任务:#${JOB_NAME}"])}}
}

http://www.lqws.cn/news/531811.html

相关文章:

  • 从零开始理解百度语音识别API的Python实现
  • Trae IDE 大师评测:驾驭 MCP Server - Figma AI Bridge 一键成就前端瑰宝
  • HDC 2025丨华为云AI原生中间件,构建应用运行的领先架构
  • DAY 43 复习日
  • docker 安装Elasticsearch + kibana + ik分词器
  • (七)Dockerfile文件20个命令大全详解
  • 【数据结构】--排序算法
  • Java--程序控制结构(下)
  • RK3568-休眠唤醒关机开机流程
  • 【NLP】自然语言项目设计02
  • MySQL (一):数据类型,完整性约束和表间关系
  • 12345政务热线系统:接诉即办,赋能智慧城市治理
  • 指标中台+大模型:解密衡石Agentic BI的NL2DSL架构实现
  • Prompt工程解析:从指令模型到推理模型的提示词设计
  • Linux 和 Windows 服务器:哪一个更适合您的业务需求?
  • 黑马JVM解析笔记(四):Javap图解指令流程,深入理解Java字节码执行机制
  • 创建Django项目
  • JVM调优实战 Day 7:JVM线程分析与死锁排查
  • 动态库与静态库【Linux】
  • 前端替换打包后文件中的内容方案(可用于渗透测试后将问题版本号清空临时解决方案)
  • 事务相关问题
  • 数学:逆元,同余
  • 热点代码探测确定何时JIT
  • Codeforces Educational Round 180 题解
  • 【25软考网工】第十章 网络规划与设计(2)网络规划与分析、网络结构与功能
  • [按键手机安卓/IOS脚本插件开发] 按键插件调试与判断循环结构辅助工具
  • Jenkins执行Jenkinsfile报错
  • 可用的.gitignore文件
  • LDO的自放电功能
  • UE Universal Camera 相机插件-限制镜头在区域内移动