更多信息请查看公众号原文:https://mp.weixin.qq.com/s/Q3knDEa6etAM5LZ-ULAeSA
?上一章节已经完成了一个最简单的应用的开发,现在看看怎么把这个应用部署到K8S.
检查Jenkins配置
1.1 Maven Integration, Pipeline Maven Integration, Publish over SSH以及Cucumber reports是否已经安装成功,如果没有请安装
1.2 JDK配置和Maven
进入Global Tool Configuration
Cucumber插件:
1.3 检查Jenkins URL
进入Configure System:
2. 创建Job
build完之后可以看到哪些功能是正常或者不正常的:
3. SCP免密传输配置
在需要复制到目标机器上,设置sshd config:
sudo vim /etc/ssh/sshd_config
让后重启sshd服务:sudo service sshd restart
然后重新设置一下root的密码:sudo passwd
尝试一下scp:sudo scp id_rsa.pub root@192.168.0.10:/root/.ssh/id_rsa.pub.minikube
4. SSH免密登陆配置
由于Jenkins编译完成后,需要上传到Minikube那台机器进行部署,所以在Jenkins那台机器中需要设置免密登陆,我需要从192.168.0.5免密登陆到192.168.0.10:
a. 在远程服务器192.168.0.10上执行:ssh-keygen -t rsa
.ssh目录权限设置为700:
chmod -R 700 .ssh/ --一定要700哦
b. 在192.168.0.10 /root/.ssh目录下执行:
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys --一定要600哦
c. 把远程服务器的id_rsa.pub拷贝到192.168.0.5本地机器上,并将其内容追加到本地机器的authorized_keys中:
scp id_rsa.pub root@192.168.0.5:/root/.ssh/id_rsa.pub.010
cat id_rsa.pub.010 >> authorized_keys
d. 发送authorized_keys到192.168.0.5
scp authorized_keys root@192.168.0.5:/root/.ssh/
e. 重新把本地的authorized_keys上传到远程服务器
scp authorized_keys root@192.168.0.10:/root/.ssh/
或者:ssh-copy-id root@192.168.0.10
authorized_keys中的内容是客户端的public key中的内容。
f.最后重启一下把ssh重启一下吧,下图免密登陆以及免密scp成功:
5. 设置免密切换账户
由于我默认登陆的账户是czy, 需要用root进行操作。
sudo vim /etc/sudoers
在root用户下面添加一个当前账户:
切换用户:sudo -s
6. 手动部署
idea安装docker和k8s插件,docker file和k8s部署文件有语法高亮。
Dockerfile:
OK,在利用Jenkins自动化部署之前,我们看看怎么把应用构建成镜像,推送镜像,拉取镜像,然后分别用Docker运行应用和K8S里部署应用。
Jenkins编译完成后,到Jenkins的工作目录下可以看到我们的Jar包和相关的项目文件,我们把相关文件scp到K8S的那台机器上:
cd /var/lib/jenkins/workspace/k8s-cicd-demo/target
scp k8s-cicd-demo-0.0.1-SNAPSHOT.jar root@192.168.0.10:/usr/local/k8s-workspace/docker/
cd /var/lib/jenkins/workspace/k8s-cicd-demo/deployment
scp -r docker root@192.168.0.10:/usr/local/k8s-workspace/
在K8S的机器上可以看到如下文件:
在Docker file目录下执行:
docker build -t registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 . (不要忽略最后一个点),然后可以看到镜像已经生成啦:
sudo docker tag 510093dbe4bf registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##打tag
sudo docker login --username=465230373@qq.com registry.cn-hangzhou.aliyuncs.com --password Milenfan123 #登陆阿里云镜像服务
sudo docker push registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##推送镜像
https://cr.console.aliyun.com/repository/cn-hangzhou/k8simages_jo ##登陆阿里云查看镜像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##拉取镜像
docker run -d --name k8s-cicd-demo -p 10000:9999 registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##docker运行服务(如果容器已存在可以用docker rm k8s-cicd-demo 删除)
docker logs -f --tail=5000 9bb33e4b0ced ##查看日志
已经看到已经运行了,访问结果如下:
到目前为止,Docker运行应用没有问题,现在我们先把这个容器删除掉:
docker stop k8s-cicd-demo ##停止容器
docker rm k8s-cicd-demo ##删除容器
好,现在继续看看部署到K8S的情况,我们切换到k8s目录,我的部署文件是这样的:
kubectl create -f deployment.yaml ##部署应用
kubectl create -f service.yaml ##暴露服务
kubectl get deployment -o wide ##查看已经部署的应用
kubectl get svc -o wide ##查看已经暴露的服务
尝试访问一下服务:
到此为止,手动把应用部署到K8S也没有问题!如果部署过程中有什么问题,下面命令可能有用哈,先留着:
kubectl get deployment -o wide --查看已经部署的应用
kubectl delete deployment k8s-cicd-demo-deployment --删除deployment
kubectl get svc -o wide --查看service
kubectl delete svc k8s-cicd-demo-service --删除服务
kubectl describe svc k8s-cicd-demo-service --查看服务
kubectl get pod -o wide --查看pod
kubectl describe pod k8s-cicd-demo-deployment-7f56f796f8-f6rrk --查看pod
kubectl logs -f k8s-cicd-demo-deployment-79c66b55f5-6xrzk --查看pod日志
kubectl get endpoints -o wide --查看endpoint
7.自动部署
既然手动部署没有问题,那我们继续看怎么实现自动部署吧,这时候主要的功夫应该是写Shell脚本了吧。。。emm,自动部署需要在项目构建完成后执行相关的脚本:
下面主要看一下k8s-cd.sh这个脚本
最后,由于跑BDD之前需要把项目部署好,为了不写那么多shell脚本,最终修改了Jenkins配置,并且由一个Jenkins Job变成了两个,下面是k8s-cicd-demo的主要配置:
下面是对应的k8s-cicd-demo-ft的主要配置:
最后,看一下最终结果吧:
点击k8s-cicd-demo-ft可以查看测试的结果:
打开浏览器访问:
至此,一个简单的CICD的大概流程已经介绍完毕,也成功实现了这个demo项目的自动化部署以及自动化测试。
原文:https://www.cnblogs.com/jovic/p/13649601.html