From ced9ccc946af8e6de87f178179e6f2af220b2dec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=9F=E4=BA=8C=E8=BF=9C?= Date: Fri, 3 Apr 2026 23:33:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9C=A8=E9=A1=B9=E7=9B=AE=E6=A0=B9?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E6=B7=BB=E5=8A=A0=20K8s=20=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E6=B8=85=E5=8D=95=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BA=91=E6=95=88?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E8=B7=AF=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifests/deployment.yaml | 65 ++++++++++ manifests/service.yaml | 16 +++ 云效部署配置修复.md | 262 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 343 insertions(+) create mode 100644 manifests/deployment.yaml create mode 100644 manifests/service.yaml create mode 100644 云效部署配置修复.md diff --git a/manifests/deployment.yaml b/manifests/deployment.yaml new file mode 100644 index 00000000..66dc5354 --- /dev/null +++ b/manifests/deployment.yaml @@ -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 diff --git a/manifests/service.yaml b/manifests/service.yaml new file mode 100644 index 00000000..f4e9c6e3 --- /dev/null +++ b/manifests/service.yaml @@ -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 diff --git a/云效部署配置修复.md b/云效部署配置修复.md new file mode 100644 index 00000000..6dfb2c9e --- /dev/null +++ b/云效部署配置修复.md @@ -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)