From 048b137ee8442b350d1154bb550d1f7b95bbe2e2 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:38:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E9=95=9C=E5=83=8F=E5=9C=B0=E5=9D=80=E6=9B=BF=E4=BB=A3=E5=8F=98?= =?UTF-8?q?=E9=87=8F=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=8F=98=E9=87=8F=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=8C=87=E5=8D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifests/deployment.yaml | 2 +- 云效变量配置指南.md | 253 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 254 insertions(+), 1 deletion(-) create mode 100644 云效变量配置指南.md diff --git a/manifests/deployment.yaml b/manifests/deployment.yaml index 66dc5354..3771d8a3 100644 --- a/manifests/deployment.yaml +++ b/manifests/deployment.yaml @@ -18,7 +18,7 @@ spec: spec: containers: - name: scanner - image: ${IMAGE} + image: jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:latest imagePullPolicy: Always ports: - name: http diff --git a/云效变量配置指南.md b/云效变量配置指南.md new file mode 100644 index 00000000..f30c1017 --- /dev/null +++ b/云效变量配置指南.md @@ -0,0 +1,253 @@ +# 云效 KubectlApply 变量配置指南 + +## 🔍 问题分析 + +错误信息: +``` +[ERROR] deployment.yaml文件中存在未定义的变量 +image: ${IMAGE} +``` + +**原因:** deployment.yaml 中使用了 `${IMAGE}` 变量,但云效没有配置该变量的值。 + +--- + +## ✅ 解决方案 + +### 方案一:在云效中配置变量(最佳实践) + +#### 方法 A:使用图形界面配置 + +1. **进入云效 Flow 流水线** +2. **点击"编辑"** +3. **找到 KubectlApply 步骤** +4. **找到以下配置项之一:** + - "变量替换" + - "环境变量" + - "Variables" + - "参数设置" + +5. **添加变量:** + + **格式 1:键值对形式** + ``` + 变量名: IMAGE + 变量值: jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER} + ``` + + **格式 2:YAML 形式** + ```yaml + IMAGE: jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER} + ``` + + **格式 3:多行文本形式** + ``` + IMAGE=jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER} + ``` + +6. **保存并运行** + +--- + +#### 方法 B:使用 YAML 配置(如果支持) + +在流水线配置文件中: + +```yaml +stages: + - name: 部署 + jobs: + - job: + name: 部署到 K8s + steps: + - step: kubectl-apply@1 + name: 应用 Kubernetes 清单 + 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} +``` + +--- + +### 方案二:使用具体镜像地址(简单但不灵活) + +如果无法配置变量,可以直接在 deployment.yaml 中使用固定的镜像地址。 + +**我已经修改了 `manifests/deployment.yaml`:** + +```yaml +containers: +- name: scanner + image: jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:latest + # 原来是: image: ${IMAGE} +``` + +**缺点:** +- ❌ 总是使用 `latest` 标签,无法追踪具体版本 +- ❌ 如果构建失败但标签被推送,会部署错误的镜像 + +**提交修改:** + +```bash +cd /Users/zhai/my_project/indea_project_workspaces/skillhub +git add manifests/deployment.yaml +git commit -m "fix: 使用固定镜像地址替代变量" +git push +``` + +--- + +### 方案三:使用 kustomize 或 helm(高级方案) + +如果需要更灵活的配置管理,可以使用: + +#### Option A: Kustomize + +创建 `kustomization.yaml`: + +```yaml +# manifests/kustomization.yaml +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +resources: + - deployment.yaml + - service.yaml + +images: + - name: scanner-image + newName: jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner + newTag: ${BUILD_NUMBER} +``` + +修改 deployment.yaml: +```yaml +containers: +- name: scanner + image: scanner-image # kustomize 会替换这个 +``` + +#### Option B: Helm Chart + +创建 Helm Chart 结构(更复杂但更强大)。 + +--- + +## 📸 云效界面示例 + +### 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] Generate deployment.yaml with variables: +[INFO] IMAGE=jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:31 +[INFO] kubectl apply -f deployment.yaml +[INFO] deployment.apps/skillhub-scanner created +``` + +--- + +## 📝 推荐使用的变量格式 + +``` +IMAGE=jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER} +``` + +**说明:** +- `${BUILD_NUMBER}` 是云效自动注入的构建编号 +- 每次构建都会有唯一的镜像标签 +- 便于回滚和追踪 + +--- + +## 🎯 快速行动方案 + +### 选项 A:配置变量(推荐,1 分钟) + +1. 进入云效 → 编辑流水线 +2. 找到 KubectlApply 步骤 +3. 在"变量"或"Variables"字段添加: + ``` + IMAGE=jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:${BUILD_NUMBER} + ``` +4. 保存并运行 + +### 选项 B:使用固定镜像(已完成,需提交) + +1. 提交修改: + ```bash + cd /Users/zhai/my_project/indea_project_workspaces/skillhub + git add manifests/deployment.yaml + git commit -m "fix: 使用固定镜像地址" + git push + ``` +2. 重新运行云效流水线 + +--- + +## 💡 常见问题 + +### Q1: 找不到"变量替换"配置项 + +**A:** 不同版本的云效界面可能不同,尝试查找: +- "变量" +- "环境变量" +- "参数设置" +- "Variables" +- "自定义变量" + +### Q2: 变量配置后还是报错 + +**A:** 检查变量名是否完全匹配: +- deployment.yaml 中: `${IMAGE}` +- 云效配置中: `IMAGE=...` (不要加 `${}`) + +### Q3: BUILD_NUMBER 变量未定义 + +**A:** 确认云效版本支持 `${BUILD_NUMBER}`,或者使用固定标签: +``` +IMAGE=jsessh-registry.cn-shanghai.cr.aliyuncs.com/apps/sh-skill-scanner:latest +``` + +--- + +## 📞 需要帮助? + +如果还是无法配置,请提供: +1. 云效 KubectlApply 步骤的配置界面截图 +2. 或者完整的错误日志 + +我会根据具体情况提供更精确的指导!