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

文章目录

  • 前言
  • 一、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 ]; thenimages_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; dodocker image rm $imagedonefi
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.mzph.cn/news/78137.shtml

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

相关文章

【多线程】常见的锁策略

常见的锁策略 1. 乐观锁 vs 悲观锁2. 读写锁 vs 普通互斥锁3. 重量级锁 vs 轻量级锁4. 自旋锁&#xff08;Spin Lock&#xff09;vs 挂起等待锁5. 公平锁 vs 非公平锁6. 可重入锁 vs 不可重入锁7. Synchronized8. 相关面试题 1. 乐观锁 vs 悲观锁 悲观锁&#xff1a; 总是假设…

安防监控系统/视频云存储EasyCVR平台视频无法播放是什么原因?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

誉天在线项目~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;">…

Arcgis多值提取至点所有波段数值一样

Arcgis多值提取至点所有波段数值一样 问题描述 进行多值提取多波段后的结果&#xff0c;所有波段数值都是一样的。 原因 操作流程问题&#xff0c;输入栅格只选择了一个栅格文件 解决方案 实际上&#xff0c;每个波段都会对应一个栅格文件&#xff0c;要把这些添加进去 这…

进程地址空间(Linux虚拟内存机制)

文章目录 一.Linux进程地址空间的结构二.Linux管理进程地址空间的方式三.Linux进程使用物理内存的模型四.进程地址空间的存在意义 本章理论基于32位平台的Linux–kernel 2.6.32版本内核 一.Linux进程地址空间的结构 为了保证内存安全,现代操作系统不允许应用程序(进程)直接访问…

(二十八)大数据实战——Flume数据采集之kafka数据生产与消费集成案例

前言 本节内容我们主要介绍一下flume数据采集和kafka消息中间键的整合。通过flume监听nc端口的数据&#xff0c;将数据发送到kafka消息的first主题中&#xff0c;然后在通过flume消费kafka中的主题消息&#xff0c;将消费到的消息打印到控制台上。集成使用flume作为kafka的生产…

基于Protege的知识建模实战

一.Protege简介、用途和特点 1.Protege简介 Protege是斯坦福大学医学院生物信息研究中心基于Java开发的本体编辑和本体开发工具&#xff0c;也是基于知识的编辑器&#xff0c;属于开放源代码软件。这个软件主要用于语义网中本体的构建&#xff0c;是语义网中本体构建的核心开发…

高阶导数的概念与公式

目录 高阶导数的概念 常用的高阶导数的公式 隐函数补充 反函数补充 高阶导数的概念 高阶导数是指一阶或二阶及以上的导数。这些导数可以通过连续进行一阶导数的计算来得到。然而&#xff0c;实际计算高阶导数时&#xff0c;存在一些问题&#xff0c;例如对抽象函数高阶导数…

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一)

西门子S7-1200F或1500F系列安全PLC的组态步骤和基础编程(一) 第一部分:组态配置 具体步骤可参考以下内容: 如下图所示,新建一个项目后,添加一个安全型PLC,这里以1516F-3 PN/DP为例进行说明, 如下图所示,添加CPU完成后,可以看到左侧的项目树中比普通的PLC多了几个选项…

leetcode 232 用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…

【Docker】Docker简介

Docker简介 &#x1f4cb;导航 1. Docker简介1.1 什么是Docker&#xff1f;1.2 什么是容器&#xff1f;1.3 容器的优势&#xff1f;1.4 Docker的优势&#xff1f;1.5 虚拟技术与容器技术Docker的区别&#xff1f;1.6 为什么学习Docker? 2. 安装Docker3. Docker架构4. Docker命…

Vue3样式绑定

文章目录 Vue3样式绑定1. class 属性绑定1.1 v-bind:class 设置一个对象&#xff0c;从而动态的切换 class1.2 在对象中传入更多属性用来动态切换多个 class1.3 直接绑定数据里的一个对象1.4 绑定一个返回对象的计算属性。这是一个常用且强大的模式1. 5 数据语法1.6 errorClass…

JAsper:专注于营销领域的AIGC

【产品介绍】 Jasper 由 Dave Rogenmoser&#xff08;CEO&#xff09;、Chris Hull&#xff08;COO&#xff09;和 John Phillip Morgan&#xff08;CTO&#xff09;在2021 年成立&#xff0c;是一款领先的 AI 营销工具以及写作助手。整个jasper官网都会强调自己对营销领域的理…

了解冒泡排序

package com.mypackage.array;import java.util.Arrays;public class Demo07 {public static void main(String[] args) {int[] a {3,2,6,7,4,5,6,34,56,7};int[] sort1 sort1(a); //调用我们自己写的排序方法后&#xff0c;返回一个排序后的数组System.out.println(Array…

Spring Boot 下载文件(word/excel等)文件名中文乱码问题|构建打包不存在模版文件(templates等)

Spring Boot 下载文件(word/excel等)文件名中文乱码问题&#xff5c;构建打包不存在模版文件(templates等) 准备文件&#xff0c;这里我放在resource下的templates路径 在pom中配置构建打包的资源&#xff0c;更新maven 如果使用了assembly打包插件这样配置可能仍不生效&#…

台积电的战略布局:“曲线”抢单 | 百能云芯

郭明錤最新的分析引发了广泛关注&#xff0c;他指出台积电采取了一系列重大战略投资举措&#xff0c;旨在争夺未来的半导体订单&#xff0c;尤其是来自苹果和英伟达的12纳米订单。这些战略举措包括认购英特尔手中的IMS Nanofabrication Global股权以及投资安谋&#xff08;Arm&…

Linux:基础开发工具之yum,vim,gcc的使用

文章目录 yumvimgcc 本篇主要总结的是Linux下开发工具 yumvimgcc/g yum 什么是yum&#xff1f; 不管是在手机移动端还是pc端&#xff0c;不管是什么操作系统&#xff0c;当用户想要下载一些内容或者工具的时候&#xff0c;都需要到一个特定的位置进行下载&#xff0c;例如在…

点云从入门到精通技术详解100篇-从全局到局部的三维点云细节差异分析

目录 前言 国内外研究现状 细节差异分析相关研究 三维点云的相似性相关研究 存在的问题 三维点云对比的相关技术 2.1 三维点云的采集设备 2.2三维点云的存储格式 2.3三维点云的空间变换 2.4三维点云相似度分析 2.4.1点云特征的提取 2.4.2特征相似度计算 本文篇幅较长&#xff0…

获取Windows 10中的照片(旧版)下载

Windows 10中的新版照片应用&#xff0c;目前发现无法直接打开部分iOS设备上存储的照片。需要使用照片&#xff08;旧版&#xff09;才行。 但目前应用商店中无法直接搜索到照片&#xff08;旧版&#xff09;&#xff0c;因此笔者提供如下链接&#xff0c;可以直接访问并呼出W…

PostgreSQL数据库IPC——SI Message Queue

SI Message Queue代码位于src/backend/storage/ipc/sinvaladt.c和src/backend/storage/ipc/sinval.c文件中&#xff0c;属于PostgreSQL数据库IPC进程间通信的一种方式【之前介绍过PostgreSQL数据库PMsignal——后端进程\Postmaster信号通信也是作为PostgreSQL数据库IPC进程间通…