【K8S运维知识汇总】第5天3: 使用Jenkins进行持续构建交付dubo服务的提供者

网友投稿 703 2022-12-01

k8s运维知识汇总】第5天3: 使用Jenkins进行持续构建交付dubo服务的提供者

【K8S运维知识汇总】第5天3: 使用Jenkins进行持续构建交付dubo服务的提供者

docker在执行的时候执行entrypoint.sh,这是一个shell脚本,docker进程在执行这个shell脚本的话,会给脚本分配一个pid,这个pid是1,docker应该是维持一个pid等于1 的进程,一定在前台运行,生命周期在running状态

如果不用exec直接在shell脚本里写,java -jar,shell脚本就退出了,pid=1进程就退出了,切不到java进程,docker容器就退出了,docker容器就从running变成exited 这是shell脚本的知识,如果写了exec,就相当于exec后面的东西,代替了当前的shell脚本,从shell进程变成了pid等于1 的进程,java -jar启动的程序,dubbo程序变成了前台运行,且pid=1

不用exec,实际上相当于在entrypoint.sh弄了一个子进程,类似开了一个终端,执行了一个ps-a之类的,类似从init进程,fork出来的一个子进程。exec就是把当前的进程号给他了,到java进程手里了,这样就让写的最根本原因,为了让。docker容器生命周期,要保持在running状态而不会变成exec状态。这个是docker容器应用里比较常用的方式。nohup是后台,所以要exec

现在就是把base里底包做出来了,以后可以做若干底包

有maven软件,Dubbo服务的底包了, 现在可以配置流水线,流水线的方式去构造

需要保留多少次老的构建discard old builds,保留3天和30个

这个一个工程是参数化构建的,

需要加10个参数,第一个参数是string parameter,参数类型是string,名字是app_name,默认值default value,description描述/ trim the string,会自动把你填的空格删除

第二个参数类型是string,字符串类型的参数,名字是image_name,上面是docker提供者的一个项目,下面是一个镜像

第三个参数类型仍然是字符串,git版本控制仓库的地址,比如dubbo-demo-service的项目的地址,在gitee上

加不加.git其实无所谓

第四个也是字符串类型的参数。项目在git中央仓库所对应的,分支或者版本号,这个项目在git里有分支,master和apollo

要拉到本地就checkout 版本号。这样才能去编译出来指定的哪一版本代码,要制定就找commit id,是最标准的唯一的。git上的tag其实可以篡改的,所以commit id比较好

在graph上就可以看到每一次提交对应一个唯一的commit id,是不能被篡改的

可以checkout 分支,但是在构建的时候是分支上的最新代码,

第5个参数仍然是字符串,名字add_tag,给docker镜像增加标签,要拼一个git_ver作为标签拼进来,再加上一个时间戳

第6个参数,mvn_dir,在哪一个目录去执行对这个项目的编译操作,/就是在当前根目录

第7个参数仍然是string parameter,编译完成项目后,产生的jar包或者war包,所在的目录

第8个参数仍然是string类型,mvn_cmd执行编译所要的命令

第9个参数,是choice类型,base_image,可以选择之前做的base/jre7:7u80和base/jre8:8u12,这些就是项目使用的docker底包

第10个参数也是choice parameter,使用的maven软件版本

做流水线就需要10个参数,app_name,image_name,git_repo,git_ver,add_tag,mvn_dir,target_dir,_mvn_cmd,base_image,maven

还需要些pipeline-script

定义了一些stage步骤

实际上执行的是shell脚本

把项目clone到了这里

最后剪出分支

build,也是cd到工作目录,执行后面的/var/jenkins_home/maven-版本

也就是在这里

下来就是packages打包,用maven编译好项目,就需要去打包,把所有产生的jar包挪到指定文件夹里

下面要写dockerfile了

这个dockerfile是在jenkins流水线脚本自己写出来的

整体拼成以恶搞docker的tag,然后push到docker仓库

往这里贴

保留3天30份

10个参数

真正构建项目

流水线想要构架,需要填写10个参数,就会按照script进行构建

harbor里可以创建app私有仓库

拉取master分支的最新代码,时间戳就是19年12月1日_12点,编译地址是在项目根目录/,产生的目录是在dubbo-server/target,产生的jar包。

用的底包是base/jre8:8u12

开始第一次构建,这个10个参数也是为了避免甩锅

点进去

第一次编译不成功很正常,因为要去国外的org拖jar包

常用的mvn命令,clean是把本地缓存清理掉。package 和install是对应要不要保存的问题,install就保存在本地,package是不保留在本地,-E只输出错误,-Q是静默的(就是在jenkins里根本看不到输出

用了流水线,就可以把200多个项目抽象成一条流水线,传不同的参数,现在dubbo服务交付提供的时候,交付dubbo服务的monitor,最后交付dubbo服务的消费者,然后dubbo服务这一套就交付到k8s里了

第一次构建比较慢,第二次就可以用本地缓存了,maven软件在/root/m2/repostry,很多jar包就不用去网上-了

编译好后,可以推到harbor仓库里,对应的docker镜像应该是(镜像的4个组成部分,registry(harbor.od.com),repository(app),下的dubbo-demo-service:tag(master分支_191201_1200)

app仓库里会出现这么一个docker镜像

进入下个阶段,docker build。jenkins调用build的时候,使用的宿主机的docker引擎,

push完以后就完成了

发现变蓝了

docker镜像就来了

点进去可以看到tag

有了镜像,需要交付到k8s里,需要配置资源配置清单

去做资源配置清单。只需要一个dp.yaml

不需要svc。也不需要ingress

注意改时间戳,打这个tag是为了方便找出问题

要发到namespace里,app,把这个app namespace创建出来

紧跟着要在这个app里加入一个secret,把app名称空间和secret创建出来了

必须有这个,不然没法从private的仓库里拉镜像

label随便打。spec里有container,对应的镜像就是harbor.od.com/app/dubbo-demo-service:master_192101_1200.,ports是暴露出来的端口,是20880

env很重要,制作底包的时候,在entrypoint.sh要接收一个jar_ball环境变量,通过这个传到docker的环境变量里。

云原生的程序,配置一般通过三种方式,1.通过环境变量,2.通过启动参数,3.通过启动名称空间

image拉取策略有三种,always永远都去远程仓库拉,never永远不去远程仓库拉,ifnotpresent,如果没有再去远程仓库拉。

service account不配置,默认就是defaulte。run asuser指的是用root方式启动

在启动应用配置清单,先去配置zk

连接到zk里

根里只有zookeeper,没有dubbo

去应用dubbo服务提供者

查看是否很顺利的交付到k8s里,在app名称空间里

这个pod已经起来了

最后会提示dubbo服务已经启动

这样就在k8s里完美交付了一个dubbo服务的提供者,用jenkins去持续构建,把dubbo服务的提供者列出来,通过资源配置清单,交付到k8s里,去zk列出来list,dubbo服务的接口

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:IDEA 2021.2 激活教程及启动报错问题解决方法
下一篇:【搞定Go语言】第2天11:Go语言基础之包
相关文章

 发表评论

暂时没有评论,来抢沙发吧~