资源快照
每个发布都会生成包含完整文件清单的快照,用于审计和回滚验证。
快照内容
- 所有部署文件及其哈希值
- 共享资源引用
- 部署时间戳和元数据
- 文件权限和大小信息
快照文件位置
releases/20260304_120100/
├── files/
│ ├── index.html
│ └── app.js -> ../../shared/assets/abc123def456.js
├── snapshot.json
└── metadata.jsonsnapshot.json 示例
json
{
"timestamp": "20260304_120100",
"files": {
"index.html": {
"hash": "a1b2c3d4e5f6...",
"size": 1024,
"permissions": "644"
},
"app.js": {
"shared_hash": "abc123def456.js",
"size": 51200,
"permissions": "644"
}
}
}metadata.json 示例
json
{
"build_command": "npm run build",
"deployed_by": "user",
"deployed_at": "2026-03-04T12:01:00Z"
}快照用途
审计追踪
- 记录每次部署的文件清单
- 验证文件完整性
- 追踪部署历史
回滚验证
- 确保回滚到的版本文件完整
- 验证共享资源引用正确
- 检查文件权限设置
问题诊断
- 比较不同版本的文件差异
- 识别部署问题
- 分析性能变化
快照生成时机
- 部署时:每次成功部署后生成
- 回滚时:验证目标版本的快照
- 清理时:检查要删除版本的快照
快照验证
Shipfe 会验证快照的完整性:
- 检查文件是否存在
- 验证哈希值匹配
- 确认权限设置正确
- 验证共享资源链接
快照存储
快照文件存储在每个发布目录中:
snapshot.json- 文件清单和哈希metadata.json- 部署元数据
查看快照
本地查看
bash
# SSH到服务器查看快照
ssh user@server "cat /var/www/myapp/releases/20260304_120100/snapshot.json"编程访问
javascript
const fs = require('fs');
const snapshot = JSON.parse(fs.readFileSync('snapshot.json', 'utf8'));
console.log('Files in this release:');
Object.entries(snapshot.files).forEach(([file, info]) => {
console.log(`${file}: ${info.hash} (${info.size} bytes)`);
});快照与共享资源
当启用共享资源时,快照包含特殊处理:
json
{
"files": {
"app.js": {
"shared_hash": "abc123def456.js",
"size": 51200,
"permissions": "644"
}
}
}shared_hash字段标识共享资源- 实际文件通过硬链接引用共享存储
性能考虑
- 快照文件很小,通常只有几KB
- 哈希计算只对实际文件进行
- 快照验证快速且轻量
故障排除
快照创建失败
Error: Failed to create snapshot原因:
- 磁盘空间不足
- 文件权限问题
- 哈希计算失败
解决方案:
- 检查磁盘空间
- 验证文件权限
- 查看详细错误日志
快照验证失败
Warning: Snapshot validation failed原因:
- 文件被修改
- 权限被改变
- 共享资源链接损坏
解决方案:
- 检查文件完整性
- 修复文件权限
- 重新创建共享资源链接
快照文件丢失
如果快照文件丢失:
- 无法验证版本完整性
- 回滚可能失败
- 共享资源清理受影响
恢复:
- 从备份恢复
- 重新生成快照(如果可能)
- 手动验证文件