102 lines
2.8 KiB
Markdown
102 lines
2.8 KiB
Markdown
# OCIFLAB 备份脚本
|
||
|
||
## 功能
|
||
|
||
每天从 `WHITELIST_REPO_URL` 指定的仓库拉取 `whitelist.md`,解析其中的仓库列表进行备份:
|
||
|
||
- 拉取不到时,自动使用前一天保存的白名单缓存作为兜底。
|
||
- 超过 **1/3** 的仓库拉取/更新失败时,通过 **server酱3** 推送告警通知。
|
||
- 白名单第一次拉取失败且无前一天缓存时,同样推送告警。
|
||
- 对白名单中的仓库执行 `git pull --ff-only`(已有)或 `git clone --depth 1`(新仓库),pull 失败后自动回退为重新克隆。
|
||
- 通过 Git Access Token(Bearer 认证)访问仓库,不填 Token 则使用默认凭证。
|
||
- 将所有仓库打包为 `ociflab-backup-YYYYMMDD.zip`,保留最近 **7 天**,过期自动清理。
|
||
|
||
## 依赖
|
||
|
||
| 工具 | 用途 |
|
||
|------|------|
|
||
| `bash` | 脚本运行环境 |
|
||
| `git` | 仓库克隆与更新、白名单仓库拉取 |
|
||
| `curl` | server酱推送 |
|
||
| `zip` | 打包压缩 |
|
||
|
||
## 配置
|
||
|
||
编辑脚本顶部的配置变量:
|
||
|
||
```bash
|
||
# Git Access Token(用于认证,不填则不使用)
|
||
GIT_ACCESS_TOKEN=""
|
||
|
||
# 白名单仓库地址(clone 后读取其中的 whitelist.md)
|
||
WHITELIST_REPO_URL=""
|
||
|
||
# server酱3 配置(不填则跳过推送)
|
||
SERVERCHAN_UID="" # 填写你的 UID
|
||
SERVERCHAN_SENDKEY="" # 填写你的 SendKey
|
||
|
||
# 保留天数(默认 7 天)
|
||
RETENTION_DAYS=7
|
||
```
|
||
|
||
## whitelist.md 文件结构
|
||
|
||
```
|
||
https://git.ociflab.icu/userA/projectA
|
||
https://git.ociflab.icu/userB/projectB
|
||
```
|
||
|
||
每行一个完整的仓库 HTTPS 地址。
|
||
|
||
## 使用
|
||
|
||
### 手动执行
|
||
|
||
```bash
|
||
chmod +x ociflab-backup.sh
|
||
./ociflab-backup.sh
|
||
```
|
||
|
||
### 定时执行(crontab)
|
||
|
||
每天凌晨 3 点自动运行,日志输出到文件:
|
||
|
||
```bash
|
||
crontab -e
|
||
```
|
||
|
||
添加:
|
||
|
||
```
|
||
0 3 * * * /bin/bash /path/to/ociflab-backup/ociflab-backup.sh >> /path/to/ociflab-backup/backup.log 2>&1
|
||
```
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
ociflab-backup/
|
||
├── ociflab-backup.sh # 主脚本
|
||
├── whitelist_repo/ # 白名单仓库 clone 位置
|
||
├── whitelist_cache.md # 当天拉取的白名单缓存
|
||
├── whitelist_cache.md.yesterday # 前一天缓存(兜底)
|
||
├── work/ # 仓库克隆工作目录
|
||
├── archives/ # zip 归档(保留 7 天)
|
||
│ ├── ociflab-backup-20260501.zip
|
||
│ └── ociflab-backup-20260502.zip
|
||
└── README.md
|
||
```
|
||
|
||
## server酱3 告警
|
||
|
||
配置 `SERVERCHAN_UID` 和 `SERVERCHAN_SENDKEY` 后,以下场景会推送告警:
|
||
|
||
| 场景 | 标题示例 |
|
||
|------|----------|
|
||
| 白名单拉取失败且无缓存 | `OCIFLAB备份失败` |
|
||
| 白名单为空 | `OCIFLAB备份失败` |
|
||
| 超 1/3 仓库失败 | `OCIFLAB备份异常 - 5/10 仓库失败` |
|
||
|
||
未配置 server酱 则仅输出日志,不推送。
|
||
|
||
|