gitlab + Jenkins + harbor +k8s 实现 CICD 流程

项目架构


gitlab


配置 3 个 tag 对应 3 个版本的代码

v1.0 是魂蛋蛋

v2.0 是原谅我这一生不羁放纵爱自由

v3.0 钟声响起归家的信号


Jenkins


1、配置任务
1.1 设置 根据 tag 进行更新版本


1.2 配置源码 与 分支!!! 重点,指定分支的函数坑了我好长时间


1.3 设置 webhook ,只要变更代码 就立即触发 Jenkins


1.4 执行 shell 命令 目录是/var/lib/Jenkins/workpace/xiaobawang
在 k8s 中部署 deployment 与 svc

cd xiaobawang/xiaobawang-v1.0
docker build -t harbor250.oldboyedu.com/greytracks/xbw:${version}   .
docker login -u admin -p 123456 harbor250.oldboyedu.com
docker push  harbor250.oldboyedu.com/greytracks/xbw:${version}

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cicd-xbw
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: xbw
  template:
    metadata:
      labels:
        apps: xbw
    spec:
      containers:
      - name: xbw
        image: harbor250.oldboyedu.com/greytracks/xbw:${version}
        imagePullPolicy: Always

---

apiVersion: v1
kind: Service
metadata:
  name: svc-xbw
spec:
  # 指定Service的类型
  type: NodePort
  # 基于标签关联后端的Pod
  selector:
    apps: xbw
  # 配置端口映射
  ports:
      # 端口使用的协议,支持TCP,UDP,SCTP,若不指定则默认为TCP
    - protocol: TCP
      # 指定Service的端口号
      port: 80
      # 指定关联后端Pod的端口号
      targetPort: 80
      # 默认在(30000-32767之间)
      nodePort: 9999

EOF

kubectl rollout restart deployment/cicd-xbw
kubectl get pods -o wide 


任务配置完成 ,接下来是在 Jenkins 中部署 kubectl 与 添加 k8s 的认证文件才能执行命令


2、下载 kubectl 工具

链接: https://pan.baidu.com/s/1csKL-jWuoiQZbba3DwF93w 提取码: 2jr5 
mv kubectl-1.23.17 kubectl
chmod +x kubectl 
mv kubectl /usr/local/bin/kubectl


3、新增~/.kube/config 文件

mkdir -p ~/.kube/
scp 10.0.0.231:/root/.kube/config  ~/.kube/
kubectl version

#result
#Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.17", GitCommit:"953be8927218ec8067e1af2641e540238ffd7576", GitTreeState:"clean", BuildDate:"2023-02-22T13:34:27Z", GoVersion:"go1.19.6", Compiler:"gc", Platform:"linux/amd64"}
#Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.17", GitCommit:"953be8927218ec8067e1af2641e540238ffd7576", GitTreeState:"clean", BuildDate:"2023-02-22T13:27:46Z", GoVersion:"go1.19.6", Compiler:"gc", Platform:"linux/amd64"}


harbor


Jenkins 的 shell 命令 将 dockfile 推送到 harbor 中

docker build -t harbor250.oldboyedu.com/greytracks/xbw:${version}   .
docker login -u admin -p 123456 harbor250.oldboyedu.com
docker push  harbor250.oldboyedu.com/greytracks/xbw:${version}


k8s

几乎不用配什么,只需要把 deployment 和 svc 配置好 然后在 Jenkins 任务哪调试好即可

推送后 用来查看状态

cat cicd-xbw.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cicd-xbw
spec:
  replicas: 3
  selector:
    matchLabels:
      apps: xbw
  template:
    metadata:
      labels:
        apps: xbw
    spec:
      containers:
      - name: xbw
        image: harbor250.oldboyedu.com/greytracks/xbw:v1.0

---

apiVersion: v1
kind: Service
metadata:
  name: svc-xbw
spec:
  # 指定Service的类型
  type: NodePort
  # 基于标签关联后端的Pod
  selector:
    apps: xbw
  # 配置端口映射
  ports:
      # 端口使用的协议,支持TCP,UDP,SCTP,若不指定则默认为TCP
    - protocol: TCP
      # 指定Service的端口号
      port: 80
      # 指定关联后端Pod的端口号
      targetPort: 80
      # 默认在(30000-32767之间)
      nodePort: 9999


验证测试


部署 v1.0 魂蛋蛋 成功!


部署 v2.0 海阔天空 成功!


Jenkin 回滚功能


1、jenkins 新建任务,配置一致


2、坑点 指定分支 需要配置函数 还不能写/main 或者 master 坑死人2、


3、设置 shell

#!/bin/bash
set -xeu
echo "选择的版本是: ${version}"
kubectl set image deploy cicd-xbw xbw=harbor250.oldboyedu.com/greytracks/xbw:${version}
kubectl rollout restart deployment/cicd-xbw


4、测试验证

上一篇