Tilt启动 tiltup

这是一个用于在tmux会话中启动和监控Tilt开发环境的技能。它提供了一套系统化的工作流程,用于引导开发环境至健康状态,并遵循声明式配置原则修复Tiltfile错误,避免使用硬编码、备用方案或变通脚本。关键词:Tilt开发环境、tmux、Kubernetes开发、容器化开发、DevOps工具、实时重载、错误诊断、声明式配置。

DevOps 0 次安装 0 次浏览 更新于 2/23/2026

name: tiltup description: 在tmux中启动Tilt开发环境,监控引导至健康状态,修复Tiltfile错误而不使用硬编码或备用方案。适用于启动tilt、调试Tiltfile错误或引导开发环境时。

Tilt启动

原则(始终有效)

这些原则适用于处理Tiltfiles、Tilt错误或开发环境引导时:

修复Tiltfile,而非症状

  • 直接修复源配置 - Tiltfile、Dockerfile、k8s清单或helm值
  • 绝不添加shell变通方案 - 无包装脚本、无|| true、无try/except pass
  • 绝不硬编码 端口、路径、主机名、镜像标签或容器名称(这些本应是动态的)
  • 绝不添加掩盖真实错误的备用方案 - 如果资源失败,失败必须可见
  • 绝不添加针对不稳定依赖的睡眠/重试循环 - 通过resource_deps()k8s_resource(deps=)修复依赖顺序
  • 绝不添加Tilt已处理的就绪轮询 - 使用k8s_resource(readiness_probe=)或探针配置

声明式表达依赖关系

  • 端口冲突:修复端口分配源,不要选择不同端口
  • 资源排序:使用resource_deps(),而非顺序启动脚本
  • 环境变量:使用silo.toml或gen-env输出,而非内联默认值
  • 镜像可用性:使用image_depsdeps,而非睡眠直到就绪

Tilt实时重载

编辑Tiltfile后,Tilt会自动获取更改。绝不重启tilt up 用于:

  • Tiltfile编辑
  • 源代码更改
  • Kubernetes清单更新

仅在以下情况重启:Tilt版本升级、端口/主机配置更改、崩溃、集群上下文切换。

工作流程(当显式启动Tilt时)

步骤1:评估当前状态

  1. 检查tilt是否已在运行:

    SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
    tmux list-windows -t "$SESSION" -F '#{window_name}' 2>/dev/null | grep -q "^tilt$"
    

    如果正在运行,通过tilt get uiresources -o json检查健康状况,并跳至步骤3。

  2. 检查必需的环境文件(.localnet.env.env.localsilo.toml):

    • 如果silo.toml存在,使用silo up路径
    • 如果存在gen-env脚本,首先运行它
    • 如果都没有,检查项目README以获取引导说明
  3. 检查k3d集群或Docker先决条件。

步骤2:在tmux中启动Tilt

遵循tmux技能模式:

SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)

if ! tmux has-session -t "$SESSION" 2>/dev/null; then
  tmux new-session -d -s "$SESSION" -n tilt
  tmux send-keys -t "$SESSION:tilt" 'tilt up' Enter
elif ! tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^tilt$"; then
  tmux new-window -t "$SESSION" -n tilt
  tmux send-keys -t "$SESSION:tilt" 'tilt up' Enter
else
  echo "Tilt窗口已存在于会话中: $SESSION"
fi

对于silo项目:使用silo up而非tilt up

步骤3:监控引导

轮询收敛:

  1. 等待10秒以进行初始资源注册
  2. 每15秒轮询一次,最多20次迭代:
    tilt get uiresources -o json | jq -r '.items[] | select(.status.runtimeStatus == "error" or .status.updateStatus == "error" or .status.updateStatus == "pending") | "\(.metadata.name): runtime=\(.status.runtimeStatus) update=\(.status.updateStatus)"'
    
  3. 跟踪资源状态:pending -> in_progress -> ok
  4. 成功:所有资源达到runtime=ok, update=ok(或not_applicable
  5. 如果资源稳定在error状态,继续步骤4

步骤4:诊断并修复错误

对于每个处于错误状态的资源:

  1. 读取日志:tilt logs <resource> --since 2m
  2. 读取Tiltfile和相关的k8s清单
  3. 在配置中识别根本原因(而非运行中的进程)
  4. 应用修复,遵循上述原则
  5. Tilt实时重载 - 重新轮询状态以验证

在同一资源上修复3次迭代而无进展后:

  • 报告错误及完整日志
  • 识别是Tiltfile错误、上游依赖问题还是基础设施问题
  • 不要静默跳过或禁用资源

步骤5:报告

## Tilt状态:<healthy|degraded|errored>

**资源**:X/Y正常
**会话**:tmux $SESSION:tilt

### 错误(如果有)
- <资源>:<根本原因> — <已修复内容或剩余问题>