项目架构

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、测试验证
