Loading... # 一、简要描述 * **Jenkins整合Kubernetes** # 二、Jenkins整合Kubernetes ## 1、登录Jenkins管理后台,新建一个部署任务  ## 2、配置构建Jenkins任务构建参数信息 ### 2.1、Git构建参数信息  ### 2.2、配置容器启动时占用的端口号参数  ### 2.3、配置流水线信息   ## 3、Jenkins添加k8s master节点的服务器信息 ### 3.1、系统管理->系统配置  ### 3.2、新增k8s master节点的服务器信息 ``` $ mkdir -p /usr/local/deploy/k8s ```  ### 3.2、填写k8s master节点的服务器用户和密码信息,并测试   ## 3、在Jenkins容器内部与k8s master节点设置免费登录 ### 3.1、进入Jenkins运行容器内部,生成服务器公钥/私钥对 ``` # 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 ```  ### 3.2、把Jenkins容器内部生成的秘钥配置到k8s master节点服务器 ``` # 在A服务器查看公钥内容 $ cat /root/.ssh/id_rsa.pub # 在B服务器编辑 在B服务器的/root/.ssh/authorized_keys文件里添加公钥内容 $ vi /root/.ssh/authorized_keys ```  ### 3.3、在Jenkins容器内部测试连接k8s master节点服务器 ``` $ ssh root@192.168.95.101 ```  ## 4、在Springboot工程准备k8s yml部署文件和修改Jenkinsfile ``` // 所有的脚本命令都放在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)]) } } } 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}"] ) } } } ``` ### 4.1、把准备好的k8s yml部署文件复制到项目工程中  ### 4.2、修改Jenkinsfile部署文件 #### 4.2.1、在Jenkins管理后台,进入项目部署详情,进入流水线语法  #### 4.2.2、填写 SSH传输的信息  #### 4.2.3、生成流水线脚本,复制脚本到Jenkinsfile脚本步骤中  ### 4.3、提交修改Jenkinsfile到Gitlab仓库中  ## 5、修改Springboot测试代码,在Gitlab中新增一个tag ### 5.1、修改测试Controller的测试代码并提交到Gitlab  ### 5.2、在Gitlab管理后台,新增一个tag版本   ## 6、Jenkins打包部署与测试 ### 6.1、在Jenkins项目部署详情,选择一个版本部署  ### 6.2、查看打包部署的日志   ### 6.3、在k8s master节点的目录,查看复制传输过来的k8s yml部署文件  ## 7、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}"] ) } } } ``` ### 7.1、Jenkins项目配置详情,进入流水线语法页面  ### 7.2、生成‘远程执行k8s-master的kubectl命令’ 流水线脚本  ## 8、提交修改Jenkinsfile文件,同时修改测试代码版本 ### 8.1、提交Jenkinsfile和修改的测试代码到Gitlab  ### 8.2、修改Springboot项目中 k8s 部署yml配置文件,并提交到Gitlab  ### 8.3、在Gitlab仓库后台新建一个tag   ## 9、Jenkins项目执行部署并测试部署结果 ### 9.1、Jenkins项目详情执行部署  ### 9.2、Jenkins查看部署日志信息   ### 9.3、登录kuboard管理后台,查看部署结果   ## 10、浏览器访问部署的服务  **ip加端口的方式访问服务:****http://192.168.95.101:30778/sayHello** **域名加端口的方式访问:****http://nginx.flygo.tech:30778/sayHello**   最后修改:2025 年 06 月 24 日 © 禁止转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏