Skip to content

CNB流水线代码自动同步至GitHub私有仓库_解决方案.md

前提条件

  • CNB (cnb.cool) 私有仓库
  • GitHub 账户和私有仓库
  • Git 基础操作知识

架构原理

  • 主仓库: CNB 私有仓库(开发、构建、部署)
  • 镜像仓库: GitHub 私有仓库(只读备份)
  • 同步机制: CNB流水线 + Docker容器 + Git强制推送

步骤一:创建GitHub接收仓库

  1. 登录GitHub,点击右上角 +New repository
  2. 输入仓库名称(如 my-project-backup
  3. 选择 Private(私有)
  4. 创建仓库,保持为空

步骤二:获取GitHub访问令牌

  1. 进入 GitHub SettingsDeveloper settings
  2. 选择 Personal access tokensTokens (classic)
  3. 点击 Generate new token (classic)
  4. 配置权限:
    • Note: 填写备注(如 CNB Sync Token
    • Expiration: 设置有效期(推荐90天)
    • Repo: 勾选 repo (Full control of private repositories)
  5. 生成后立即复制 ghp_ 开头的令牌

⚠️ 令牌仅在生成时可见,关闭页面后无法再次查看

步骤三:在CNB配置密钥

项目密钥仓库存放

创建专用密钥仓库 my-secrets,存放 envs.yml

yaml
# my-secrets/envs.yml
GITHUB_TOKEN: "ghp_xxxxxxxxxxxxxxxxxxxx"

在流水线中通过 imports 引入。

步骤四:编写流水线配置

在CNB仓库根目录创建 .cnb.yml

yaml
# .cnb.yml
main:
  push:
    # 多项目共用时取消注释
    # - imports: https://cnb.cool/你的用户名/my-secrets/-/blob/main/envs.yml
    
    stages:
      # 代码同步到GitHub(备份优先)
      - name: Sync to GitHub
        image: alpine/git
        # 单项目配置时取消注释
        # imports:
        #   - secrets/GITHUB_TOKEN
        script: |
          # 检查令牌
          if [ -z "$GITHUB_TOKEN" ]; then 
            echo "Error: GITHUB_TOKEN is missing"; 
            exit 1; 
          fi
          
          # 配置Git身份
          git config --global user.email "sync-bot@cnb.cool"
          git config --global user.name "CNB Sync Bot"
          
          # 添加GitHub远程仓库
          git remote add github \
            https://oauth2:$GITHUB_TOKEN@github.com/用户名/仓库名.git
          
          # 强制推送(确保完全镜像)
          git push --force github HEAD:main

      # 正常构建流程(示例)
      - name: Build Project
        image: node:20
        script: |
          npm config set registry https://mirrors.cloud.tencent.com/npm/
          npm install
          npm run build

技术要点解析

1. 为什么使用 --force

  • 镜像原则: GitHub作为CNB的"影子",需要完全一致
  • 避免冲突: CI环境通常是浅克隆,--force 可忽略非快进式提交冲突

2. 安全性保障

  • 令牌隐藏: 通过环境变量传递,日志不显示明文
  • HTTPS传输: 数据全程加密传输

3. 性能优化

  • 将同步任务放在流水线第一步
  • Git同步通常只需几秒钟

验证方法

  1. 在CNB修改文件并提交
  2. 查看CNB流水线日志,确认 Sync to GitHub 步骤成功
  3. 检查GitHub仓库:
    • 代码已更新
    • 提交记录与CNB一致
    • 作者和时间戳完整保留

最佳实践

遵循单向原则:所有代码修改、合并请求均在CNB进行,GitHub仅作为只读备份,避免直接在GitHub修改代码。

用心记录,持续学习 | CNB