feat: 在项目根目录添加 K8s 部署清单,修复云效部署路径问题

This commit is contained in:
翟二远 2026-04-03 23:33:05 +08:00
parent 690e355235
commit ced9ccc946
3 changed files with 343 additions and 0 deletions

65
manifests/deployment.yaml Normal file
View file

@ -0,0 +1,65 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: skillhub-scanner
labels:
app: skillhub-scanner
version: v1
spec:
replicas: 2
selector:
matchLabels:
app: skillhub-scanner
template:
metadata:
labels:
app: skillhub-scanner
version: v1
spec:
containers:
- name: scanner
image: ${IMAGE}
imagePullPolicy: Always
ports:
- name: http
containerPort: 8000
protocol: TCP
env:
- name: TZ
value: "Asia/Shanghai"
- name: PYTHONUNBUFFERED
value: "1"
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
livenessProbe:
httpGet:
path: /health
port: 8000
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 3
successThreshold: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: 8000
scheme: HTTP
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
successThreshold: 1
failureThreshold: 3
securityContext:
runAsNonRoot: true
runAsUser: 1000
allowPrivilegeEscalation: false
readOnlyRootFilesystem: false
restartPolicy: Always
terminationGracePeriodSeconds: 30

16
manifests/service.yaml Normal file
View file

@ -0,0 +1,16 @@
apiVersion: v1
kind: Service
metadata:
name: skillhub-scanner
labels:
app: skillhub-scanner
spec:
type: ClusterIP
selector:
app: skillhub-scanner
ports:
- name: http
port: 8000
targetPort: 8000
protocol: TCP
sessionAffinity: None

262
云效部署配置修复.md Normal file
View file

@ -0,0 +1,262 @@
# 云效部署配置修复指南
## 🔍 问题分析
错误信息:
```
PATH_TO_YAML=manifests
PROJECT_DIR=/root/workspace/.../workspace/scanner
ERROR: 没有找到发布的资源,请检查YAML路径配置
```
**原因:** 云效的工作目录和 YAML 路径配置不匹配。
---
## ✅ 解决方案(三选一)
### 方案一:修改云效配置路径(最简单)
在云效 Flow 的 KubectlApply 步骤中:
#### 1. 找到部署步骤配置
进入云效 Flow → 编辑 → 找到 "KubectlApply" 或 "部署到 Kubernetes" 步骤
#### 2. 修改配置
**当前配置:**
```yaml
path_to_yaml: manifests
```
**修改为以下任一选项:**
**选项 A:使用相对于项目根的路径**
```yaml
path_to_yaml: scanner/manifests
```
**选项 B:使用项目根目录的 manifests**
```yaml
path_to_yaml: manifests
```
(配合方案二,将 manifests 放在项目根目录)
#### 3. 保存并重新运行
---
### 方案二:使用项目根目录的 manifests(推荐)
已经在项目根目录创建了 `manifests` 目录并复制了配置文件。
#### 项目结构:
```
skillhub/
├── manifests/ ← 项目根目录(推荐)
│ ├── deployment.yaml
│ └── service.yaml
└── scanner/
└── manifests/ ← scanner 子目录(备用)
├── deployment.yaml
└── service.yaml
```
#### 在云效中配置:
```yaml
# KubectlApply 步骤配置
kubectl_version: v1.27.9
cluster_type: ack
namespace: default
path_to_yaml: manifests ← 指向项目根目录的 manifests
insecure_skip_tls_verify: true
variables: |
IMAGE=jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER}
```
#### 提交到 Git:
```bash
cd /Users/zhai/my_project/indea_project_workspaces/skillhub
git add manifests/
git commit -m "feat: 在项目根目录添加 K8s 部署清单"
git push
```
---
### 方案三:修改云效工作目录
如果前两个方案都不行,可以修改云效的工作目录设置。
#### 在云效 Flow 配置中:
找到"构建环境"或"工作目录"设置,确保:
```yaml
# 工作目录设置为项目根目录,不是 scanner 子目录
working_directory: .
# 或者
working_directory: ${WORKSPACE}
```
然后 `path_to_yaml` 设置为:
```yaml
path_to_yaml: scanner/manifests
```
---
## 🎯 推荐操作(最快)
### 第 1 步:提交根目录的 manifests
```bash
cd /Users/zhai/my_project/indea_project_workspaces/skillhub
git add manifests/
git commit -m "feat: 在项目根目录添加 K8s 部署清单"
git push
```
### 第 2 步:修改云效配置
在云效 Flow 的 KubectlApply 步骤中:
**找到这个配置项:**
```
PATH_TO_YAML 或 path_to_yaml
```
**修改为:**
```
manifests
```
(不要写 `scanner/manifests`,因为我们现在用根目录的 manifests)
### 第 3 步:重新运行部署
点击"运行",观察日志是否能找到 YAML 文件。
---
## 📸 云效界面配置示例
### KubectlApply 步骤配置界面可能长这样:
```
┌─────────────────────────────────────────┐
│ 步骤名称: [部署到 Kubernetes ] │
│ 步骤类型: [KubectlApply ▼] │
│ │
│ Kubernetes 配置 │
│ ├─ kubectl 版本: [v1.27.9 ] │
│ ├─ 集群类型: [ACK ▼] │
│ ├─ 命名空间: [default ] │
│ └─ YAML 路径: [manifests ] │← 修改这里
│ │
│ 镜像替换变量: │
│ ┌─────────────────────────────────────┐ │
│ │IMAGE=jsessh-registry.cn-shanghai. │ │
│ │ cr.aliyuncs.com/apps/sh-skill- │ │
│ │ scanner:${BUILD_NUMBER} │ │
│ └─────────────────────────────────────┘ │
│ │
│ [保存] [取消] │
└─────────────────────────────────────────┘
```
---
## ✅ 验证配置
修改后重新运行,应该看到:
```
[INFO] YAML模板处理成功 manifests -> /root/workspace/.../manifests
[INFO] 所有部署资源:
[INFO] total 8
[INFO] -rw-r--r-- 1 root root 1520 deployment.yaml
[INFO] -rw-r--r-- 1 root root 264 service.yaml
[INFO] kubectl apply -f deployment.yaml
[INFO] deployment.apps/skillhub-scanner created
[INFO] kubectl apply -f service.yaml
[INFO] service/skillhub-scanner created
```
---
## 🔍 常见问题
### Q1: 修改后还是找不到文件
**A:** 确认以下几点:
1. manifests 目录已经提交并推送到 Git
2. 云效的代码检出步骤没有问题
3. path_to_yaml 的值与实际目录结构匹配
### Q2: 变量 ${IMAGE} 没有被替换
**A:** 在 KubectlApply 步骤的 variables 配置中添加:
```
IMAGE=jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER}
```
### Q3: 部署成功但 Pod 无法启动
**A:** 检查:
1. 镜像是否成功推送
2. 镜像拉取权限是否配置
3. Pod 日志:`kubectl logs -l app=skillhub-scanner`
---
## 📝 完整的云效流水线示例
如果云效支持 YAML 配置:
```yaml
version: v1.0
name: skillhub-scanner
stages:
- name: 构建
jobs:
- job:
name: 构建镜像
steps:
- step: script@1
with:
script: |
docker build --no-cache --pull \
-t jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER} \
-f scanner/Dockerfile \
scanner/
docker push jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER}
- name: 部署
jobs:
- job:
name: 部署到 K8s
steps:
- step: kubectl-apply@1
with:
kubectl_version: v1.27.9
cluster_type: ack
namespace: default
path_to_yaml: manifests # ← 关键配置
insecure_skip_tls_verify: true
variables: |
IMAGE=jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER}
```
---
## 🎯 下一步
1. ✅ **提交 manifests 到 Git**(已创建在项目根目录)
2. ✅ **修改云效配置**(path_to_yaml: manifests)
3. ✅ **重新运行部署**
4. ✅ **验证应用**(kubectl get pods)