54 lines
1.9 KiB
YAML
54 lines
1.9 KiB
YAML
stages:
|
|
- sync
|
|
|
|
sync-to-github:
|
|
stage: sync
|
|
tags:
|
|
- sync
|
|
image: ruby:3.3
|
|
rules:
|
|
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_TAG == null'
|
|
when: on_success
|
|
- when: never
|
|
# 关闭浅克隆,拉取完整提交记录
|
|
variables:
|
|
GIT_DEPTH: 0
|
|
script:
|
|
# 1. 初始化Git配置,复用提交者信息
|
|
- echo "当前提交者信息:$CI_COMMIT_AUTHOR"
|
|
- GIT_AUTHOR_NAME=$(echo "$CI_COMMIT_AUTHOR" | cut -d'<' -f1 | xargs)
|
|
- GIT_AUTHOR_EMAIL=$(echo "$CI_COMMIT_AUTHOR" | cut -d'<' -f2 | cut -d'>' -f1 | xargs)
|
|
- git config --global user.name "$GIT_AUTHOR_NAME"
|
|
- git config --global user.email "$GIT_AUTHOR_EMAIL"
|
|
- git config --global http.sslVerify false
|
|
# 核心新增:禁用HTTP2,强制使用HTTP/1.1(解决HTTP2 framing layer帧层错误)
|
|
- git config --global http.version HTTP/1.1
|
|
- git config --global http.proxy $PROXY_ADDR
|
|
- git config --global https.proxy $PROXY_ADDR
|
|
|
|
|
|
# 2. 构造带PAT的GitHub推送地址
|
|
- GITHUB_PUSH_URL="https://$GITHUB_PAT@${GITHUB_REPO_URL#https://}"
|
|
- echo "同步目标:GitHub仓库 $GITHUB_REPO_URL"
|
|
|
|
# 3. 安全处理GitHub远程仓库
|
|
- git remote rm github || true
|
|
- git remote add github "$GITHUB_PUSH_URL"
|
|
|
|
# 4. 核心修复:基于分离HEAD创建本地同名分支(解决refspec不匹配问题)
|
|
- echo "基于分离HEAD创建本地分支 $CI_COMMIT_BRANCH"
|
|
- git checkout -b $CI_COMMIT_BRANCH
|
|
|
|
# 5. 拉取GitHub远程最新代码(避免冲突,新分支拉取失败不影响)
|
|
- git fetch github || true
|
|
|
|
# 6. 单分支精准推送(GitHub自动创建不存在的分支)
|
|
- echo "开始同步GitLab分支 $CI_COMMIT_BRANCH 到GitHub..."
|
|
- git push github $CI_COMMIT_BRANCH:$CI_COMMIT_BRANCH -f
|
|
|
|
retry:
|
|
max: 2
|
|
when:
|
|
- runner_system_failure
|
|
- stuck_or_timeout_failure
|
|
- api_failure |