自动清理
Shipfe 提供可配置的自动清理旧发布和未使用共享资源功能。
配置选项
keep_releases(推荐)
json
{
"keep_releases": 5,
"delete_old": false
}- 保留最近的 5 个发布
- 自动删除旧发布
- 与共享资源清理配合工作
delete_old(传统)
json
{
"delete_old": true
}- 在每次部署后删除所有旧发布
- 只保留当前部署
- 覆盖
keep_releases设置
清理过程
发布清理
- 按修改时间排序发布(最新优先)
- 保留指定数量的最近发布
- 完全删除旧发布目录
共享资源清理(当 enable_shared: true 时)
- 扫描所有剩余发布快照
- 收集当前被引用的所有哈希资源
- 从
shared/assets/删除未引用的文件
清理行为示例
清理前(7 个发布)
releases/
├── 20260301_100000/ (最旧)
├── 20260302_100000/
├── 20260303_100000/
├── 20260304_100000/
├── 20260305_100000/
├── 20260306_100000/
└── 20260307_100000/ (最新,当前)清理后(keep_releases: 3)
releases/
├── 20260305_100000/ (保留)
├── 20260306_100000/ (保留)
└── 20260307_100000/ (保留,当前)旧发布自动删除
监控清理
bash
# 检查当前发布
ls -la releases/
# 在 shipfe.log 中查看清理日志
tail -f shipfe.log | grep -i "cleanup\|remove"手动清理
强制清理
bash
# 重新部署会触发清理
shipfe deploy自定义清理脚本
bash
#!/bin/bash
# 自定义清理脚本示例
DEPLOY_PATH="/var/www/myapp"
KEEP_RELEASES=5
# 进入发布目录
cd "$DEPLOY_PATH/releases"
# 获取要删除的旧发布
OLD_RELEASES=$(ls -t | tail -n +$((KEEP_RELEASES + 1)))
# 删除旧发布
for release in $OLD_RELEASES; do
echo "Removing old release: $release"
rm -rf "$release"
done清理策略选择
滚动发布策略
json
{
"keep_releases": 5,
"delete_old": false
}适用场景:
- 需要频繁回滚
- 存储空间充足
- 重视部署历史
最小化策略
json
{
"delete_old": true
}适用场景:
- 存储空间有限
- 部署频繁
- 不需要历史版本
共享资源清理
当启用共享资源时,清理过程更复杂:
- 扫描快照:检查所有保留发布的快照文件
- 收集引用:汇总所有仍在使用的共享资源哈希
- 安全删除:只删除完全未引用的共享文件
示例清理过程
保留发布:v1, v2, v3
v1 使用的共享资源:a.js, b.css
v2 使用的共享资源:a.js, c.png
v3 使用的共享资源:b.css, d.svg
仍在使用的资源:a.js, b.css, c.png, d.svg
可删除的资源:(无)
结果:所有共享资源都被保留性能影响
磁盘I/O
- 清理操作主要涉及文件删除
- 对运行中的应用无影响
- 可以在低峰期执行
存储优化
- 自动释放磁盘空间
- 防止日志和临时文件积累
- 维持健康的存储使用率
安全考虑
数据保护
- 清理前验证快照完整性
- 只删除确认未使用的文件
- 保留最近的多个版本作为安全网
权限检查
- 验证删除权限
- 避免删除系统文件
- 记录所有清理操作
故障排除
清理失败
Warning: Failed to remove old release可能原因:
- 文件被进程锁定
- 权限不足
- 文件系统问题
解决方案:
- 检查文件锁定:
lsof +D /path/to/release - 修复权限:
chmod -R 755 /var/www/myapp - 手动清理:
rm -rf /path/to/old/release
共享资源清理问题
Warning: Failed to cleanup shared assets可能原因:
- 快照文件损坏
- 硬链接引用错误
- 权限问题
解决方案:
- 验证快照文件
- 检查硬链接:
ls -la shared/assets/ - 重新生成共享资源
磁盘空间不足
如果清理无法释放足够空间:
- 检查大文件:
du -sh releases/* - 手动删除旧版本
- 增加
keep_releases的值 - 考虑迁移到更大磁盘
最佳实践
- 监控存储使用:定期检查磁盘使用情况
- 设置合理保留数量:根据部署频率调整
keep_releases - 备份重要版本:对关键版本进行额外备份
- 日志监控:监控清理操作的日志
- 定期审核:检查清理策略是否仍然合适