一、CI CD 发展
1、Docker、K8s之前
2、有了Docker、K8s之后
二、docker+k8s的CICD
1、环境准备
git代码仓库、java环境、Maven环境、git环境、Jenkins环境。
不清楚的参考:
2、环境检查
git版本
git --version
java 版本
java -version
maven版本
mvn -version
jenkins启动
nohup java -jar jenkins.war --httpPort=8080 &
三、开始
1、创建job
2、拉代码
3、Maven构建
sh "mvn -pl web-demo -am clean package"
4、制作镜像
构建失败
重新构建
再次构建
push的时候失败了,没有权限。
再次重新构建
如上,构建镜像成功了。
5、使用k8s进行发布
使用模板,提取变量。
基本的配置文件看下。
原始配置文件如下:
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
spec:
selector:
matchLabels:
app: web-demo
replicas: 1
template:
metadata:
labels:
app: web-demo
spec:
containers:
- name: web-demo
image: hub.mooc.com/kubernetes/web:v1
ports:
- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
name: web-demo
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: web-demo
type: ClusterIP
---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-demo
spec:
rules:
- host: web.mooc.com
http:
paths:
- path: /
backend:
serviceName: web-demo
servicePort: 80
修改后如下:
#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{name}}
spec:
selector:
matchLabels:
app: {{name}}
replicas: 1
template:
metadata:
labels:
app: {{name}}
spec:
containers:
- name: {{name}}
image: {{image}}
ports:
- containerPort: 8080
---
#service
apiVersion: v1
kind: Service
metadata:
name: {{name}}
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: {{name}}
type: ClusterIP
---
#ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{name}}
spec:
rules:
- host: {{host}}
http:
paths:
- path: /
backend:
serviceName: {{name}}
servicePort: 80
取镜像名:
在之前的脚本build-image-web.sh加镜像名输出。
deploy.sh的 脚本内容:
拷贝模板,进行替换。
进行apply
进行构建一下。
但是上面报了个错误
在脚本加输出,进行排查下
重新构建。
在apply时候出问题了。
使用命令进行测试
因为我们这台服务器没有配置kubectl,我们这台服务器启动了jenkins是8080,而如果没有配置kubectl访问的就是本地的8080端口,冲突了。
我们到node-1上拿到/root/.kube/config的配置文件
在node-2上把内容粘贴进去。
然后再试一下 kubectl命令
kubectl get pods
这下就有了,重新构建一下。
我们查看一下版本。
kubectl get deploy
kubectl get deploy k8s-web-demo -o yaml
6、最后一步,健康检查
把健康检查的步骤加进去。
vi deploy.sh
先去看一下。
kubectl get deploy k8s-web-demo -o yaml
通过如下命令获取:
添加标记
数组加IFS=","
过5秒,保证执行了apply。
sleep 5
还有一种思路使用这个,每次这个数都会变的。
最后再次跑一遍。