fix: 使用固定镜像地址替代变量,添加变量配置指南

This commit is contained in:
翟二远 2026-04-03 23:38:03 +08:00
parent ced9ccc946
commit 048b137ee8
2 changed files with 254 additions and 1 deletions

View file

@ -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

253
云效变量配置指南.md Normal file
View file

@ -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. 或者完整的错误日志
我会根据具体情况提供更精确的指导!