DevOps实现CI/CD实战(七)- Jenkins集成k8s实现自动化CI

news2024/11/27 13:06:13
自动化CI操作
1. 安装gitlab plugin 工具

在这里插入图片描述##### 2. 配置流水线任务的构建触发器,复制URL:http://192.168.201.111:8080/project/pipeline
在这里插入图片描述

3. Gitlab配置Webhooks,将上面的url:http://192.168.201.111:8080/project/pipeline粘贴到下面位置,下面勾选push events

在这里插入图片描述
但是在保存的时候报了zURL阻塞这个问题,解决方案如下,点击admin下面的network找到Outbound requests都选下面选项,然后点击保存
在这里插入图片描述

完成上面步骤,然后再次,到webhooks页面复制url然后点击保存。在这里插入图片描述
然后测试,报了403,应为Jenkins默认是不接收webhooks的请求的,这是Jenkins的安全机制导致的,需要修改Jenkins的系统配置

在这里插入图片描述

4. 修改Jenkins的Gitlab配置,需要先安装我们上面说的Gitlab plugin插件

在这里插入图片描述
再次去webhooks页面进行测试,然后成功了,然后Jenkins也触发了构建
在这里插入图片描述
Jenkins自动构建
在这里插入图片描述

但是构建失败了,原因就是我们构建打包的时候,配置了tag提交点,现在我们是需要按代码的最新的提交点打包部署,要去掉git的参数配置,修改Jenkinsfile文件里用到的$tag的地方。
在这里插入图片描述

5. 删除流水线的参数构建化过程

在这里插入图片描述

  • 修改项目的Jenkinsfile文件,$tag替换
// 所有的脚本命令都放在pipeline中
pipeline{
	// 指定任务在哪个集群节点执行
	agent any
	// 声明全局变量,方便后面使用
	environment{
		harborUser='sswang'
		harborPasswd='A123456a'
		harborAddr='harbor.com'
		harborRepo='sswang'
	}
	
	stages{
		stage('拉取git仓库代码') {
			steps {
				checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.201.112:8929/mytest/mytest.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.host.url=http://192.168.201.111:9000/ -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=65a1741c6f4191105f68096278fe77adaa1d15a1'
			}
		}
		stage('通过docker制作自定义镜像') {
			steps {
				sh '''mv ./target/*.jar ./docker/
				docker build -t ${JOB_NAME}:latest ./docker/'''
			}
		}
		stage('将自定义镜像推送到Harbor中') {
			steps {
				sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddr}
				docker tag ${JOB_NAME}:latest ${harborAddr}/${harborRepo}/${JOB_NAME}:latest
				docker push ${harborAddr}/${harborRepo}/${JOB_NAME}:latest'''
			}
		}
		stage('将部署的yml文件传送到k8s-master节点') {
			steps {
				sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
			}
		}
		stage('远程执行k8s-master节点的kubectl命令') {
			steps {
				sh 'ssh root@192.168.201.120 kubectl apply -f /usr/local/k8s/pipeline.yml'
			}
		}
	}
}

然后修改controller文件,触发了构建,虽然构建成功了,但是发现了一个问题,k8s的pod并没有更新。

针对这个问题,k8s提供了一种解决的方法,kubectl rollout restart deployment pipeline -n test执行完命令后发现容器在滚动重启了

在这里插入图片描述
还有修改项目中pipeline.yml的镜像的版本号为latest

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: test
  name: pipeline
  labels:
    app: pipeline
spec:
  replicas: 2
  selector:
    matchLabels:
      app: pipeline
  template:
    metadata:
      labels:
        app: pipeline
    spec:
      containers:
      - name: pipeline
        image: harbor.com/sswang/pipeline:latest
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  namespace: test
  name: pipeline
  labels:
    app: pipeline
spec:
  selector:
    app: pipeline
  ports:
    - port: 8082
      targetPort: 8080
  type: NodePort

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: test
  name: pipeline
spec:
  ingressClassName: nginx
  rules:
  - host: pipeline.test.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: pipeline
            port:
              number: 8082

重新触发部署后发现成功了
在这里插入图片描述
但是还有一个问题,因为我们是修改的pipeline.yml,所以生效了,但是我要是修改controller之后,还是没有变化,不信的话可以自己试一下,我试过了。哈哈哈,要解决这个问题,就要修改kubectl的命令

  • 最终修改Jenkinsfile文件,添加k8s部署命令
sh '''ssh root@192.168.201.120 kubectl apply -f /usr/local/k8s/pipeline.yml
ssh root@192.168.201.120 kubectl rollout restart deployment pipeline -n test'''

最终Jenkinsfile文件

// 所有的脚本命令都放在pipeline中
pipeline{
	// 指定任务在哪个集群节点执行
	agent any
	// 声明全局变量,方便后面使用
	environment{
		harborUser='sswang'
		harborPasswd='A123456a'
		harborAddr='harbor.com'
		harborRepo='sswang'
	}
	
	stages{
		stage('拉取git仓库代码') {
			steps {
				checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.201.112:8929/mytest/mytest.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.host.url=http://192.168.201.111:9000/ -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.login=65a1741c6f4191105f68096278fe77adaa1d15a1'
			}
		}
		stage('通过docker制作自定义镜像') {
			steps {
				sh '''mv ./target/*.jar ./docker/
				docker build -t ${JOB_NAME}:latest ./docker/'''
			}
		}
		stage('将自定义镜像推送到Harbor中') {
			steps {
				sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddr}
				docker tag ${JOB_NAME}:latest ${harborAddr}/${harborRepo}/${JOB_NAME}:latest
				docker push ${harborAddr}/${harborRepo}/${JOB_NAME}:latest'''
			}
		}
		stage('将部署的yml文件传送到k8s-master节点') {
			steps {
				sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
			}
		}
		stage('远程执行k8s-master节点的kubectl命令') {
			steps {
				sh '''ssh root@192.168.201.120 kubectl apply -f /usr/local/k8s/pipeline.yml
                ssh root@192.168.201.120 kubectl rollout restart deployment pipeline -n test'''
			}
		}
	}
}

修改controller文件验证

/**
 * @author analytics
 * @date 2024/8/20 22:10
 * @description
 */
@RestController
public class TestController {

    @GetMapping("/test")
    public String test() {
        return "Hello Jenkins the final Pipeline:latest!!!!!!!!!!";
    }
}

最后终于成功了,xdm,到此,累坏了。
在这里插入图片描述
到此,DevOps实现自动化CI,CD操作已经完成了,整个过程比较繁琐,也比较复杂,在操作过程中也有各种各样的问题,希望xdm都能耐心一点,相信你也会成功的。
关于k8s集群搭建的文档已经在github中了,大家需要的可以去参考。里面也有完整的DevOps的笔记,与大家一起进步。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于微信小程序+Java+SpringBoot+Vue+MySQL的网上花店/鲜花销售小程序

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的网上花店/鲜花销售…

AI绘画stable diffussion :Lora大模型微调的利器

前言 LoRA模型是小型的Stable Diffusion模型,它们对checkpoint模型进行微小的调整。它们的体积通常是检查点模型的10到100分之一。因为体积小,效果好,所以lora模型的使用程度比较高。 这是一篇面向从未使用过LoRA模型的初学者的教程。你将了…

使用tesseract.js插件实现前端js识别提取图片的文字

<!DOCTYPE html> <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>图像OCR Tesseract.js 测试…

给豆包MarsCode 编程插件点赞

本文正在参加豆包MarsCode测评官征文活动 首先MarsCode 拉新福利还是蛮高的有E卡、周边T恤、肯德基代金券显卡等hahaha…… 略微炫耀一下100京东E卡&#xff0c;真香&#xff01; 活动入口&#xff1a;https://www.marscode.cn/events/s/ihx7hkNY/ 顺手帮忙助个力谢谢~ 2…

人工智能 | 搭建企业内部的大语言模型系统

大纲 开源大语言模型大语言模型管理私有大语言模型服务部署方案 开源大语言模型 担心安全与隐私&#xff1f;可私有部署的开源大模型 商业大模型&#xff0c;不支持私有部署 ChatGPTClaudeGoogle Gemini百度问心一言 开源大模型&#xff0c;支持私有部署 MistralMeta Llama…

ssl 协议工作过程

ssl 协议工作过程 ChatGPT 说&#xff1a; ChatGPT SSL&#xff08;Secure Sockets Layer&#xff09;协议是用来确保网络通信安全的加密协议&#xff0c;已被TLS&#xff08;Transport Layer Security&#xff09;取代&#xff0c;但它的工作过程仍然是理解现代加密协议的重…

【视频教程】GEE-PIE遥感大数据处理与典型案例实践

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

《开发环境使用HTTPS调试》

&#x1f916; 作者简介&#xff1a;水煮白菜王 &#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 前端专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧✍。 感谢支持&#x1f495;&#x1f495;&#x1f495; 近…

CoreDownload - WordPress文章下载增强插件v1.0.6

文章内下载效果 后台编辑页面 CoreDownload 是一款高级WordPress 下载增强插件&#xff0c;支持几乎所有网盘&#xff0c;为WordPress增加任意下载功能 安装插件后&#xff0c;在设置中全局开启。然后编辑文章&#xff0c;可以在下面找到CoreDownload下载增强功能。 插件下载 …

以太网和WIFI之间的网络切换脚本(Window环境)

网络切换脚本 在本地创建Window的批处理脚本【网络切换脚本.bat】&#xff0c;填入以下内容&#xff0c;然后以管理员身份运行&#xff0c;即可实现以太网和WIFI之间的切换。 echo off netsh interface show interface "WLAN" | find "管理状态: 已启用"…

SLM21814系列SiLM21814CJ-AQ能提供独立的高边、低边输出驱动信号 一款高压、高速的功率MOSFET和IGBT驱动器

SLM21814系列SiLM21814CJ-AQ是一款高压、高速的功率MOSFET和IGBT驱动器&#xff0c;它提供独立的高边、低边输出驱动信号。采用专有的高压集成电路和锁存免疫CMOS技术&#xff0c;提供可靠的单芯片驱动方案。逻辑输入电平与标准CMOS或LSTTL输出兼容&#xff0c;最低支持3.3V逻辑…

家常菜才最适合减肥!最新研究发现,减少外出就餐次数可减少儿童肥胖

虽然老人们都喜欢孩子能“白白胖胖”&#xff0c;但随着生活水平的提高&#xff0c;儿童肥胖已成为一个不可忽视的健康问题。据报道&#xff0c;我国6-17岁儿童青少年超重率和肥胖率分别是11.1%和7.9%&#xff0c;也就是说&#xff0c;几乎每5个中小学生中就有一个小胖墩儿。 有…

如何在算家云搭建Open-Sora1.1(视频生成)

一、Open-Sora1.1简介 Open-Sora 1.1 项目是 Colossal AI 团队开发的一个完全开源的视频生成项目&#xff0c;该项目致力于高效制作高质量视频&#xff0c;并通过开源原则实现先进视频生成技术的低成本普及。 1. 项目背景与目标 Open-Sora 项目旨在通过提供开源的模型、工具…

【Python】数据可视化之核密度

KDEPlot&#xff08;Kernel Density Estimate Plot&#xff0c;核密度估计图&#xff09;是seaborn库中一个用于数据可视化的函数&#xff0c;它基于核密度估计&#xff08;KDE&#xff09;这一非参数统计方法来估计数据的概率密度函数。KDEPlot能够直观地展示数据的分布特征&a…

定点荧光标记蛋白:轻松搞定CAR-T阳性率检测

CAR-T细胞疗法在8月份提前进入“丰收季”。8月27日NMPA官网公示&#xff0c;**国内第五款CAR-T细胞疗法——来自传奇生物的西达基奥仑赛注射液获批上市。**这款靶向BCMA的细胞疗法用于治疗复发或难治性多发性骨髓瘤&#xff08;R/R MM&#xff09;成人患者。同一天&#xff0c;…

NDP协议是怎样帮助IPv6实现网络安全运行的?

在复杂多变的网络环境中&#xff0c;确保各节点之间能够高效、准确地发现与通信&#xff0c;是构建稳定、可扩展网络架构的基石。那么IPv6是依靠什么实现网络安全运行的呢&#xff1f;今天我将就IPv6中的一个重要协议——NDP协议的基本概念及工作原理展开深入分析。 NDP协议的基…

体育馆管理系统|基于SpingBoot+vue的体育馆管理系统(源码+数据库+文档)

体育馆管理系统 目录 基于SpingBootvue的体育馆管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 1登录 2学生管理页面 3系统主界面模块的实现 4器材管理模块的实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源…

ICM20948 DMP代码详解(11)

接前一篇文章&#xff1a;ICM20948 DMP代码详解&#xff08;10&#xff09; 上一回讲解完了icm20948_sensor_setup函数的第1段代码&#xff0c;本回继续往下解析。为了便于理解和回顾&#xff0c;再次贴出icm20948_sensor_setup函数源码&#xff0c;在EMD-App\src\ICM20948\sen…

一文讲清投影,定义投影,投影栅格……

正确的空间坐标系是进行地理分析和处理的基础&#xff0c;投影是其中十分重要的概念。在ArcGIS系列的软件中关于投影的工具有四个&#xff0c;分别是定义投影、投影、投影栅格、批量投影。 你能分清他们吗&#xff1f; 如果不能。别急&#xff0c;下面我来给你一一介绍。 定…

虚拟机卡死问题

升级VMware至15.1.0版本解决Windows 10 1903下VMware Workstation 15 Pro虚拟机死机问题 如题&#xff0c;在几乎全新的Windows 10 1903操作系统下&#xff0c;在VMware Workstation中安装虚拟机经常出现死机现象&#xff0c;主要表现在以下两个方面&#xff1a; 创建好虚拟机后…