k8s部署-30-k8s与cicd持续集成、交付、部署的总流程(五)

网友投稿 692 2022-11-05

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

k8s部署-30-k8s与cicd持续集成、交付、部署的总流程(五)

k8s-deploy

这里我们也使用脚本来进行配置,那么首先我们是不是一样的工作,先修改流水线上的配置呢?流水线修改如下:

node { env.BUILD_DIR = "/root/script/namespace" env.MODEL = "springboot" stage('Git') { for display purposes git "https://gitee.com/xuexi100/yanshi.git" } stage('Maven') { sh "cd ${MODEL}; mvn clean; mvn package" } stage('build-image') { sh "sh root/script/build-springboot.sh" } stage('k8s-deploy'){ sh "sh root/script/k8s-deploy.sh" }}

老样子,梳理脚本思路,首先我们需要一个k8s的yaml文件,对吧,而且我们还需要一个镜像的名字,但是我们镜像的名字是“build-springpoot”中生成的,我们该如何获取呢?先不管,首先知道我们需要这两个东西,然后再解决。

1、k8s的yaml文件  在这里我们直接复制过来,然后把里面的相关值,配置成变量,就可以多次使用了。2、image的name  这里的话,我们需要修改上个脚本,将镜像名字放到一个文件中,这样子我们是不是就可以获取到了。

那么先修改“build-springpoot.sh”脚本吧。

# 在脚本文件的最后添加如下信息# 获取镜像名字echo ${Image_Name} > root/script/IMAGE_NAME

然后搞定yaml模板,把之前文章中的这个yaml拿过来稍微改动一下,如下。

[root@node1 ~]# cd root/script/[root@node1 script]# mkdir template[root@node1 script]# cd template/[root@node1 template]# #deployapiVersion: apps/v1kind: Deploymentmetadata: name: {{NAME}}spec: selector: matchLabels: app: {{NAME}} replicas: 1 template: metadata: labels: app: {{NAME}} spec: containers: - name: {{NAME}} image: {{IMAGE}} ports: - containerPort: 8080---#serviceapiVersion: v1kind: Servicemetadata: name: {{NAME}}spec: ports: - port: 80 protocol: TCP targetPort: 8080 selector: app: {{NAME}} type: ClusterIP---#ingressapiVersion: extensions/v1beta1kind: Ingressmetadata: name: {{NAME}}spec: rules: - host: {{HOST}} http: paths: - path: backend: serviceName: {{NAME}} servicePort: 80[root@node1 template]#

可以看到我们在构建模板中设置了三个变量,其中有一个host,我们貌似没有地方可以获取,而且他是可以自定义的,那么我们就还需要修改下流水线配置如下,再新建个环境变量:

node { env.BUILD_DIR = "/root/script/namespace" env.MODEL = "springboot" env.HOST = "springboot.yunweijia.com" stage('Git') { for display purposes git "https://gitee.com/xuexi100/yanshi.git" } stage('Maven') { sh "cd ${MODEL}; mvn clean; mvn package" } stage('build-image') { sh "sh root/script/build-springboot.sh" } stage('k8s-deploy'){ sh "sh root/script/k8s-deploy.sh" }}

然后我们开始写脚本内容:

[root@node1 template]# cd ..[root@node1 script]# pwd/root/script[root@node1 script]# [root@node1 script]# vim k8s-deploy.sh#!/bin/bashname=${JOB_NAME}image=$(cat root/script/IMAGE_NAME)host=${HOST}# 输出变量echo "deploying~~~"echo "k8s_NAME: ${name}"echo "k8s_IMAGE: ${image}"echo "k8s_HOST: ${host}"# 复制yaml文件过来rm -f springboot.yamlcp root/script/template/springboot.yaml .# 替换变量sed -i "s,{{NAME}},${name},g" springboot.yamlsed -i "s,{{IMAGE}},${image},g" springboot.yamlsed -i "s,{{HOST}},${host},g" springboot.yaml# 使配置生效kubectl apply -f springboot.yaml# 查看yaml文件cat springboot.yaml[root@node1 script]# chmod +x k8s-deploy.sh

整理完毕后我们去jenkins上“Build Now”一下子,看看结果:

可以看到是没问题的,然后我们再去查看下这个pod是否存在:

[root@node1 script]# kubectl get podNAME READY STATUS RESTARTS AGEdeploy-springboot-5cf68f977b-rrcc2 1/1 Running 0 4m10snginx-ds-q2pjt 1/1 Running 16 10dnginx-ds-zc5qt 1/1 Running 21 16d[root@node1 script]#

说明是没有问题的。

health check

接下来我们就应该配置健康检查了是吧,这里我们就不新建脚本了,就集合在上一个"k8s-deploy.sh"这个脚本中吧,集成结果如下:

#!/bin/bashname=${JOB_NAME}image=$(cat /root/script/IMAGE_NAME)host=${HOST}# 输出变量echo "deploying~~~"echo "k8s_NAME: ${name}"echo "k8s_IMAGE: ${image}"echo "k8s_HOST: ${host}"# 复制yaml文件过来rm -f springboot.yamlcp /root/script/template/springboot.yaml .# 替换变量sed -i "s,{{NAME}},${name},g" springboot.yamlsed -i "s,{{IMAGE}},${image},g" springboot.yamlsed -i "s,{{HOST}},${host},g" springboot.yaml# 使配置生效kubectl apply -f springboot.yaml# 查看yaml文件cat springboot.yaml# 健康检查sleep 5success=0count=100IFS=","while [ ${count} -gt 0 ]do replicas=$(kubectl get deploy ${name} -o go-template='{{.status.replicas}},{{.status.updatedReplicas}},{{.status.readyReplicas}},{{.status.availableReplicas}}') echo "kubectl get deploy ${name} -o go-template='{{.status.replicas}},{{.status.updatedReplicas}},{{.status.readyReplicas}},{{.status.availableReplicas}}'" echo "replicas is ${replicas}" shuzu=(${replicas}) if [ "${shuzu[0]}" == "${shuzu[1]}" -a "${shuzu[1]}" == "${shuzu[2]}" -a "${shuzu[2]}" == "${shuzu[3]}" ];then echo "Health check Successful!" success=1 break fi ((count--)) sleep 2doneif [ ${success} -ne 1 ];then echo "Health check Failed!"fi

然后我们再次在jenkins上构建一下,如下:

至此,cicd结束。

往期推荐k8s系列-06-containerd的基本操作一文掌握oracle19c之离线情况下命令行安装和建库(下)- 本文干货满满,记得收藏哈11-docker系列-docker之compose安装和相关命令

上一篇:软件测试培训之用例设计步骤
下一篇:软件测试培训之测试用例设计的原则
相关文章

 发表评论

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