Kubernetes11:【持续集成】CICD

一、CI CD 发展

1、Docker、K8s之前

在这里插入图片描述

2、有了Docker、K8s之后

在这里插入图片描述

二、docker+k8s的CICD

1、环境准备

git代码仓库、java环境、Maven环境、git环境、Jenkins环境。
不清楚的参考:

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
在这里插入图片描述
还有一种思路使用这个,每次这个数都会变的。

在这里插入图片描述
最后再次跑一遍。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40612128/article/details/123579475