CICD之四:CICD实战
Jenkins CI/CD 实践
1. 自由风格任务:拉取代码
Jenkins 创建任务
- Dashboard -> 新建任务
- 输入任务名称 oldboyedu-linux98-yiliao
- 选择 构建一个自由风格的软件项目
[此处插入图片16: Jenkins新建任务页面,数字标示了:1.输入任务名称 -> 2.选择自由风格项目 -> 3.点击确定]

配置源码管理
- 在任务配置页面,进入 源码管理 (Source Code Management)
- 选择 Git
- Repository URL: http://10.0.0.153/root/oldboyedu-yiliao.git
- Credentials: 点击 添加,输入 GitLab 的用户名 root 和密码,保存凭证。
- 保存配置。
[此处插入图片17: Jenkins任务配置-源码管理,数字标示了:1.源码管理Tab -> 2.选Git -> 3.添加凭证 -> 4.填写仓库URL -> 5.选择刚添加的凭证 -> 6.保存]

配置构建步骤
在 构建步骤 (Build Steps) 中,选择 执行 shell
输入脚本:
1
2
3pwd
ls -l
cat Dockerfile
构建与验证
- 点击 立即构建 (Build Now)。
- 查看 Console Output (控制台输出),确认代码已成功拉取,并显示了 Dockerfile 的内容。
[此处插入图片18: Jenkins控制台输出,红框和勾号表示ls -l命令成功执行,显示了从Git仓库拉取的文件列表]

[此处插入图片19: Jenkins控制台输出,红框标识了cat Dockerfile命令的输出,显示了Dockerfile内容]

2. 持续交付:构建镜像并推送到 Harbor
配置 Jenkins 服务器
安装 Docker: 在 Jenkins 服务器(211)上安装 Docker。
1
2
3[root@jenkins211 ~]# wget http://192.168.21.253/Resources/Docker/scripts/oldboyedu-autoinstall-docker-docker-compose.tar.gz
[root@jenkins211 ~]# tar xf ...
[root@jenkins211 ~]# ./install-docker.sh i配置 Harbor 解析和证书:
1
2[root@jenkins211 ~]# echo "10.0.0.250 harbor250.oldboyedu.com" >> /etc/hosts
[root@jenkins211 ~]# scp -r 10.0.0.231:/etc/docker/certs.d/ /etc/docker/
修改 Jenkins 任务
修改 执行 shell 步骤的脚本:
1
2
3
4
5
6
7
8
9# 定义版本号,可以硬编码或后续参数化
VERSION=v0.1
# 构建镜像
docker build -t harbor250.oldboyedu.com/oldboyedu-cicd/yiliao:${VERSION} .
# 登录并推送镜像
docker login -u admin -p 1 harbor250.oldboyedu.com
docker push harbor250.oldboyedu.com/oldboyedu-cicd/yiliao:${VERSION}
构建与验证
- 再次 立即构建。
- 登录 Harbor UI,检查 oldboyedu-cicd 项目下是否已存在 yiliao:v0.1 镜像。
3. 持续部署:部署服务到 K8S
配置 Jenkins 服务器
安装 kubectl:
1
2[root@jenkins211 ~]# wget http://192.168.21.253/Resources/Kubernetes/Project/DevOps/Jenkins/kubectl-1.23.17
[root@jenkins211 ~]# install kubectl-1.23.17 /usr/local/bin/kubectl准备 K8S 认证文件:
1
2
3[root@jenkins211 ~]# mkdir -p ~/.kube/
[root@jenkins211 ~]# scp 10.0.0.231:/root/.kube/config ~/.kube/
[root@jenkins211 ~]# kubectl version # 验证是否能连接到K8S集群
修改 Jenkins 任务
更新 执行 shell 脚本,在推送镜像后加入部署逻辑:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40# ... (前面 build 和 push 的脚本) ...
# 部署到K8S
# 判断服务是否存在,不存在则创建,存在则更新(此处简化为仅创建)
# 实际生产中建议使用 apply -f file.yaml
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-yiliao
spec:
replicas: 3
selector:
matchLabels:
apps: yiliao
template:
metadata:
labels:
apps: yiliao
spec:
containers:
- name: c1
image: harbor250.oldboyedu.com/oldboyedu-cicd/yiliao:v0.1
---
apiVersion: v1
kind: Service
metadata:
name: svc-yiliao
spec:
type: LoadBalancer
selector:
apps: yiliao
ports:
- protocol: TCP
port: 80
EOF
# 检查部署状态
kubectl get pods -o wide -l apps=yiliao
kubectl get svc svc-yiliao
构建与验证
- 立即构建。
- 查看控制台输出,可以看到 K8S 资源已创建,并获取到 EXTERNAL-IP(如 10.0.0.154)。
- 访问 http://10.0.0.154/ 查看应用是否部署成功。
4. 升级与回滚 (参数化构建)
修改代码 (模拟版本更新)
- 在本地代码库中,修改 index.html 文件,添加一行醒目的 H1 标题。
- git commit 和 git push 推送新代码。
配置参数化构建
- 在 Jenkins 任务配置页面,勾选 This project is parameterized (此项目为参数化构建)。
- 添加一个 String Parameter (字符串参数),名称为 version,默认值为 v0.2。
[此处插入图片20: Jenkins参数化构建配置页面,红框标识了添加参数的选项和version参数的设置]

修改 Jenkins 任务脚本
更新 执行 shell 脚本,使用 ${version} 变量,并改用 kubectl set image 进行滚动更新。
1
2
3
4
5
6
7
8
9
10#!/bin/bash
docker build -t harbor250.oldboyedu.com/oldboyedu-cicd/yiliao:${version} .
docker login -u admin -p 1 harbor250.oldboyedu.com
docker push harbor250.oldboyedu.com/oldboyedu-cicd/yiliao:${version}
# 滚动更新Deployment的镜像
kubectl set image deploy deploy-yiliao c1=harbor250.oldboyedu.com/oldboyedu-cicd/yiliao:${version}
# 检查状态
kubectl get pods -o wide -l apps=yiliao
构建与验证 (升级)
- 点击 Build with Parameters (使用参数构建)。
- 输入新版本号(如 v0.2),开始构建。
- 构建完成后,刷新 http://10.0.0.154/,应看到更新后的页面。
[此处插入图片21: 浏览器访问部署的应用,红框和箭头指向了升级后显示的新内容]
构建与验证 (回滚)
- 再次点击 Build with Parameters。
- 输入旧版本号(如 v0.1),开始构建。
- 构建完成后,刷新 http://10.0.0.154/,页面应回滚到旧版本。




