K8S CI/CD 自动化部署
2025/5/14大约 3 分钟部署kubernetesjenkinsci/cd
sponge 创建的服务支持通过 Jenkins 实现自动化构建和部署到 Kubernetes 集群。下面详细介绍使用 Jenkins 进行 CI/CD 的完整流程。
替代方案
如需使用 GitLab CI/CD,可自行编写.gitlab-ci.yml
文件。所有构建部署脚本均已提供在项目scripts
目录下。
搭建 Jenkins-Go 构建平台
准备基础镜像
我们提供了预构建的 Docker 镜像jenkins-go,该镜像已集成 Go 语言编译环境。如需自定义镜像,可参考Dockerfile构建。
环境要求
- 可用的 Kubernetes 集群
- 已安装 kubectl 命令行工具
- 确保容器具有 k8s 操作权限(需复制
.kube
目录下的认证文件)
启动 Jenkins 服务
使用以下 docker-compose.yml 配置:
version: "3.7"
services:
jenkins-go:
image: zhufuyi/jenkins-go:2.37
restart: always
container_name: "jenkins-go"
ports:
- 38080:8080
#- 50000:50000
volumes:
- $PWD/jenkins-volume:/var/jenkins_home
# docker configuration
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
- /root/.docker/:/root/.docker/
# k8s api configuration directory, including config file
- /usr/local/bin/kubectl:/usr/local/bin/kubectl
- /root/.kube/:/root/.kube/
# go related tools
- /opt/go/bin/golangci-lint:/usr/local/bin/golangci-lint
启动命令:
docker-compose up -d
访问地址:http://localhost:38080
初始密码获取:
docker exec jenkins-go cat /var/jenkins_home/secrets/initialAdminPassword
初始配置
安装必备插件:
- Locale(中文支持)
- Extended Choice Parameter(参数化构建)
- Git Parameter(Git 参数支持)
- Role-based Authorization Strategy(权限管理)
设置中文界面:
【Manage Jenkins】→【Configure System】→ 设置 Locale 为zh_CN
配置镜像仓库:
# 开发环境 DEV_REGISTRY_HOST http://localhost:27070 # 测试环境 TEST_REGISTRY_HOST http://localhost:28080 # 生产环境 PROD_REGISTRY_HOST http://localhost:29090
创建 Jenkins 任务模板
新建任务
参数化配置
使用GIT_parameter
作为参数名流水线配置
构建执行
通过【Build with Parameters】选择分支/Tag
服务部署实践
以 web 服务"user"为例的操作步骤:
前置准备
将代码上传至 Git 仓库
配置 Docker 镜像仓库访问权限,创建 Kubernetes 访问密钥:
kubectl create secret generic docker-auth-secret \ --from-file=.dockerconfigjson=/root/.docker/config.json \ --type=kubernetes.io/dockerconfigjson
创建 Kubernetes 资源:
cd deployments/kubernetes kubectl apply -f ./*namespace.yml kubectl apply -f ./*configmap.yml kubectl apply -f ./*svc.yml
(可选)配置钉钉通知:
修改Jenkinsfile
中的tel_num
和access_token
字段
部署验证
查看 Pod 状态:
kubectl get all -n user
预期输出:
NAME READY STATUS RESTARTS AGE pod/user-dm-77b4bcccc5-8xt8v 1/1 Running 0 21m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/user-svc ClusterIP 10.108.31.220 <none> 8080/TCP 27m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/user-dm 1/1 1 1 21m NAME DESIRED CURRENT READY AGE replicaset.apps/user-dm-77b4bcccc5 1 1 1 21m
本地测试:
# 端口转发 kubectl port-forward --address=0.0.0.0 service/user-svc 8080:8080 -n user # API 测试 curl http://localhost:8080/api/v1/teacher/1
服务模板说明
sponge 创建的 Web/gRPC 服务已包含:
- Jenkinsfile 流水线配置
- 镜像构建脚本
- Kubernetes 部署清单
用户可直接使用或根据实际需求修改。
