Jenkins+Kubernetes+Docker完成微服务持续集成
Jenkins+Kubernetes+Docker完成微服务持续集成
拉取代码,构建镜像
创建NFS共享目录
让所有Jenkins-Slave构建指向NFS的Maven的共享仓库目录
1 | vi /etc/exports |
1 2 | /opt/nfs/jenkins *(rw,no_root_squash) /opt/nfs/maven *(rw,no_root_squash) |
1 | systemctl restart nfs 重启NFS |
记得重启nfs!
然后
注意:在构建过程会发现无法创建仓库目录,是因为NFS共享目录权限不足,需更改权限
然后就是去创建一个新项目:
创建项目,编写构建Pipeline
配置一下harbor凭证
然后再去编写代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | def git_address = "http://20.0.0.20:82/root/tensquare_back.git" def git_auth = "904eff5d-41c8-44ad-ba24-7f539a0edb96" //构建版本的名称 def tag = "latest" //Harbor私服地址 def harbor_url = "20.0.0.50:85" //Harbor的项目名称 def harbor_project_name = "tensquare" //Harbor的凭证 def harbor_auth = "427399a8-db35-48e8-b5cf-a1ea63f10cc5" podTemplate(label: 'jenkins-slave' , cloud: 'kubernetes' , containers: [ containerTemplate( name: 'jnlp' , image: "20.0.0.50:85/library/jenkins-slave-maven:latest" ), containerTemplate( name: 'docker' , image: "docker:stable" , ttyEnabled: true , command: 'cat' ), ], volumes: [ hostPathVolume(mountPath: '/var/run/docker.sock' , hostPath: '/var/run/docker.sock' ), nfsVolume(mountPath: '/usr/local/apache-maven/repo' , serverAddress: '20.0.0.10' , serverPath: '/opt/nfs/maven' ), ], ) { node( "jenkins-slave" ){ // 第一步 stage( 'pull code' ){ checkout([$ class : 'GitSCM' , branches: [[name: '*/master' ]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}" , url: "${git_address}" ]]]) } // 第二步 stage( 'make public sub project' ){ //编译并安装公共工程 sh "mvn -f tensquare_common clean install" } // 第三步 stage( 'make image' ){ //把选择的项目信息转为数组 def selectedProjects = "${project_name}" .split( ',' ) for ( int i=0;i<selectedProjects.size();i++){ //取出每个项目的名称和端口 def currentProject = selectedProjects[i]; //项目名称 def currentProjectName = currentProject.split( '@' )[0] //项目启动端口 def currentProjectPort = currentProject.split( '@' )[1] //定义镜像名称 def imageName = "${currentProjectName}:${tag}" //编译,构建本地镜像 sh "mvn -f ${currentProjectName} clean package dockerfile:build" container( 'docker' ) { //给镜像打标签 sh "docker tag ${imageName} ${harbor_url}/${harbor_project_name}/${imageName}" //登录Harbor,并上传镜像 withCredentials([usernamePassword(credentialsId: "${harbor_auth}" , passwordVariable: 'password' , usernameVariable: 'username' )]) { //登录 sh "docker login -u ${username} -p ${password} ${harbor_url}" //上传镜像 sh "docker push ${harbor_url}/${harbor_project_name}/${imageName}" } //删除本地镜像 sh "docker rmi -f ${imageName}" sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${imageName}" } } } } } |
要修改地方:
然后去构建看结果!!
自古英雄多磨难
分类:
Jenkins
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)