第 7 章 · DevOps 与 AI:Jenkins / Gitea / Ollama / Open WebUI
7.1 Jenkins LTS(JDK 17)
适用场景
| 选用 | 说明 |
|---|---|
| 持续集成 CI | 代码提交触发编译、测试 |
| 持续交付 CD | 构建镜像 → 推送仓库 → 更新 K8s Deployment |
| 插件生态 | Git、Maven、Docker、Kubernetes 插件 |
不选用:极简项目手动部署;全 GitLab CI 团队(可部署商店 GitLab CE,资源需求高)。
商店部署参数
| 项 | 值 |
|---|---|
| id | jenkins |
| 镜像 | jenkins/jenkins:lts-jdk17 |
| 端口 | 8080 |
| PVC | 20 Gi → /var/jenkins_home |
| 资源 | 中型 · 2 核 4Gi |
首次配置
- 运维 → 日志管理 搜索:
Please use the following password - 浏览器
http://<节点IP>:<NodePort>输入初始密码 - 安装推荐插件
Pipeline 语法(Jenkinsfile)
声明式流水线
pipeline {
agent any
environment {
DOCKER_REGISTRY = 'harbor.example.com'
IMAGE_NAME = 'shop/api'
}
stages {
stage('Checkout') {
steps { git branch: 'main', url: 'http://gitea:3000/team/api.git' }
}
stage('Build') {
steps { sh 'mvn -B clean package -DskipTests' }
}
stage('Docker') {
steps {
sh '''
docker build -t $DOCKER_REGISTRY/$IMAGE_NAME:${BUILD_NUMBER} .
docker push $DOCKER_REGISTRY/$IMAGE_NAME:${BUILD_NUMBER}
'''
}
}
stage('Deploy') {
steps {
sh '''
kubectl set image deployment/api api=$DOCKER_REGISTRY/$IMAGE_NAME:${BUILD_NUMBER} -n app
'''
}
}
}
}
与小紫云计算联动
| 步骤 | 操作 |
|---|---|
| 构建机访问集群 | Jenkins Pod 挂载 kubeconfig 或 运维 → 节点终端 执行部署 |
| 更新镜像 | 应用部署 → 升级 改 tag,或工作负载 YAML |
| 滚动验证 | 应用部署 就绪列 1/1 |
小紫运维
jenkins_home 在 PVC,存储 扩容防插件与构建历史占满;构建慢 → 资源 加 CPU。
7.2 Gitea 1.22
适用场景
轻量 Git 托管(比 GitLab 省资源);配合 Jenkins/Drone 做 CI;内网代码仓库。
商店部署参数
| 项 | 值 |
|---|---|
| id | gitea |
| 镜像 | gitea/gitea:1.22-rootless |
| 端口 | 3000 |
| PVC | 20 Gi → /data |
环境变量(可选)
env:
- name: GITEA__database__DB_TYPE
value: "sqlite3"
- name: GITEA__server__ROOT_URL
value: "http://<节点IP>:<NodePort>/"
生产建议 SQLite 换 MySQL(第 2 章):
- name: GITEA__database__DB_TYPE
value: "mysql"
- name: GITEA__database__HOST
value: "mysql.data.svc.cluster.local:3306"
- name: GITEA__database__NAME
value: "gitea"
- name: GITEA__database__USER
value: "gitea"
- name: GITEA__database__PASSWD
value: "密码"
Git 语法(客户端)
git clone http://<节点IP>:<NodePort>/team/api.git
git remote add origin http://gitea:3000/team/api.git # 集群内 CI 用
git push -u origin main
SSH 克隆(需 端口 映射 22 若启用内置 SSH)
git clone ssh://git@<节点IP>:<port>/team/api.git