Jenkins打包springboot项目到k8s

目录

一、Jenkins配置

1.1、pipeline插件安装

二、拉取git代码

javascript 复制代码
pipeline {
    agent any
	stages {
		stage('Checkout') {
			steps {
				echo "1.克隆git仓库代码"
				git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
				script {
					build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
				  }
				echo "${build_tag}"
			}
		}
	}
}

三、Maven打包spring项目

javascript 复制代码
pipeline {
    agent any
	stages {
		stage('Checkout') {
			steps {
				echo "1.克隆git仓库代码"
				git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
				script {
					build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
				  }
				echo "${build_tag}"
			}
		}
		stage('Maven Build') {
            steps {
				echo "2.Maven 打包项目"
                sh "mvn --version"
				sh 'pwd'
				sh 'mvn clean package -DskipTests'
				echo '构建完成'
            }
        }
	}
}

三、docker构建镜像

javascript 复制代码
pipeline {
    agent any
	stages {
		stage('Checkout') {
			steps {
				echo "1.克隆git仓库代码"
				git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
				script {
					build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
				  }
				echo "${build_tag}"
			}
		}
		stage('Maven Build') {
            steps {
				echo "2.Maven 打包项目"
                sh "mvn --version"
				sh 'pwd'
				sh 'mvn clean package -DskipTests'
				echo '构建完成'
            }
        }
		stage('Docker Build') {
            steps {
				echo "3.Docker 构造镜像"
				sh "docker -v"
				sh 'pwd'
				sh """cd /var/jenkins_home/workspace/test/weaveserviceservice/src/main/docker/ 
				ls
				docker -H tcp://127.0.0.1:80 build -t springbootapp:${build_tag} ."""
            }
        }
	}
}

遇到的问题:

在使用docker build命名的时候,报如下错误

javascript 复制代码
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

解决方案:

在jenkins 启动的docker-compose文件中增加如下配置

javascript 复制代码
/var/run/docker.sock:/var/run/docker.sock

四、docker推送镜像

javascript 复制代码
def servicename = "weaveservice"
node {
	stage('Checkout') {
		echo "1.克隆git仓库代码"
		git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
		script {
			build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
		  }
		echo "${build_tag}"
	}
	stage('Maven Build') {
		echo "2.Maven 打包项目"
		sh "mvn --version"
		sh 'pwd'
		sh 'mvn clean package -DskipTests'
		echo '构建完成'
	}
	stage('Docker Build') {
		echo "3.Docker 构造镜像"
		sh "docker -v"
		sh 'pwd'
		sh """cd /var/jenkins_home/workspace/test/weaveserviceservice/src/main/docker/ 
		ls
		docker build -t 127.0.0.1:80/dev/${servicename}:${build_tag} ."""
	}
	stage('Docker Push') {
		echo "4.Docker 推送镜像"
		withCredentials([usernamePassword(credentialsId: "0fbd81ff-a45b-4e8b-9355-a2a5a36438c0", passwordVariable: "password", usernameVariable: "username")]) {
			sh "docker login 127.0.0.1:80 -u ${username} -p ${password}"
			sh "docker push 127.0.0.1:80/dev/${servicename}:${build_tag}"
		}
	}
}

遇到的问题:

在使用docker build命令的时候,报如下错误

javascript 复制代码
Cannot perform an interactive login from a non TTY device 

解决方案:

参考博文Docker、Jenkins、Harbor 构建镜像部署 SpringBoot 项目,先不在jenkins中执行,先在宿主机上执行是否可以成功,然后在jenkins中编写对应脚本就可以了。

五、kubelctl执行

javascript 复制代码
def harborurl = "127.0.0.1:80"
def servicename = "weaveservice"
node {
	stage('Checkout') {
		echo "1.克隆git仓库代码"
		git branch: 'dev', credentialsId: 'c253ee4c-f900-422b-b3f2-b83090ae6a9b', url: 'https://gitee.com/luckywxn/WeaveErpSoa.git'
		script {
			build_tag = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim()
		  }
		echo "${build_tag}"
	}
	stage('Maven Build') {
		echo "2.Maven 打包项目"
		sh "mvn --version"
		sh 'pwd'
		sh 'mvn clean package -DskipTests'
		echo '构建完成'
	}
	stage('Docker Build') {
		echo "3.Docker 构造镜像"
		sh "docker -v"
		sh 'pwd'
		sh """cd /var/jenkins_home/workspace/test/weaveserviceservice/src/main/docker/ 
		ls
		docker build -t ${harborurl}/dev/${servicename}:${build_tag} ."""
	}
	stage('Docker Push') {
		echo "4.Docker 推送镜像"
		withCredentials([usernamePassword(credentialsId: "0fbd81ff-a45b-4e8b-9355-a2a5a36438c0", passwordVariable: "password", usernameVariable: "username")]) {
			sh "docker login ${harborurl} -u ${username} -p ${password}"
			sh "docker push ${harborurl}/dev/${servicename}:${build_tag}"
		}
	}
	stage('Deploy') {
		echo "5. Deploy Kubernetes"
		sh "kubectl version"
		sh """cd /var/jenkins_home/workspace/test/weaveserviceservice/ 
		ls
		sed -i 's/<PROJECT_NAMESPACE>/app/' k8s.yaml
		sed -i 's/<DOCKER_REGISTRY>/${harborurl}/' k8s.yaml
		sed -i 's/<PROJECT_NAME>/${servicename}/' k8s.yaml
		sed -i 's/<BUILD_TAG>/${build_tag}/' k8s.yaml
		kubectl delete -f .
		kubectl apply -f k8s.yaml --record
		"""
	}
}

遇到的问题一:

在使用kubectl version命令的时候,报如下错误

javascript 复制代码
Error from server (Forbidden): <html><head><meta http-equiv='refresh' content='1;url=/login?from=%2Fswagger-2.0.0.pb-v1%3Ftimeout%3D32s'/><script>window.location.replace('/login?from=%2Fswagger-2.0.0.pb-v1%3Ftimeout%3D32s');</script></head><body style='background-color:white; color:white;'>


Authentication required
<!--
-->

</body></html>

解决方案:

参考博文从 jenkins 容器运行 kubectl 命令,jenkins配置的环境变量中设置kubectl 的认证信息

遇到的问题二:

在使用kubectl apply -f k8s.yaml --record命令的拉取镜像的时候,报如下错误

javascript 复制代码
container "weaveservice" in pod "weaveservice-dad798uvdkkd"is waiting pulled 

解决方案:

参考博文k8s 1.23 拉取 harbor镜像失败,配置好后还是报错,后面突然发现,pod是在node节点拉取的镜像,然后在node节点的宿主机执行docker login 命令,发现又有如下报错:

javascript 复制代码
Error response from daemon: Get "https://192.168.1.7:80/v2/": http: server gave HTTP response to HTTPS client

然后参考博文 Docker login 登录私服,报错; http: server gave HTTP response to HTTPS client操作后,docker login 命令执行成功,镜像拉取下来之后,pod也就自动启动了。大功告成!!!

参考资料

  1. jenkins流水线部署springboot应用到k8s集群(k3s+jenkins+gitee+maven+docker)(2)
  2. jenkins发布springboot到k8s
  3. Jenkins中无法启动docker daemon的解决和思考
  4. SpringBoot 应用如何部署到 K8S 上?
  5. jenkins 上的 docker 登录
  6. Docker、Jenkins、Harbor 构建镜像部署 SpringBoot 项目
  7. k8s 1.23 拉取 harbor镜像失败
  8. K8S部署应用时从harbor拉取镜像失败
  9. Docker login 登录私服,报错; http: server gave HTTP response to HTTPS client
相关推荐
Johny_Zhao1 小时前
OpenClaw中级到高级教程
linux·人工智能·信息安全·kubernetes·云计算·yum源·系统运维·openclaw
皮皮林55116 小时前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
用户908324602733 天前
Spring AI 1.1.2 + Neo4j:用知识图谱增强 RAG 检索(上篇:图谱构建)
java·spring boot
可观测性用观测云4 天前
云原生网关 Ingress-Nginx 链路追踪实战:OpenTelemetry 采集与观测云集成方案
nginx·kubernetes
用户8307196840824 天前
Spring Boot 集成 RabbitMQ :8 个最佳实践,杜绝消息丢失与队列阻塞
spring boot·后端·rabbitmq
Java水解4 天前
Spring Boot 视图层与模板引擎
spring boot·后端
Java水解4 天前
一文搞懂 Spring Boot 默认数据库连接池 HikariCP
spring boot·后端
洋洋技术笔记4 天前
Spring Boot Web MVC配置详解
spring boot·后端
初次攀爬者5 天前
Kafka 基础介绍
spring boot·kafka·消息队列
用户8307196840825 天前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp