基于 GitLab Runner 从 GitHub 同步代码到 GitLab

SOURCE_URL:来源 GitHub 组织/用户地址,默认 https://github.com/kubernetes-loong64

SOURCE_REPO:来源仓库名称

DEST_USER:目标 gitlab 认证用户名,默认 gitlab-ci-token

DEST_TOKEN:目标 gitlab 认证 token(需在 CI/CD 变量中配置)

DEST_HOST:目标 gitlab 实例域名

DEST_GROUP:目标 gitlab 接收代码的命名空间

DEST_REPO:目标仓库名称,默认与 SOURCE_REPO 相同,可单独指定(如 .githubgithub

下方代码利用了锚点,复制 sync-buildx job,并修改 job 名称和该 job 下的 SOURCE_REPO 即可。如需源与目标仓库名不同,额外指定 DEST_REPO

stages:
  - sync

.sync-template:
  stage: sync
  image: $SYNC_IMAGE
  variables:
    SYNC_IMAGE: registry.cn-qingdao.aliyuncs.com/kubernetesloong64/git-loong64:v2.54.0-debian
    SOURCE_URL: https://github.com/kubernetes-loong64
    DEST_USER: gitlab-ci-token
    DEST_HOST: gitlab.xuxiaowei.com.cn
    DEST_GROUP: kubernetes-loong64
  before_script:
    - git config --global user.name "${GITLAB_USER_NAME:-CI Sync Bot}"
    - git config --global user.email "${GITLAB_USER_EMAIL:-ci-sync@xuxiaowei.com.cn}"
    - export DEST_REPO="${DEST_REPO:-$SOURCE_REPO}"
  script:
    - |
      echo "==> Syncing ${SOURCE_REPO} -> ${DEST_REPO}"
      git clone --mirror "${SOURCE_URL}/${SOURCE_REPO}.git"
      cd "${SOURCE_REPO}.git"
      git push --mirror "https://${DEST_USER}:${DEST_TOKEN}@${DEST_HOST}/${DEST_GROUP}/${DEST_REPO}.git"
      echo "==> Done: ${SOURCE_REPO} -> ${DEST_REPO}"
  tags:
    - 3A5000-docker

sync-buildx:
  extends: .sync-template
  variables:
    SOURCE_REPO: buildx-loong64

sync-github:
  extends: .sync-template
  variables:
    SOURCE_REPO: .github
    DEST_REPO: github