

k8s+jenkins实现自动化部署应用至k8s集群-Jie
source link: https://blog.51cto.com/14234542/2495985
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1.jenkins环境准备并启动jenkins服务
1)jdk环境配置
[root@centos7 ~]# ll /app/

[root@centos7 ~]# cat /etc/profile | tail -n3 #jdk的环境变量
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar
2)准备好jenkins启动的war包
[root@centos7 war]# ll

3)查看jenkins的启动脚本
[root@centos7 war]# cat start.sh
4)启动jenkins
[root@centos7 war]# ./start.sh && tailf test.log

5)在数据目录修改hudson更新url,改为国内url,避免jenkins无法启动
[root@centos7 ~]# cat .jenkins/hudson.model.UpdateCenter.xml

6)准备好主机解析或添加到DNS服务器
[root@centos7 ~]# cat /etc/hosts

7)web端访问jenkins界面

8)创建一个jenkins_project项目,并编辑配置


9)在jenkins的后端准备好自动化部署脚本k8s_auto_deploy.sh,事先做好公私钥认证,使得jenkins能够访问k8s-master-1
[root@centos7 ~]# cat /data/script/k8s_auto_depoy.sh
#!/bin/bash
[email protected]:middle-supoort-project/middle-compose-service.git
Starttime=`date +"%Y-%m-%d_%H-%M-%S"`
Method=$1
Branch=$2
t1=`date +"%Y-%m-%d %H:%M:%S"`
#代码克隆至jenkins后端
clone_code(){
cd /root/.jenkins/workspace/jenkins_project && git clone -b $Branch ${URL}&& echo "Clone Finished"
}
#代码打包压缩并远程推送至k8s-master-1的nginx镜像制作目录
Pack_scp(){
cd /root/.jenkins/workspace/jenkins_project/middle-compose-service/ && tar cvzf nginx.tar.gz * && echo Package Finished
scp nginx.tar.gz root@k8s-master-1:/data/Dockerfile/nginx/ && ssh root@k8s-master-1 'cd /data/Dockerfile/nginx/ && tar xvf nginx.tar.gz &&rm -f nginx.tar.gz'
}
#远程操作k8s-master-1节点,进行镜像制作并推送至harbor镜像仓库
build_iamge(){
ssh root@k8s-master-1 "cd /data/Dockerfile/nginx/ && ./build.sh ${Starttime} && echo 'build_image and push_harbor success!'"
}
#对k8s集群中的nginx的pod应用进行升级
app_update(){
ssh root@k8s-master-1 "sed -ri 's@image: .*@image: k8s.harbor.cn/base_application/nginx:${Starttime}@g' /data/mainfest/nginx.yaml"
ssh root@k8s-master-1 "kubectl set image deployment/nginx-deployment nginx-container=k8s.harbor.cn/base_application/nginx:${Starttime} -n default --record=true"
t2=`date +"%Y-%m-%d %H:%M:%S"`
start_T=`date --date="${t1}" +%s`
end_T=`date --date="${t2}" +%s`
total_time=$((end_T-start_T))
echo "deploy success,it has been spent ${total_time} seconds"
}
#k8s集群中的pod应用进行回滚
app_rollback(){
ssh root@k8s-master-1 'kubectl rollout undo deployment/nginx-deployment -n default'
}
#进行k8s集群自动部署的主函数
main(){
case $Method in
deploy)
clone_code
Pack_scp
build_iamge
app_update
;;
rollback)
app_rollback
;;
esac
}
#执行主函数命令
main $1 $2
10)将jenkins的公钥配置到gitlab服务的web端,使得jenkins可以直接拉取代码无需认证
[root@centos7 ~]# cat .ssh/id_rsa.pub

2.k8s的master节点的准备
1)准备存放nginx应用镜像制作的路径,当前目录为空,其代码配置文件均已放在gitlab服务器中
[root@k8s-master-1 ~]# ll /data/Dockerfile/nginx
total 0
2)拉取harbor中的镜像的认证文件
[root@k8s-master-1 ~]# ll /etc/docker/certs.d/k8s.harbor.cn/harbor_ca.crt
3)k8s集群中nginx的yaml清单文件
[root@k8s-master-1 data]# vim /data/mainfest/nginx.yaml

4)通过nginx.yaml文件启动pod资源和service资源
[root@k8s-master-1 ~]# kubectl apply -f /data/mainfest/nginx.yaml

5)查看nginx的pod应用以及service资源是否启动
[root@k8s-master-1 ~]# kubectl get pod -n default
6)查看service资源
[root@k8s-master-1 ~]# kubectl get service -n default

7)web端访问

3.将nginx的镜像构建等相关配置文件上传到gitlab
1)以下为nginx的镜像配置文件,均在develop分支下

2)制作nginx镜像的Dockerfile文件

3)build.sh镜像的构建及自动推送至harbor的脚本

4)index.html页面文件

5)nginx的主配置文件

6)nginx的server访问路径配置文件

3.立即构建jenkins工程,实现自动化部署nginx应用至k8s集群
1)以上均准备完毕,开始构建jenkins工程

2)选择相应的分支后构建方法

3)开始构建工程

4)查看控制输出

5)查看k8s当前正在运行nginx的pod容器
[root@k8s-master-1 ~]# kubectl get pod -n default

6)再查看当前正在运行pod的镜像源地址,可见被自动更新
[root@k8s-master-1 ~]# kubectl describe pod nginx-deployment-b856886fb-9mzrm -n default

7)查看nginx的yaml清单文件,也被自动修改
[root@k8s-master-1 ~]# cat /data/mainfest/nginx.yaml | grep "image:.*"
8)查看harbor镜像仓库,查看构建的新镜像是否成功推送到此harbor仓库中

9)web端访问更新的nginx版本,可见实现自动化更新

10)假设开发人员将gitlab中的index.html的版本更新为1.13版

11)再次构建发布更新

12)查看控制台输出结果

13)web端访问nginx应用

4.若当前版本有问题,需要回滚,执行以下回滚操作
1)jenkins的控制台选择rollback回滚

2)回滚过程的日志查看

3)web端验证访问,可见回滚成功

Recommend
-
29
环境准备我们使用的k8s和ceph环境见:https://blog.51cto.com/leejia/2495558https://blog.51cto.com/leejia/2499684ECK简介ElasticCloudonKubernetes,这是一款基于KubernetesOperator模式的新型编排产品,用户可使用该产品在Kubernetes上配置、管理和运行Elastic...
-
20
jenkins+gogs实现自动化部署(序) 距离上次博客已经有一年多的时间了,不想给自己找太多的理由,总结一句还是太懒了。去年5月份换了家传统行业的公司,刚来就分配到了一个项目组负责移动端的项目,跟之前的开发模式不太一样,因为是甲方公司...
-
9
jenkins+gogs实现Android项目自动化部署(三) 上一篇项目主要介绍了jenkins+gogs实现JavaWeb项目自动化部署,这一篇重点介绍下Android项目的自动部署。另外注意下这一篇主要介绍在宿主机(jenkins安装所在的服务器)上打包,也就是远程打包部署,可能...
-
21
jenkins+gogs实现JavaWeb项目自动化部署(二) 上一篇文章主要介绍了jenkins和gogs的安装,这一篇重点介绍如何实现JavaWeb项目的自动化部署。 我们的目标是把war包传到应用服务器上,然后关闭tomcat,再启动tomcat。先看下面我们的打包...
-
17
K8s 实战之概念、集群部署与服务配置王下邀月熊公众号:某熊的技术之路本文是对于
-
18
jenkins+gogs实现JavaWeb项目自动化部署(一) 关于jenkins和gogs这两个环境的搭建我这里简单的介绍下,以下均在centos7环境下。 一、jenkins安装 我是拿的这篇博客的
-
5
jenkins+gogs实现iOS项目自动化部署(四) 本篇是CI系列的最后一篇,主题是介绍jenkins如何实现iOS项目的自动化部署,在上一篇jenkins+gogs实现Android项目自动化部署(三)...
-
7
windows下jenkins+git+maven+tomcat实现自动化部署 - 社会小青年丶的个人空间 - OSCHINA - 中文开源技术交流社区 ...
-
6
最近在学习如何使用jenkins结合阿里云k8s自动化集成和部署springcloud微服务和前端next.js项目,现在记录下来分享给大家,文章有什么不妥的地方,希望大佬们批评指正。DevOps CI/CD 流程
-
7
因为之前写过基于K8S部署jenkins master/slave平台,在这个的基础上构建微服务到K8S集群中 Jenkins-slave构建微服务项目到K8S集群 1、微服务项目上传到git仓库...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK