Jenkins+K8s实现持续集成(二)

部署前呢,要先把jenkins搭建好。

同时呢已经有了k8s的环境。

基于以上两步已经有了的情况,继续要实现jenkins+k8s持续集成,需要先准备四个文件:

Dockerfile首先要准备好一个Dockerfile文件,用于构建Docker镜像的文本文件
project.yaml这个是部署应用的yaml文件,名字可以取项目的名字,例如cool-hello.yaml
project-svc.yaml这个文件是将应用的端口和暴露对外的端口进行映射,名字可以是应用名字接svc来命名
jenkins.sh是执行部署的脚本

目录

一、Dockerfile怎么写呢?

二、project.yaml怎么写呢?

三、project-svc.yaml怎么写呢?

四、jenkins.sh脚本如何写?

五、如何在jenkins里面进行配置呢?


一、Dockerfile怎么写呢?

挂载目录和项目名字需要改成自己的。

# 基础镜像
FROM openjdk8-alpine-cst:v1.0.0
# author
MAINTAINER hello# 挂载目录
VOLUME /home/hello
# 创建目录
RUN mkdir -p /home/hello
# 指定路径
WORKDIR /home/hello
# 复制jar文件到路径
COPY ./hello.jar /home/hello/hello.jar
# 启动认证服务
ENTRYPOINT java ${JAVA_OPTS} -Dfile.encoding=utf-8 -jar hello.jar --spring.profiles.active=${SPRING_PROFILES_ACTIVE}

二、project.yaml怎么写呢?

apiVersion: apps/v1
kind: Deployment
metadata:name: hello-deploy #这里可以改成自己项目+deploynamespace: hello #这个命名空间可以改成自己的labels: #本发布app: hello-deploy #这里可以改成自己项目+deployversion: v1.0.0
spec:replicas: 1revisionHistoryLimit: 3selector:matchLabels: #需匹配资源app: hello #这里可以改成自己项目名version: v1.0.0template:metadata:labels: # 资源标签app: hello #这里可以改成自己项目名version: v1.0.0spec: # 资源规范containers:- name: hello #这里可以改成自己项目名image: 镜像地址imagePullPolicy: Alwaysenv:- name: JAVA_OPTSvalue: "-Xmx1024m -Xms512m"- name: SPRING_PROFILES_ACTIVEvalue: "test"resources:limits:cpu: 2memory: 2Girequests:cpu: 200mmemory: 640MilivenessProbe:httpGet:path: /healthCheck #这个地址必须要加入白名单,地址可以换成自己的地址port: 8089 #端口可以改成自己项目的端口scheme: HTTPinitialDelaySeconds: 60timeoutSeconds: 10periodSeconds: 30successThreshold: 1failureThreshold: 5readinessProbe:httpGet:path: /healthCheckport: 8089 #端口可以改成自己项目的端口scheme: HTTPinitialDelaySeconds: 60timeoutSeconds: 10periodSeconds: 30successThreshold: 1failureThreshold: 5ports:- name: httpcontainerPort: 8089 #端口可以改成自己项目的端口protocol: TCPimagePullSecrets:- name: hello-secret #secret的名字,这个是连接镜像仓库的秘钥名字

三、project-svc.yaml怎么写呢?

apiVersion: v1
kind: Service
metadata:name: hello-svc #这里可以改自己的项目名+svcnamespace: hello #这里可以改自己的命名空间
spec:type: NodePort #这里只能填NodePortselector:app: hello #这里可以改自己的项目名ports:- port: 8089 #应用的端口targetPort: 8089 #应用的端口nodePort: 32089 #映射端口,对外暴露的端口protocol: TCPname: restful

四、jenkins.sh脚本如何写?

#!/bin/bash# master pwd and ip
master_pwd='把应用程序推送到目标机器(部署的机器)密码'
master_ip=把应用程序推送到目标机器(部署的机器)的ip# full path
echo jar_path=${WORKSPACE}/${project_dir}${project_name}/target/${project_name}.jarif [ ! -f $WORKSPACE/$project_dir$project_name/target/$project_name.jar ];thenecho -------------------file not exists,path:${WORKSPACE}/${project_name}/target/${project_name}.jar-----------------------exit 1
fiecho cd ${WORKSPACE}/${project_dir}${project_name}/target/ #进入到该目录,下面会将Dockerfile复制到这个目录
cd $WORKSPACE/$project_dir$project_name/target/echo copy Dockerfile to target project
echo cp ${WORKSPACE}/${project_name}/k8s/* . #将Dockerfile文件复制到$WORKSPACE/$project_dir$project_name/target/
cp $WORKSPACE/$project_name/k8s/{project_name}/* .
#cp $WORKSPACE/k8s/$project_name/Dockerfile .# delete nerdctl images by id
image_id=$(nerdctl images | grep "${group_name}/${project_name}" | awk '{print $3}')
echo image_id=${image_id}
# if exists 
if [ -n "$image_id" ]; thenecho '--------------------rm images--------------------'echo nerdctl rmi -f ${group_name}/${project_name}:${version}nerdctl rmi -f ${group_name}/${project_name}:${version}
fi# delete none images
image_ids=$(nerdctl images | grep none | awk '{print $3}')
echo image_ids=${image_ids}
if [ -n "$image_ids" ]; thenecho '--------------------rm images--------------------'nerdctl images | grep nonenerdctl images | grep none | awk '{print $3}' | xargs nerdctl rmi
fiecho nerdctl build -t ${group_name}/${project_name}:${version} .
nerdctl build -t ${group_name}/${project_name}:${version} .echo nerdctl login #后面写镜像地址,登录到镜像
nerdctl login 镜像地址 -u 账号 -p 密码echo nerdctl push ${group_name}/${project_name}:${version}#将打包好的镜像推送到镜像仓库
nerdctl push ${group_name}/${project_name}:${version}echo sleep 5
sleep 5echo kubectl rollout restart deployment ${project_name}-deploy -n ${namesapce}#部署deploy
sshpass -p ${master_pwd} ssh root@${master_ip} "kubectl rollout restart deployment ${project_name}-deploy -n ${namesapce}"echo sleep 5
sleep 5echo delay 5 seconds, search: kubectl get pods -n ${namesapce} ...

五、如何在jenkins里面进行配置呢?

#!/bin/bash# set jenkins var, for jenkins will kill me .
BUILD_ID=dontKillMe# build project poms.
echo project build start,path:$WORKSPACE/pom.xml
mvn clean install -DskipTests -f $WORKSPACE/pom.xml# 分组名称(同一分组不用更改)
group_name='这里可以放镜像地址加命名空间,比如镜像地址是:hello.com/train'
# K8S命名空间名称(同一空间或项目不用更改)
namesapce='train'
# 项目目录,如果为空就不需要填写
project_dir=''
# 项目名称(必改)
project_name='hello'
# app version
version='v1.0.0'
# auto script path
auto_script_path='/home/docker/auto/srcipt/jenkins.sh'echo '--------------------jenkins build begin--------------------'
if [ -f $auto_script_path ];then# call auto script echo begin call linux auto script, filepath=$auto_script_pathsource $auto_script_path
else # auto script files not existsecho auto script files not exists, service interrupt, please check...echo filepath=$auto_script_pathexit 1
fi

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

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

相关文章

安装cuda、cudnn、Pytorch(用cuda和cudnn加速计算)

写在前面 最近几个月都在忙着毕业的事,好一阵子没写代码了。今天准备跑个demo,发现报错 AssertionError: Torch not compiled with CUDA enabled 不知道啥情况,因为之前有cuda环境,能用gpu加速,看这个报错信息应该是P…

React常用方法汇总【更新中】

文章目录 前言创建项目启动命令列表渲染父子组件传值useEffect 异步函数使用方法useEffect 异步函数清除方法控制组件显示隐藏axios 安装使用 前言 运行 react 需要先安装 node.js,具体安装步骤可以参考这篇文章 https://blog.csdn.net/weixin_43721000/article/de…

Vue65-vue-resource:ajax请求

vue-resource是vue的插件库,用vue.use(xxxx)使用插件。 1、安装 2、引入和使用 这个库,维护的频率不高了。还是建议使用:axios,vue-resource只是了解即可。

MySQL8,Navicat能登陆成功,密码却忘记了

执行成功的图: 以下为步骤:本文一共8个简单步骤。 环境:mysql8、window10、navicat11 1、打开本地电脑window10的命令窗(俗称黑窗口),windowR 2、输入regegit,回车,打开注册表 3、…

技术差异,应用场景;虚拟机可以当作云服务器吗

虚拟机和云服务器是现在市面上常见的两种计算资源提供方式,很多人把这两者看成可以相互转换或者替代的物品,实则不然,这两种资源提供方式有许多相似之处,但是也有不少区别,一篇文章教你识别两者的技术差异,…

【全文档】软件项目经理需要掌握的文档有哪些?

软件项目经理在项目管理过程中需要编写多种文档,以下是常见的十五个文档: 项目计划: 详细描述了项目的范围、时间、成本、资源、沟通计划等关键信息,是项目管理的核心文档。 需求文档: 记录了项目的业务需求、功能需求…

深入理解预处理

1.预定义符号 C语言设置了⼀些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。 __FILE__ //进⾏编译的源⽂件 __LINE__ //⽂件当前的⾏号 __DATE__ //⽂件被编译的⽇期 __TIME__ //⽂件被编译的时间 __STDC__ //如果编译器遵循ANSI C&…

3. ceph-mimic版本部署

ceph-mimic版本部署 一、ceph-mimic版本部署1、环境规划2、系统基础环境准备2.1 关闭防火墙、SELinux2.2 确保所有主机时间同步2.3 所有主机ssh免密2.4 添加所有主机解析 3、配置ceph软件仓库4、安装ceph-deploy工具5、ceph集群初始化6、所有ceph集群节点安装相关软件7、客户端…

LeetCode322.零钱兑换(一)

LeetCode刷题记录 文章目录 📜题目描述💡解题思路⌨C代码 📜题目描述 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。…

项目监督与控制

1.什么是项目过程度量?其方法有哪些? 项目过程度量是一种对项目执行过程中的活动和性能进行量化测量的方法。它涉及到收集、分析和解释项目数据,以便更好地理解项目的进度、质量和效率。过程度量的目的是提供关于项目健康状况的客观信息&…

代码随想录第28天|回溯算法

491. 非递减子序列 思路: 不可以排序, 否则会改变元素的顺序对收获的结果有要求, num.size() > 2, 且 num[i - 1] < num[i]需要进行去重, 不能使用排序后的方法去重每一层可用 unordered_set 去重组合问题, for 遍历需要标记起始位置 bug: 一定要先判断元素是否重复, …

使用CAPL创建系统变量之sysDefineNamespace

目录 0 前言 1 使用CAPL创建系统变量 0 前言 最近在项目中发现可以通过CAPL来创建系统变量&#xff0c;这样方法在一定程度上提高了代码的统一性和测试的便利性。想要加入HIL自动化测试群的小伙伴欢迎评论区留言或私信&#xff0c;让我们一起进步&#xff01; 1 使用CAPL创建…

染发膏粪大肠菌群检测 化妆品毒理学检测 功效测试

染发膏中粪大肠菌群的检测 染发膏中的粪大肠菌群检测是为了确保产品的卫生安全&#xff0c;因为粪大肠菌群通常存在于动物的肠道中&#xff0c;它们的存在可能表明产品受到了外部环境的污染。根据国家标准GB/T 7918.3-1987&#xff0c;对化妆品中粪大肠菌群的检测方法进行了规范…

【html】爱心跳动动画:CSS魔法背后的故事

效果展示&#xff1a; 代码介绍&#xff1a; 爱心跳动动画&#xff1a;CSS魔法背后的故事 在前端开发中&#xff0c;CSS不仅仅是一种用于控制网页样式的工具&#xff0c;它也是一种表达创意和想象力的艺术手段。今天&#xff0c;我要为大家介绍一段使用CSS实现的爱心跳动动画…

【bug】配置SpringCloudAlibaba AI的maven依赖问题

问题描述 尝鲜alibaba的ai模块&#xff0c;maven依赖一直报找不到包&#xff0c;报错如下 Unresolved dependency: org.springframework.ai:spring-ai-core:jar:0.8.1原因分析&#xff1a; 由于是按照官方文档配置的&#xff0c;所以检查了很多遍maven配置&#xff0c;加上去…

【Docker】——安装镜像和创建容器,详解镜像和Dockerfile

前言 在此记录一下docker的镜像和容器的相关注意事项 前提条件&#xff1a;已安装Docker、显卡驱动等基础配置 1. 安装镜像 网上有太多的教程&#xff0c;但是都没说如何下载官方的镜像&#xff0c;在这里记录一下&#xff0c;使用docker安装官方的镜像 Docker Hub的官方链…

内外网映射访问内网服务器

如果本地有公网ip&#xff0c;比如连接的宽带有公网ip&#xff0c;可以直接通过路由配置转发就行了&#xff0c;如果本地没有公网ip&#xff0c;那就需要通过下面这种方式来访问内网服务器了。 1&#xff1a;首先内网服务器需要连接外网&#xff0c;可以通过网线或者WiFi都可以…

小林图解系统-二.硬件结构 2.4CPU缓存一致性

CPU Cache的数据写入 CPU和内存的访问性能越差越大&#xff0c;于是在CPU内部嵌入CPU Cache(高速缓存)。 CPU Cache由Cache Line组成&#xff0c;Cache Line由头标志Tag数据块Data Block组成。 如果数据写入Cache&#xff0c;内存和Cache相对应的数据将不同&#xff0c;需要…

Redis-五种数据结构之列表(ziplist、quicklist)

列表 文章目录 列表压缩列表-ziplistziplist 定义级联更新 快速列表-quicklistquicklistNode 定义quicklist 定义quicklist常用操作其他操作quicklist 相对于普通链表优点quick应用场景在redis 中使用quicklist 列表数据类型可以存储一组按插入顺序排序的字符串&#xff0c;他很…

昇思大模型学习·第一天

mindspore快速入门回顾 导入mindspore包 处理数据集 下载mnist数据集进行数据集预处理 MnistDataset()方法train_dataset.get_col_names() 打印列名信息使用create_tuple_iterator 或create_dict_iterator对数据集进行迭代访问 网络构建 mindspore.nn: 构建所有网络的基类用…