logo
0
0
Login
docs: 更新 README 文件以反映同步脚本的最新功能和参数

🌀 Git 仓库 ➜ CNB 同步自动任务

该项目提供一个轻量的 Git 仓库同步脚本update.sh),用于将 GitHub、GitLab 等 Git 托管平台的仓库定期同步至 CNB(https://cnb.cool)平台。 支持自动检测组织、仓库、站点配置及 Git 镜像同步,可在 .cnb.yml 中配置为定时任务。


📦 功能概述

功能说明
✅ 自动检测组织是否存在无权限时自动跳过
✅ 自动检测仓库是否存在不存在时尝试创建,存在则跳过
✅ 自动设置源仓库站点链接自动设置仓库的 site 字段指向源仓库地址
✅ 支持两种推送模式mirror(完全镜像)或 safe(仅分支+标签)
✅ 自动执行 Git LFS 同步自动安装并推送 LFS 对象
✅ 支持批量同步 (repos.yml)一次同步多个仓库
✅ 可集成 CNB 流水线自动定时执行任务

⚙️ 环境准备

需要在执行环境(容器或流水线)中设置以下环境变量:

export MY_CNB_TOKEN="your_cnb_api_token"

💡 如果未设置 MY_CNB_TOKEN,脚本会自动使用环境变量 CNB_TOKEN。 即使该 Token 没有创建组织或仓库的权限,也可正常执行同步(会自动跳过创建步骤)。


🚀 单仓库同步示例

chmod +x update.sh # 同步 GitHub 仓库到 CNB 仓库 ./update.sh --github-repo user/repo --cnb-repo-path group/sub/repo --push-mode mirror # 或使用自定义 Git URL(如 GitLab) ./update.sh --git-url https://gitlab.com/org/repo.git --cnb-repo-path group/sub/repo --push-mode mirror

参数说明:

参数说明示例
--github-repoGitHub 仓库路径(<user>/<repo>user/repo
--git-url完整 Git 仓库地址(可选,优先级高于 --github-repohttps://gitlab.com/org/repo.git
--cnb-repo-pathCNB 完整仓库路径(<group>/<subgroup>/<repo>group/sub/repo
--push-mode推送模式(默认 mirrorsafemirror

📚 批量同步模式(默认)

在脚本同目录下放置一个 repos.yml 文件,配置仓库映射规则:

repos: - source: user/repo cnb_repo_path: group/sub/repo push_mode: mirror - source: user/repo cnb_repo_path: group/sub/repo push_mode: safe - source: https://gitlab.com/org/repo.git cnb_repo_path: group/sub/repo push_mode: mirror

然后直接运行:

bash update.sh

脚本会自动读取 YAML 配置并同步每个仓库。 如果仓库或组织没有权限创建,会自动检测并跳过,只执行同步部分。

💡 source 字段支持两种形式:

  • GitHub 短名:user/repo(自动转换为 https://github.com/user/repo.git
  • 完整 Git URL:https://gitlab.com/org/repo.git(支持任意 Git 托管平台)

🧩 修改流水线 .cnb.yml

以下是一个推荐的定时同步配置模板:

.crontab-job: &crontab-job - docker: image: docker.cnb.cool/bring/examples/defaultbuildenv:latest runner: cpus: 1 stages: - name: 更新仓库镜像 script: | chmod +x update.sh # 默认批量模式(读取 repos.yml) ./update.sh # 或手动指定单仓库 # ./update.sh --github-repo user/repo --cnb-repo-path group/sub/repo # 或使用自定义 Git URL # ./update.sh --git-url https://gitlab.com/org/repo.git --cnb-repo-path group/sub/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 分钟调试用

💡 日志与调试

执行时会输出详细操作日志,例如:

📚 检测到 repos.yml,进入 YAML 批量同步模式... 🚀 开始同步任务: https://github.com/user/repo → group/sub/repo [mirror] ✅ 组织已存在: group ✅ 仓库已存在,直接更新站点并继续 📥 克隆 CNB 仓库 origin 🔧 添加源远程:source 📥 从源仓库增量 fetch 🚀 Mirror 推送到 CNB ✅ 完成同步

调试方式:

bash -x update.sh

或仅同步单个仓库进行测试:

./update.sh --github-repo user/repo --cnb-repo-path group/sub/repo --push-mode mirror

⚙️ 高级选项

环境变量说明
MY_CNB_TOKEN自定义 Token(优先)
CNB_TOKEN默认环境 Token(可读写但无创建权限)
GIT_TERMINAL_PROMPT=0防止 Git 交互提示
TZ=Asia/Shanghai设置时区(建议)

🧾 授权信息

  • License: MIT
  • 依赖:git, curl, jq, git-lfs
  • 作者:BringCDN
  • 项目用途:用于自动化同步 Git 托管平台(GitHub、GitLab 等)的公共仓库至 CNB 内部镜像仓库