Skip to content

自动清理 ​

Shipfe 提供可配置的自动清理旧发布和未使用共享资源功能。

配置选项 ​

keep_releases(推荐) ​

json
{
  "keep_releases": 5,
  "delete_old": false
}
  • 保留最近的 5 个发布
  • 自动删除旧发布
  • 与共享资源清理配合工作

delete_old(传统) ​

json
{
  "delete_old": true
}
  • 在每次部署后删除所有旧发布
  • 只保留当前部署
  • 覆盖 keep_releases 设置

清理过程 ​

发布清理 ​

  1. 按修改时间排序发布(最新优先)
  2. 保留指定数量的最近发布
  3. 完全删除旧发布目录

共享资源清理(当 enable_shared: true 时) ​

  1. 扫描所有剩余发布快照
  2. 收集当前被引用的所有哈希资源
  3. 从 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
}

适用场景:

  • 存储空间有限
  • 部署频繁
  • 不需要历史版本

共享资源清理 ​

当启用共享资源时,清理过程更复杂:

  1. 扫描快照:检查所有保留发布的快照文件
  2. 收集引用:汇总所有仍在使用的共享资源哈希
  3. 安全删除:只删除完全未引用的共享文件

示例清理过程 ​

保留发布: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 的值
  • 考虑迁移到更大磁盘

最佳实践 ​

  1. 监控存储使用:定期检查磁盘使用情况
  2. 设置合理保留数量:根据部署频率调整 keep_releases
  3. 备份重要版本:对关键版本进行额外备份
  4. 日志监控:监控清理操作的日志
  5. 定期审核:检查清理策略是否仍然合适