您获得什么
自动部署、完全隔离、完成后自动清理的预览环境。
PR 自动部署
每个拉取请求自动触发全新的隔离部署
唯一子域名
每个 PR 获得独立子域名,如 pr-123.yourapp.sh0.app
TTL 自动清理
环境在合并或 TTL 到期后自动销毁
应用级开关
按应用启用或禁用预览环境
分支隔离
每个分支在独立容器中运行,零干扰
共享数据库选项
可选择在预览环境间共享暂存数据库
工作原理
01
为应用启用预览环境
在应用设置中开启开关。选择 TTL 时长、数据库策略和资源限制。
02
推送 PR 分支
在 GitHub、GitLab 或 Gitea 上打开拉取请求。sh0 接收 webhook 并开始构建。
03
sh0 自动部署到 pr-123.yourapp.sh0.app
分支使用生产流水线构建并部署到带唯一子域名的隔离容器。
04
TTL 到期,环境自动销毁
当 PR 合并或关闭 -- 或 TTL 到期 -- sh0 销毁容器并释放所有资源。
预览流水线
Git Push
Webhook
构建
部署到隔离容器
分配子域名
TTL 计时器
自动清理
从 git push 到在线 URL 不到 2 分钟 -- 全自动,零配置
一应俱全
自动 PR 检测
sh0 监听 GitHub、GitLab 和 Gitea webhook。新 PR 打开?构建立即开始,无需手动操作。
每个分支的唯一子域名
每个预览获得类似 pr-42.myapp.sh0.app 的 URL。分享给审查者、QA 或客户以获取即时反馈。
可配置 TTL
设置 1 小时、24 小时、7 天或自定义的存活时间。到期后环境自动清理。
零手动清理
合并了 PR?sh0 检测到关闭事件并销毁环境。没有孤立容器,没有资源浪费。
与生产相同的构建流水线
预览环境使用与生产部署完全相同的 Dockerfile、构建步骤和运行时。合并时不会有意外。
在 PR 上评论 URL
sh0 在拉取请求上发表评论,包含实时预览 URL。审查者点击一次即可看到运行中的应用。
传统方式
- x 手动部署暂存环境
- x 整个团队共享一个暂存环境
- x 暂存环境上的 PR 冲突
- x 手动清理旧环境
- x 没有按分支的隔离测试
- x 祈祷暂存环境与生产一致
sh0 的方式
- 每个 PR 自动部署
- 每个分支独立环境
- 唯一子域名自动分配
- 合并或 TTL 到期后自动清理
- 与生产相同的构建流程
- 链接自动发布到 PR
常见问题
预览 URL 是如何生成的? +
sh0 使用 PR 编号和应用名称创建子域名:pr-undefined.undefined.sh0.app。对于自定义域名,可以配置通配符如 *.preview.yourdomain.com。
PR 合并后会怎样? +
sh0 接收合并/关闭 webhook,停止预览容器,移除子域名路由,释放所有资源。全自动,零手动步骤。
可以设置 TTL 吗? +
可以。您可以为每个应用配置 TTL(如 24 小时、7 天)。如果 PR 超过 TTL 仍然打开,环境会被销毁以节省资源。重新打开 PR 或推送新提交会重新创建。
预览环境共享数据库吗? +
默认情况下,每个预览获得独立的隔离环境,没有数据库。如果应用需要持久化数据进行测试,可以选择将预览连接到共享的暂存数据库。
可以为特定应用禁用预览环境吗? +
可以。预览环境通过应用设置中的开关按应用启用。未启用的应用不受 PR webhook 影响。
构建流水线与生产环境相同吗? +
完全相同。sh0 使用相同的技术栈检测、Dockerfile 生成、构建步骤和运行时配置。唯一的区别是子域名和 TTL 生命周期。