该项目提供一个轻量的 GitHub 仓库同步脚本(update.sh),用于将 GitHub 上的仓库定期同步至 CNB(https://cnb.cool)平台。
支持自动检测组织、仓库、站点配置及 Git 镜像同步,可在 .cnb.yml 中配置为定时任务。
| 功能 | 说明 |
|---|---|
| ✅ 自动检测组织是否存在 | 无权限时自动跳过 |
| ✅ 自动检测仓库是否存在 | 不存在时尝试创建,存在则跳过 |
| ✅ 自动设置 GitHub 站点链接 | 设置 site=https://github.com/<repo> |
| ✅ 支持两种推送模式 | mirror(完全镜像)或 safe(仅分支+标签) |
| ✅ 自动执行 Git LFS 同步 | 自动安装并推送 LFS 对象 |
✅ 支持批量同步 (repos.txt) | 一次同步多个仓库 |
| ✅ 可集成 CNB 流水线 | 自动定时执行任务 |
需要在执行环境(容器或流水线)中设置以下环境变量:
export MY_CNB_TOKEN="your_cnb_api_token"
💡 如果未设置
MY_CNB_TOKEN,脚本会自动使用环境变量CNB_TOKEN。 即使该 Token 没有创建组织或仓库的权限,也可正常执行同步(会自动跳过创建步骤)。
chmod +x update.sh
# 同步 GitHub 仓库 Homebrew/brew 到 CNB 仓库 Bring/Temp/brew
./update.sh --github-repo Homebrew/brew --cnb-repo-path Bring/brew --push-mode mirror
参数说明:
| 参数 | 说明 | 示例 |
|---|---|---|
--github-repo | GitHub 仓库路径(<user>/<repo>) | Homebrew/brew |
--cnb-repo-path | CNB 完整仓库路径(<group>/<subgroup>/<repo>) | Bring/Temp/brew |
--push-mode | 推送模式(默认 mirror) | safe 或 mirror |
在脚本同目录下放置一个 repos.txt 文件,每行一个映射规则:
# 格式: <github_repo> <cnb_repo_path> [push_mode] Homebrew/brew Bring/brew mirror certimate-go/certimate Bring/certimate safe AlistGo/docs Bring/docs mirror
然后直接运行:
./update.sh
脚本会自动逐行读取并同步每个仓库。 如果仓库或组织没有权限创建,会自动检测并跳过,只执行同步部分。
以下是一个推荐的定时同步配置模板:
.crontab-job: &crontab-job
- docker:
image: docker.cnb.cool/bring/examples/defaultbuildenv:latest
runner:
cpus: 1
stages:
- name: 更新仓库镜像
script: |
chmod +x update.sh
# 默认批量模式(读取 repos.txt)
./update.sh
# 或手动指定单仓库
# ./update.sh --github-repo your-github-repo --cnb-repo-path your-cnb-repo
$:
vscode:
- docker:
image: docker.cnb.cool/bring/examples/defaultbuildenv:latest
services:
- vscode
- docker
main:
# 每小时执行一次
"crontab: 0 * * * *": !reference [.crontab-job]
| 表达式 | 执行频率 | 说明 |
|---|---|---|
"crontab: 0 * * * *" | 每小时 | 推荐配置 |
"crontab: 0 0 * * *" | 每天凌晨执行 | 适合低频同步 |
"crontab: */10 * * * *" | 每 10 分钟 | 调试用 |
执行时会输出详细操作日志,例如:
📥 克隆 GitHub 仓库: Homebrew/brew 🔧 配置 Git LFS 🚀 使用 push --mirror ✅ 完成仓库同步
调试方式:
bash -x update.sh
或仅同步部分仓库:
grep -v '^#' repos.txt | head -n 1 | xargs -n3 ./update.sh --github-repo
| 环境变量 | 说明 |
|---|---|
MY_CNB_TOKEN | 自定义 Token(优先) |
CNB_TOKEN | 默认环境 Token(可读写但无创建权限) |
GIT_TERMINAL_PROMPT=0 | 防止 Git 交互提示 |
TZ=Asia/Shanghai | 设置时区(建议) |
git, curl, jq, git-lfs