技术背景
在云原生生态中,工具链的选择直接决定 CI/CD 流水线的效率与稳定性。本次方案的工具组合并非偶然,而是基于各组件的核心优势与生态适配性:
- 代码管理层:Gitee 作为国内主流的代码托管平台,支持 Git 分布式版本控制,提供代码评审、分支管理等功能,适配国内网络环境,成为团队协作的高效载体;(当然这里也可以使用Gitlab私有仓库,如何部署和使用可以参考我的另一篇CICD文章,这里满足多样化,所以介绍使用多个工具。点我学习Gitlab集成的CI/CD)
- 构建调度层:Jenkins 作为开源 CI/CD 领域的 "瑞士军刀",通过丰富的插件生态可无缝对接各类工具,灵活编排构建、测试、部署等步骤,实现流程自动化;
- 镜像存储层:Harbor 作为企业级容器镜像仓库,支持镜像加密、漏洞扫描和访问控制,为容器化应用提供安全可靠的存储底座;
- 部署运维层:Kubernetes(简称 K8s)凭借强大的容器编排能力,实现应用的自动扩缩容、滚动更新和故障自愈,成为容器化部署的事实标准。
这一工具链的组合,既满足了代码 - 镜像 - 容器的全生命周期管理需求,又兼顾了国产化适配(如 Gitee)与云原生兼容性(如 K8s),适合中大型企业在混合云或私有云环境中落地实践。通过这套体系,团队可将部署周期从 "天级" 压缩至 "小时级" 甚至 "分钟级",同时通过自动化测试与环境一致性保障,显著降低生产故障概率 ------ 这正是本文探索的核心价值所在。
主机清单
全文采用的操作系统均为Ubuntu22.04LTS版本。
|------------------------------------------------------------------------------------------------------------------|-----------|
| 主机与角色 | IP地址 |
| Jenkins | 10.0.0.10 |
| Gitee工作台 - Gitee.com | |
| K8S集群/作者同款K8S集群 | |
| Harbor仓库 | 10.0.0.8 |
云原生Devops架构流程图

开始之前,作者已经准备好了K8S集群,如果您是从0开始,建议你先部署一套K8S集群,然后继续往下进行。点击部署作者同款K8S1.32.5集群
一、Jenkins安装
1. 安装与配置Jenkins
1.1 添加认证信息
bash
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian/jenkins.io-2023.key
echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
1.2.安装依赖包fontconfig
bash
apt update
apt install fontconfig -y
1.3.安装jdk
bash
[root@jenkins211 ~]# wget https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-x64_bin.tar.gz
[root@jenkins211 ~]# tar xf jdk-17.0.12_linux-x64_bin.tar.gz -C /usr/local/
[root@jenkins211 ~]#
[root@jenkins211 ~]# cat /etc/profile.d/jdk.sh
#!/bin/bash
export JDK_HOME=/usr/local/jdk-17.0.12
export PATH=$PATH:$JDK_HOME/bin
[root@jenkins211 ~]# source /etc/profile.d/jdk.sh
[root@jenkins211 ~]# java --version
输出不报错且版本是17.0.12即为安装成功
1.4.安装jenkins
bash
[root@jenkins211 ~]# wget https://mirrors.aliyun.com/jenkins/debian/jenkins_2.479_all.deb
[root@jenkins211 ~]# dpkg -i jenkins_2.479_all.deb
.....
# 有报错,不必理会,去修改配置文件
修改jenkins的启动脚本,修改用户和组以及添加上我们的JAVA环境变量
[root@jenkins211 ~]# vim /lib/systemd/system/jenkins.service
...
36 #User=jenkins
37 #Group=jenkins
38 User=root
39 Group=root
40
41 # Directory where Jenkins stores its configuration and workspaces
42 Environment="JENKINS_HOME=/var/lib/jenkins"
43 Environment="JAVA_HOME=/usr/local/jdk-17.0.12"
...
# 再次启动Jenkins即可
1.5.启动Jenkins
bash
[root@jenkins211 ~]# systemctl enable --now jenkins
Synchronizing state of jenkins.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable jenkins
[root@jenkins211 ~]#
[root@jenkins211 ~]# ss -ntl |grep 8080
LISTEN 0 50 *:8080 *:*
[root@jenkins211 ~]#
bash
7.查看密码并登录初始化
[root@jenkins211 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
5f062a5790ea46bb9df6bc6866a39543
[root@jenkins211 ~]#
8.登录测试
10.0.0.10:8080
9.因为我这里是安装好的页面,初次安装会跳出安装插件的步骤,我们一般都会跳过,安装完成后根据自己的需求去自行选择安装。
在这里准备好了插件,我们直接导入到Jenkins对应的插件目录下面去即可,当然,也可以选择在线安装。

bash
1.查看默认的插件目录
[root@jenkins211 ~]# ll /var/lib/jenkins/plugins/
total 8
drwxr-xr-x 2 root root 4096 Apr 11 09:43 ./
drwxr-xr-x 8 jenkins jenkins 4096 Apr 11 09:43 ../
2.导入插件
[root@jenkins211 ~]# tar xf jenkins_2.479-plugin.tar -C /var/lib/jenkins/plugins/
[root@jenkins211 ~]#
[root@jenkins211 ~]# ll /var/lib/jenkins/plugins/ |wc -l
227
[root@jenkins211 ~]#
3.重启jenkins服务
[root@jenkins211 ~]# systemctl restart jenkins.service
1.6. 修改Jenkins密码
由于默认密码太长太难记忆,所以插件安装完成之后重新登录Jenkins,然后重置密码。

博主这里直接修改成了1,因为这只是测试环境;修改完成之后重新登录一下即可。
二、Harbor仓库快速部署
1.下载harbor
bash
wget https://github.com/goharbor/harbor/releases/download/v2.12.2/harbor-offline-installer-v2.12.2.tgz
2.解压harbor目录
bash
[root@elk93 ~]# tar xf harbor-offline-installer-v2.12.2.tgz -C /usr/local/
3.准备配置文件
bash
[root@elk93 ~]# cp /usr/local/harbor/harbor.yml{.tmpl,}
[root@elk93 ~]#
[root@elk93 ~]# ll /usr/local/harbor/harbor.yml*
-rw-r--r-- 1 root root 14288 Mar 24 16:46 /usr/local/harbor/harbor.yml
-rw-r--r-- 1 root root 14288 Jan 16 22:10 /usr/local/harbor/harbor.yml.tmpl
[root@elk93 ~]# vim /usr/local/harbor/harbor.yml
...
hostname: 10.0.0.8
...
## https related config
#https:
# # https port for harbor, default is 443
# port: 443
# # The path of cert and key files for nginx
# certificate: /your/certificate/path
# private_key: /your/private/key/path
# # enable strong ssl ciphers (default: false)
# # strong_ssl_ciphers: false
...
harbor_admin_password: 1
...
data_volume: /root/harbor_data
...
4.开始安装harbor
bash
[root@elk93 ~]# /usr/local/harbor/install.sh
[Step 0]: checking if docker is installed ...
Note: docker version: 20.10.24
[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 2.23.0
[Step 2]: loading Harbor images ...
...
5.访问harbor的WebUI
http://10.0.0.8/harbor/projects
用户名: admin
密 码: 1 ------配置文件修改的

6.新建项目
建议命名:"jenkins-k8s"
7.测试harbor仓库可用性
bash
[root@k8s-master ~]# cat /etc/docker/daemon.json
{
"insecure-registries": ["10.0.0.8"]
}
[root@k8s-master ~]#scp /etc/docker/daemon.json 10.0.0.7:/etc/docker/daemon.json
[root@k8s-master ~]#scp /etc/docker/daemon.json 10.0.0.8:/etc/docker/daemon.json
[root@k8s-master ~]#scp /etc/docker/daemon.json 10.0.0.10:/etc/docker/daemon.json
#所有配置harbor仓库的都要重启docker
systemctl restart docker.service
docker info | grep "Insecure Registries" -A 2
#可以看到
Insecure Registries:
10.0.0.8
# 任意一台主机登录测试
[root@elk93 ~]# docker login -u admin -p 1 10.0.0.8 # 基于命令行的方式登录,如果你想要交互的话,就不用写-u和-p。
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
三、Gitee代码仓库配置
仓库我们可以使用gitee,gitlab,和github.
1.首先我们要先去创建一个仓库
2.编写代码
bash
[root@worker233 ~]# mkdir container-cicd
[root@worker233 ~]#
[root@worker233 ~]# unzip xbw.zip -d container-cicd/
[root@worker233 ~]# cd container-cicd/
[root@worker233 container-cicd]#
[root@worker233 container-cicd]# ll
total 224
drwxr-xr-x 5 root root 4096 Apr 11 10:06 ./
drwx------ 11 root root 4096 Apr 11 10:06 ../
-rw-r--r-- 1 root root 16458 Jun 13 2019 about.html
-rw-r--r-- 1 root root 20149 Jun 13 2019 album.html
-rw-r--r-- 1 root root 19662 Jun 13 2019 article_detail.html
-rw-r--r-- 1 root root 18767 Jun 13 2019 article.html
-rw-r--r-- 1 root root 18913 Jun 13 2019 comment.html
-rw-r--r-- 1 root root 16465 Jun 13 2019 contact.html
drwxr-xr-x 2 root root 4096 Sep 19 2022 css/
drwxr-xr-x 5 root root 4096 Sep 19 2022 images/
-rw-r--r-- 1 root root 29627 Jun 29 2019 index.html
drwxr-xr-x 2 root root 4096 Sep 19 2022 js/
-rw-r--r-- 1 root root 24893 Jun 13 2019 product_detail.html
-rw-r--r-- 1 root root 20672 Jun 13 2019 product.html
3.开发人员添加git配置
bash
这里参考自己的Git仓库~
[root@worker233 container-cicd]# git config --global user.name "Nova_cao"
[root@worker233 container-cicd]# git config --global user.email "abc@qq.com"
4.初始化项目
bash
[root@worker233 container-cicd]# git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /root/container-cicd/.git/
[root@worker233 container-cicd]#
[root@worker233 container-cicd]# ll
# 初始化完成此时会产生一个.git目录
total 232
drwxr-xr-x 6 root root 4096 Apr 11 10:13 ./
drwx------ 11 root root 4096 Apr 11 10:13 ../
-rw-r--r-- 1 root root 16458 Jun 13 2019 about.html
-rw-r--r-- 1 root root 20149 Jun 13 2019 album.html
-rw-r--r-- 1 root root 19662 Jun 13 2019 article_detail.html
-rw-r--r-- 1 root root 18767 Jun 13 2019 article.html
-rw-r--r-- 1 root root 18913 Jun 13 2019 comment.html
-rw-r--r-- 1 root root 16465 Jun 13 2019 contact.html
drwxr-xr-x 2 root root 4096 Sep 19 2022 css/
-rw-r--r-- 1 root root 185 Apr 11 10:08 Dockerfile
drwxr-xr-x 7 root root 4096 Apr 11 10:13 .git/
drwxr-xr-x 5 root root 4096 Sep 19 2022 images/
-rw-r--r-- 1 root root 29627 Jun 29 2019 index.html
drwxr-xr-x 2 root root 4096 Sep 19 2022 js/
-rw-r--r-- 1 root root 24893 Jun 13 2019 product_detail.html
-rw-r--r-- 1 root root 20672 Jun 13 2019 product.html
5.编写.dockerignore优化 && 编写Dockerfile
这里FROM的镜像就是一个轻量级的NGINX镜像,完全可以使用NGINX去代替,只不过我推送到Harbor仓库之后改名字了。
bash
# 因为我们编译Dokcerfile的时候不需要用到.git目录,为了构建镜像的轻量级,所以我们并不打算将目录发送到服务端。
[root@worker233 container-cicd]# cat Dockerfile
FROM 10.0.0.8/jenkins-k8s/apps:v1
MAINTAINER CaoFac
LABEL company=StringSoftWare \
role=it \
email=abc@qq.com
ADD . /usr/share/nginx/html
[root@worker233 container-cicd]#
[root@worker233 container-cicd]# cat .dockerignore
.git/*
6.添加远程仓库
bash
[root@worker233 container-cicd]# git add .
[root@worker233 container-cicd]# git commit -m 'game'
[root@worker233 container-cicd]# git remote add origin https://gitee.com/cao-facan/container-cicd.git
[root@worker233 container-cicd]# git push -u origin "master"
Username for 'https://gitee.com': jasonyin2020
Password for 'https://jasonyin2020@gitee.com':
Enumerating objects: 92, done.
Counting objects: 100% (92/92), done.
Delta compression using up to 2 threads
Compressing objects: 100% (91/91), done.
Writing objects: 100% (92/92), 1.48 MiB | 4.69 MiB/s, done.
Total 92 (delta 11), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag b445e5af
To https://gitee.com/jasonyin2020/oldboyedu-linux96-yiliao.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
7.访问看我们的gitee仓库看到代即可

四、使用Jenkins
1.Jenkins节点安装Docker
bash
#!/bin/bash
# 确保脚本以root权限运行
if [ "$(id -u)" -ne 0 ]; then
echo "错误:此脚本必须以root用户运行"
exit 1
fi
# 步骤1: 安装必要的系统工具
echo "=== 安装必要的系统工具 ==="
apt-get update -y
apt-get install -y ca-certificates curl gnupg
# 步骤2: 信任Docker的GPG公钥
echo "=== 信任Docker的GPG公钥 ==="
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
# 步骤3: 写入软件源信息
echo "=== 写入Docker软件源信息 ==="
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
# 步骤4: 安装Docker
echo "=== 安装Docker ==="
apt-get update -y
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 验证安装
echo "=== 验证Docker安装 ==="
if command -v docker &> /dev/null; then
echo "Docker已成功安装,版本信息:"
docker --version
echo "Docker Compose版本信息:"
docker compose version
else
echo "Docker安装可能失败,请检查错误信息。"
exit 1
fi
echo "=== Docker安装过程已完成 ==="
2.创建jenkins的项目并配置git


这里的密钥设置最好给一个ID后续的话方便辨识密钥用处
添加即可,要保证信息都是正确的

3.添加执行的shell命令
这一步是为了验证Git仓库的信息是否可用已经Jenkins配置是否正确。

4.开启编译
Jenkins执行的工作目录为 /var/lib/jenkins/workspace/
Jenkins执行构建时,会自动的将代码拉取到我们的工作目录,然后执行shell命令进行编译,最后还要把镜像推送到harbor仓库中去。
tip: 注意,harbor仓库要创建新的项目,名称跟push的路径保持一致。

没有报错
5.harbor的WebUI验证

五、jenkins参数化构建及响应式更新K8S业务
1.响应式创建deploy
bash
kubectl create deployment game --image=10.0.0.8/jenkins-k8s/game:v1 --replicas=3
kubectl expose deployment game --port=80 --type=NodePort
kubectl get svc

2.访问测试
10.0.0.6:31903

3.jenkins参数化构建
继续回到我们创建的项目configuration配置页面

引用我们设置的名称变量

修改一下代码,模拟新版本
vim 修改一下代码目录的index.html即可,注意,这里修改的是上文我们创建的gitee的代码,并非Jenkins工作目录的代码!
这里我修改的地方主要是这里

4. 提交新代码

成功之后,我们的v3标签的镜像就已经存在harbor仓库,我们只需要响应式更新一下K8S的pod镜像即可。
更新 Deployment 的镜像:
kubectl set image deployments/game game=10.0.0.8/jenkins-k8s/game:v3
查看 Pod 状态、:
kubectl get po

5.再次访问WebUI
没问题,修改为了v3版本,这个就是取决于index.html写了什么信息。
六、jenkins基于选项参数实现K8S的服务更新
1.jenkins判断服务是首次部署还是更新
bash
docker login -u admin -p 1 10.0.0.8
docker build -t 10.0.0.8/jenkins-k8s/game:${version} .
docker push 10.0.0.8/jenkins-k8s/game:${version}
docker logout 10.0.0.8
if [ `kubectl get pods -l app=game | wc -l` -eq 0 ] ; then
kubectl create deployment game --image=10.0.0.8/jenkins-k8s/game:${version} --port=80 --replicas=3
kubectl expose deployment game --port=80 --type=LoadBalancer
else
kubectl set image deploy game game=10.0.0.8/jenkins-k8s/game:${version}
kubectl scale deployment game --replicas=5
fi
回到参数化构建,修改我们的shell命令
这个时候可能就有人疑惑了,这个shell命令出现了kubectl,但是Jenkins好像并没有K8S的环境,如何去执行kubectl命令呢?对了,这时候我们要在Jenkins上配置K8S的环境。
2. Jenkins配置K8S环境
2.1 安装kube相关组件
bash
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key |
gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /" |
tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
2.2 复制k8s-master节点证书到Jenkins
bash
[root@k8s-master ~]# scp -r .kube/ 10.0.0.10:/root
The authenticity of host '10.0.0.10 (10.0.0.10)' can't be established.
ED25519 key fingerprint is SHA256:0OjJR5NwPUthuX0PbarzI+9EaHXIp2mBOqOU8fkYS7Q.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.0.10' (ED25519) to the list of known hosts.
root@10.0.0.10's password:
2.3 测试
bash
# 再次还需要添加k8s-master的主机解析
[root@jenkins ~]# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 cao
10.0.0.6 k8s-master
#验证测试
[root@jenkins ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
deplot-emtrydir-pod-7b8579cfc7-bjtvd 2/2 Running 2 (86m ago) 18h
deplot-emtrydir-pod-7b8579cfc7-jvrjd 2/2 Running 2 (90m ago) 18h
deplot-emtrydir-pod-7b8579cfc7-lk6mj 2/2 Running 2 (88m ago) 18h
game-d49cf75fd-6t8nt 1/1 Running 0 8m4s
game-d49cf75fd-gxf7w 1/1 Running 0 8m6s
game-d49cf75fd-vtd76 1/1 Running 0 8m2s
[root@jenkins ~]#
3. 构建项目并测试访问

这时候就可以发现副本数量变成了5个,因为之前存在。shell脚本的判断就自动sacle副本数量了。
七、jenkins实现git参数化构建
- 参数化构建:应用场景广泛,不仅适用于代码构建,还适用于各类需要动态配置的任务。例如,在自动化测试任务中,可设置参数来指定不同的测试用例集、测试环境;在部署任务中,通过参数指定部署的目标服务器、部署版本等 。
- Git 参数化构建:主要针对基于 Git 进行版本控制的代码项目。在软件开发过程中,当需要频繁在不同分支(开发分支、测试分支、预发布分支等)间进行构建测试,或者基于不同版本标签构建发布包时,Git 参数化构建能高效地满足需求。比如开发团队想测试不同特性分支的代码,就可以通过 Git 参数化构建选择对应分支进行构建。
1. 配置Git参数
回到我们创建项目的configuration选项

保存之后就可以看到Git提交的历史编号了

version来源就是我们的Git提交的历史
bash
[root@k8s-node1 ~/container-cicd]# git log
commit 07fe4709d8d6e5e7abe9553e1114a0b98ffdba23 (HEAD -> master, origin/master)
Author: Nova <13943870+cao-facan@user.noreply.gitee.com>
Date: Fri Jul 18 11:30:18 2025 +0800
第7个版本
commit 76b369a2a01ba653d0f6c6bfb1cd0baf2a4b3513
Author: Nova <13943870+cao-facan@user.noreply.gitee.com>
Date: Fri Jul 18 11:08:59 2025 +0800
第6个版本
commit fa80d31d63a232be9fb8df7c1c50ed7e62220c06
Author: Nova <13943870+cao-facan@user.noreply.gitee.com>
Date: Fri Jul 18 10:53:22 2025 +0800
第三个版本
commit bea2441252702157018227d65f11a6269a349b13
Author: Nova <13943870+cao-facan@user.noreply.gitee.com>
Date: Fri Jul 18 10:40:01 2025 +0800
修改了Dockerfile语法错误
commit 11276d088dae825180997a62042864a327f152a9
Author: Nova <13943870+cao-facan@user.noreply.gitee.com>
Date: Fri Jul 18 10:27:44 2025 +0800
container-cicd
git提交的时候最好加上描述信息,不然回滚版本都不知道这个版本做了哪些更新!
之后的步骤跟我们的选项参数化构建一样的了,就不再演示。
2. 验证Git参数
点击build进行构建

八、Jenkins的pipeline实现全流程
1.创建pipline项目

2. 记录gitee的标识ID

保存下来
29b12ea5-b5ba-4a91-9635-60ed38d74bab
回到流水线项目的configuration配置

这里的BUILD_NUMBER是构建时的指的时构建的步骤的ID号,没有v的版本标签信息,只有1,2,3,4,5,如果要使用harbor的镜像的标签前面都是v...,但是如果不想使用harbor已存在的镜像,想自己重新构建镜像,重新打标签,那么就不需要加v.
bash
pipeline {
agent any
stages {
stage('从gitee拉取代码') {
steps {
git credentialsId: '29b12ea5-b5ba-4a91-9635-60ed38d74bab', url: 'https://gitee.com/cao-facan/container-cicd.git'
}
}
stage('编译镜像') {
steps {
sh 'docker build -t 10.0.0.8/jenkins-k8s/game:${BUILD_NUMBER} .'
}
}
stage('推送镜像到harbor仓库') {
steps {
sh '''docker login -u admin -p 1 10.0.0.8
docker push 10.0.0.8/jenkins-k8s/game:${BUILD_NUMBER}
docker logout 10.0.0.8'''
}
}
stage('部署或更新game项目') {
steps {
sh '''if [ `kubectl get pods -l app=game | wc -l` -eq 0 ] ; then
kubectl create deployment game --image=10.0.0.8/jenkins-k8s/game:${BUILD_NUMBER} --port=80 --replicas=3
kubectl expose deployment game --port=80 --type=NodePort
else
kubectl set image deploy game game=10.0.0.8/jenkins-k8s/game:${BUILD_NUMBER}
kubectl scale deployment game --replicas=5
fi'''
}
}
}
}
3. 配置完成之后构建

没毛病
九、Jenkins的Jenkinsfile实现全流程
1.创建Jenkinsfile文件

2. 配置pipeline项目
回到流水线项目的configuration配置选择Jenkinsfile

3. 构建测试

bash
[root@jenkins ~]# kubectl get po
NAME READY STATUS RESTARTS AGE
deplot-emtrydir-pod-7b8579cfc7-bjtvd 2/2 Running 2 (3h59m ago) 21h
deplot-emtrydir-pod-7b8579cfc7-jvrjd 2/2 Running 2 (4h3m ago) 21h
deplot-emtrydir-pod-7b8579cfc7-lk6mj 2/2 Running 2 (4h ago) 21h
game-6df5459d89-95j8j 1/1 Running 0 20s
game-6df5459d89-kqvgx 1/1 Running 0 18s
game-6df5459d89-mv6nf 1/1 Running 0 18s
game-6df5459d89-zcf28 1/1 Running 0 20s
game-6df5459d89-zs6nx 1/1 Running 0 20s

十、总结
通过 Jenkins、Gitee、Harbor 与 Kubernetes 的协同配合,我们构建起了一套覆盖 "代码提交 - 镜像构建 - 容器部署" 的全链路容器化 CI/CD 流水线。这一方案的核心价值,在于将原本分散的开发、测试、运维环节串联成自动化流程,不仅缩短了软件从开发到上线的周期,更通过容器化技术保障了环境一致性,大幅降低了 "在我电脑上能跑" 的尴尬场景。
从实践角度看,Gitee 的代码管理能力为团队协作提供了坚实基础,Jenkins 的灵活编排让复杂流程自动化成为可能,Harbor 的镜像管控确保了应用交付的安全性,而 Kubernetes 则赋予了应用在生产环境中弹性伸缩、自愈容错的云原生能力。这套工具链的组合并非简单的技术堆砌,而是云原生时代 DevOps 理念的具象化落地,尤其适合需要快速迭代的企业级应用场景。
当然,CI/CD 的价值不止于 "自动化",更在于推动团队协作模式的变革。在流水线的运转过程中,开发、测试、运维团队将围绕 "共同交付价值" 形成闭环,通过持续反馈优化流程,最终实现软件交付质量与效率的双重提升。对于计划向云原生转型的团队而言,这套方案既是可直接复用的实践模板,也是理解 DevOps "持续改进" 核心思想的绝佳案例。