5.k8s jenkins集成k8s一键发布案例

news2024/11/28 15:56:08

文章目录

  • 前言
  • 一、jenkins配置
    • 1.1 jenkins配置git
    • 1.2 jenkins 配置maven
    • 1.3 jenkins配置java
  • 二、jenkins流水线配置
    • 2.1.新增项目
    • 2.2 springboot项目配置git仓库
    • 2.3 springboot项目配置maven打包
    • 2.4 系统配置 ssh到hadoop1配置,也就是k8s的master节点
    • 2.6 springboot项目配置拷贝jar包到远端
    • 2.5 springboot项目配置打包完成后的执行脚本
    • 2.6 验证
  • 总结


前言

前面已经完成了k8s集群的部署,现在尝试jenkins自动集成到k8s集群。jenkins搭建可以参考,jenkins搭建


一、jenkins配置

前面已经完成了jenkins的搭建,但是还没有集成git,maven,java,这里做下配置。

1.1 jenkins配置git

linux安装git如下

yum install git

如下图的路径配置里如果没有git,去插件安装处安装一下git插件即可
在这里插入图片描述

配置git,如果没有git去插件管理安装一下就行

/usr/bin/git

在这里插入图片描述

1.2 jenkins 配置maven

自己下载maven安装包,解压到你自己的安装目录,修改conf文件

<mirror>
    <id>aliyunmaven</id>
    <mirrorOf>*</mirrorOf>
    <name>阿里云公共仓库</name>
    <url>https://maven.aliyun.com/repository/public</url>
</mirror>

export MAVEN_HOME=/opt/*/maven3.6/apache-maven-3.6.3
export PATH=MAVEN_HOME/bin:MAVEN_HOME/bin:PATH
#刷新配置
source /etc/profile

检查是否安装成功

mvn help:system

如果出现下载文件,则maven安装成功了,接下来去jenkins配置maven如图所示,我的安装路径如下,

/root/tools/apache-maven-3.6.3/conf/settings.xml

在这里插入图片描述
配置maven安装路径如图
在这里插入图片描述

1.3 jenkins配置java

/root/tools/jdk/jdk1.8.0_144

在这里插入图片描述

二、jenkins流水线配置

2.1.新增项目

在这里插入图片描述

2.2 springboot项目配置git仓库

这里我使用的国内免费的gittee作为仓库。

先到linux服务器上生成公钥私钥,用来联通linux和git

ssh-keygen -t rsa -C "your_email@youremail.com"

然后两次回车即可,cd ~/.ssh 目录下拷贝公钥到gitee,公钥管理处
公钥存放的文件为id_rsa.pub
私钥存放的文件为id_rsa
在这里插入图片描述

  • 然后到jenkins配置证书,点击添加证书
    在这里插入图片描述
    这里选择的是ssh username with private key在这里插入图片描述
    username和id随便填,下面框框里面填的内容为刚刚生成的私钥
    id_rsa里的所有内容。
    在这里插入图片描述
    完成后会报错如下,
Failed to connect to repository : Command "/usr/bin/git ls-remote -h https://gitee.com/jiangbingsong/k8s-demo.git HEAD" returned status code 128:
stdout:
stderr: fatal: Authentication failed for 'https://gitee.com/jiangbingsong/k8s-demo.git/

可能原因:
1.你的秘钥配置填写错误,检查一下就行
2.gittee仓库的权限不是公开的,把它配置成公开,或者设置仓库秘钥重新配置。
仓库秘钥配置的地方如下图,我配置了好几次都失败了,提示成功却没有秘钥出来
在这里插入图片描述
然后修改为仓库公开了,在基本信息下面设置仓库公开即可。
在这里插入图片描述

2.3 springboot项目配置maven打包

clean install

在这里插入图片描述

这里的pom路径为相对路径,根据你仓库地址到pom.xml文件的路径例如我的仓库下载下来的代码pom文件路径就是根路径下的,pom.xml

2.4 系统配置 ssh到hadoop1配置,也就是k8s的master节点

Dashboard-Manage Jenkins-System,publish over ssh 这里配置,
如果没有该选项,则去插件配置里面搜索这个插件安装重启一下就好了。
在这里插入图片描述
Passphrase 登录主机的密码
在这里插入图片描述

  • name 主机名,可以随便填
  • hostname 主机ip
  • username 登录用户名
  • Remote Directory 登录到远端的地址。
    编辑完成后点下测试,返回sucess配置成功。
    在这里插入图片描述

2.6 springboot项目配置拷贝jar包到远端

配置Send files or execute commands over SSH 拷贝生成的jar到远端。
在这里插入图片描述

target/demo-0.0.1-SNAPSHOT.jar
target
/root/dockerimage
pwd
echo “传输完成”
  • source files jar包生成的相对目录 整个工作空间地址为
    /var/lib/jenkins/workspace/springboot maven在springboot下生成target文件夹,从这里开始算
  • Remove prefix 前缀 要去掉target否则会连整个文件夹一起拷贝到远端,我们只是想拷贝jar包过去,所以去掉
  • Remote directory 拷贝到远端的目录

2.5 springboot项目配置打包完成后的执行脚本

新增远端执行指令,选择刚刚系统配置的远端主机
在这里插入图片描述
这个红色的警告不用管,这个是你jenkins要带到远端的文件,我这里不需要带过去,就不配置了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/36f32c9ea94c49a2bc5d227b3ca2c24e.png

  • Remote directory 远端登录的目录
  • Exec command 执行的指令
cd /root/dockerimage
./start.sh
./imagerm.sh

这里要执行的命令,我写成了shell脚本去执行,脚本如下
start.sh如下

#!/bin/sh
#
# 镜像仓库地址
DOCKER_REPOSITORIES="192.168.184.129:5000"
# 项目名称
APP_NAME="springbootdemo"
# 初始化版本号
init_version="0.0.1"
#下一个版本号
nextPlatformTags=""
#登录到私有仓库
# 处理私服docker镜像版本号 旧的版本号
platformRepoTags=$(curl -u jiangbingsong:123456 ${DOCKER_REPOSITORIES}/v2/${APP_NAME}/tags/list |jq  ".tags" |awk -F',' '{print $NF}'|sed 's/[][]//'  |sed '/^$/d'|sed 's/\"//g')
echo "platformRepoTags:" $platformRepoTags
#去掉空格
platformRepoTags=${platformRepoTags// /}
if [ "$platformRepoTags" = null ]; then
nextPlatformTags="${init_version}"
else
OLD_IFS="$IFS"
IFS="."
arryPlatTags=($platformRepoTags)
IFS="$OLD_IFS"
# 处理私服docker镜像版本号 升级版本
nextPlatformTags=${arryPlatTags[0]}.${arryPlatTags[1]}.$[arryPlatTags[2]+1]
fi
# 构建的命令
APP_NAME_BUILD="${DOCKER_REPOSITORIES}/${APP_NAME}:${nextPlatformTags} ."
echo "构建的命令: build -t ${APP_NAME_BUILD}"
docker build -t ${APP_NAME_BUILD}
#push到镜像仓库
PUSH_APP_NAME="${DOCKER_REPOSITORIES}/${APP_NAME}:${nextPlatformTags}"
#echo "提交到私有镜像仓库命令: docker push ${PUSH_APP_NAME}"
docker login ${DOCKER_REPOSITORIES} -u jiangbingsong -p 123456
docker push ${PUSH_APP_NAME}
#docker logout
kubectl apply -f springbootDeployment.yaml
echo "PUSH_APP_NAME:" ${PUSH_APP_NAME}
kubectl set image -n=webservice deployment/springbootdeploy $APP_NAME=${PUSH_APP_NAME}
echo "success !"

解释下,这里主要做的事有生成docker镜像,查询仓库内的镜像版本号,自动升级版本号,使用版本号进行升级,然后推送到仓库,最后设置deployment的镜像镜像更新。

  • springbootdeploy 为你depoyment的名字,
    springbootDeployment.yaml 和dockerfile文章内容,前面的文章有,可以找找。
    同时springbootDeployment.yaml做以下修改。
    在这里插入图片描述
    清理镜像脚本imagerm.sh如下
    这个内容不用改直接用就行,项目镜像只保留最新的2个版本
#!/bin/bash
 
# 获取所有镜像列表,并按照创建时间排序
image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2)
 
# 获取所有镜像名
image_names=$(echo "$image_list" | awk -F ':' '{print $1}' | uniq)
 
# 遍历每个镜像名
for image_name in $image_names; do
    # 获取特定镜像名的镜像列表
    filtered_images=$(echo "$image_list" | awk -F ':' -v name="$image_name" '$1 == name')
 
    # 获取镜像数量
    image_count=$(echo "$filtered_images" | wc -l)
 
    # 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个
    if [ $image_count -gt 3 ]; then
        images_to_delete=$((image_count - 2))
        images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1)
 
        for image in $images_to_delete_list; do
            docker image rm $image
        done
 
    fi
done

2.6 验证

这里我的服务暴露的方式是nodeport,也可以用ingress配置成域名登录,比较麻烦,前面的教程也有弄过,这里这是为了集成jenkins就不搞这么多了。

kubectl get svc --all-namespaces

在这里插入图片描述
http://192.168.184.129:30467/hello

在这里插入图片描述

返回了200,验证成功。

总结

1.jenkins集成,可以先不直接集成k8s,可以先用jenkins集成java -jar的方式启动,这样能先排除jenkins产生的问题,我这里就不展示过程了,就直接写成了最后的结果。
2.springbootDeployment.yaml文件的镜像拉取设置要修改一下才能拉取到。

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

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

相关文章

Handler原理

Handler原理 前言1. Handler作用2. Handler概述3. 核心类 一、Handler源码分析1.创建Handler2.发送消息3.取消息4.消息处理5.线程切换 二、相关内容1.Handler原理2.epoll机制2.1什么是epoll机制&#xff1f;2.2 select/poll/epoll2.3 Handler中epoll是如何实现消息队列的阻塞和…

誉天在线项目~ElementPlus Tag标签用法

效果图 页面展现 <el-form-item label"课程标签"><el-tagv-for"tag in dynamicTags":key"tag"class"mx-1"closable:disable-transitions"false"close"handleClose(tag)"style"margin:5px;">…

解决Custom EmptyStringException: The string is empty

解决Custom EmptyStringException: The string is empty 解决Custom EmptyStringException: The string is empty摘要引言正文1. 理解异常的根本原因2. 处理空字符串问题3. 用户输入验证4. 异常处理 总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&…

gitlab runner 不清理云端已经删除的tag和branch问题记录

在使用gitlab runner的过程中&#xff0c;发现由于git存储限制&#xff0c;不允许在a/b分支后创建a/b/c的分支。所以移除云端a/b分支后创建a/b/c分支。 但是由于gitlab runner出于拉取代码的速度考虑&#xff0c;将本地代码路径做了持久化缓存。 在上述场景中&#xff0c;新建…

Layui + Flask | 实现注册、登录功能(案例篇)(08)

此案例内容比较多,建议滑到最后点击阅读原文,阅读体验更佳。后续也会录制案例视频,将在本周内上传到同名的 b 站账号。 已经看了 layui 表单相关的知识,接下来就可以实现注册功能,功能逻辑如下: 项目创建 新建 flask 项目下载 layui 文件,解压之后复制到指定文件编写前…

算法--选择排序

算法步骤 /*** 选择排序** version 1.0* date 2023/09/01 17:57:05*/ public class Select {/*** 升序选择排序** param a 待排序的数组* date 2023/9/1 15:29:10*/public static void sortAes(int[] a) {//数组长度int length a.length;for (int i 0; i < length-2; i) {…

Web应用开发 - 实训三 B Servlet基础

Web应用开发 - 实训三 B Servlet基础 前言&#xff1a; 零、前期准备准备工具创建项目导入 jar 包配置运行设置 一、实训第一部分第一张图第二张图第三张图 二、实训第二部分第一张图第二张图 前言&#xff1a; eclipse 是不可能用的&#xff0c;并不是说它界面丑&#xff0c;…

Navicat导入Excel数据顺序变了

项目场景&#xff1a; Navicat导入Excel数据 问题描述 从Excel表格中导入数据到数据库中。但是&#xff0c;在导入的过程中&#xff0c;我们常会发现数据顺序出现了问题&#xff0c;导致数据错位&#xff0c;给数据的处理带来了极大的麻烦。 原因分析&#xff1a; 这个问题的…

【CVPR2020】DEF:Seeing Through Fog Without Seeing Fog论文阅读分析与总结

Challenge&#xff1a; 之前网络架构的设计假设数据流是一致的&#xff0c;即出现在一个模态中的对象也出现在另一个模态中。然而&#xff0c;在恶劣的天气条件下&#xff0c;如雾、雨、雪或极端照明条件&#xff0c;多模态传感器配置中的信息可能不对称。不同传感器在特征提取…

第六章 图 八、有向无环图的描述表达式

一、定义 有向无环图: 若一个有向图中不存在环&#xff0c;则称为有向无环图&#xff0c;简称DAG图(Directed Acyclic Graph) 解题方法:

如何将安防视频监控系统/视频云存储EasyCVR平台推流到公网直播间?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

C++ QT qml 学习之 做个登录界面

最近在学习QT&#xff0c;也初探到qml 做ui 的灵活性与强大&#xff0c;于是手痒痒&#xff0c;做个demo 记录下学习成果 主要内容是如何自己编写一个按钮以及qml多窗口。 参考WX桌面版&#xff0c;做一个登录界面&#xff0c;这里面按钮是写的一个组合控件&#xff0c;有 按…

HTTP协议的基本概念与理解!

一、什么是HTTP协议 HTTP&#xff08;超文本传输协议&#xff09;是一个基于请求与响应&#xff0c;无状态的&#xff0c;应用层的协议&#xff0c;常基于TCP/IP协议传输数据&#xff0c;互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷…

Fedora CoreOS 安装部署详解

《OpenShift 4.x HOL教程汇总》 Fedora CoreOS 的裸机安装方法_fedora coreos 安装-CSDN博客 OpenShift 4 - Fedora CoreOS (1) - 最简安装_fedora core 安装_dawnsky.liu的博客-CSDN博客 OpenShift 和 CoreOS 我们知道 Red Hat Enterprise Linux CoreOS&#xff08;简称RHCOS&…

SP2-1503|0152:CMD窗口的SQLPLUS命令无法登录Oracle

场景还原 今天有小伙伴把Oracle卸载后重新安装&#xff0c;尝试以下三种方案均无法登录数据库 1.、在使用PLSQL Developer时&#xff0c;输入账号密码机械能登录操作&#xff0c;弹出空白弹框界面 即没有任何提示错误代码 只有一个白板的框 2、利用自身的SQL PLUS登录直接窗…

【SpringBoot集成Redis + Session持久化存储到Redis】

目录 SpringBoot集成Redis 1.添加 redis 依赖 2.配置 redis 3.手动操作 redis Session持久化存储到Redis 1.添加依赖 2.修改redis配置 3.存储和读取String类型的代码 4.存储和读取对象类型的代码 5.序列化细节 SpringBoot集成Redis 1.添加 redis 依赖 …

运算放大器学习笔记

目录 一、基本定理二、基本定义三、负反馈电路四、同向放大电路五、反向放大电路六、差分放大电路 一、基本定理 【电路示意图】 开环放大公式 VOAvo(V-V-) 开环放大倍数&#xff08;增益&#xff09;非常大&#xff0c;105 或 106 输入阻抗超级大&#xff08;可以理解为电…

辅助驾驶功能开发-控制篇(03)-基于PID的请求角度转扭矩算法

1 文档概述 本文档主要描述请求角度转扭矩的功能、性能要求、算法程序设计,后续可作为程序编程和功能及性能测试参考文档。 2 功能要求 转角扭矩管理(SteeringTorqueManager)将方向盘请求转角转换为电机叠加扭矩,进行横向路径跟踪,并与驾驶员方向盘手感交互,实现自适应调整…

2023年五一杯数学建模B题快递需求分析问题求解全过程论文及程序

2023年五一杯数学建模 B题 快递需求分析问题 原题再现&#xff1a; 网络购物作为一种重要的消费方式&#xff0c;带动着快递服务需求飞速增长&#xff0c;为我国经济发展做出了重要贡献。准确地预测快递运输需求数量对于快递公司布局仓库站点、节约存储成本、规划运输线路等具…

红魔8SPro强解BL+完美ROOT权限-刷MIUI14系统-修复指纹丢失/内存等问题

早前我们刷过红魔8pro手机&#xff0c;该手机支持解锁BL刷入MIU14系统&#xff0c;红魔8Pro由于官方并没有修改解锁BL指令&#xff0c;所以我们的解锁BL非常简单&#xff0c;只需要在fastboot下一键完成。随着红魔8SPro的上架&#xff0c;红魔UI6.0的发布&#xff0c;官方解锁指…