-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy path.gitlab-ci.yml
More file actions
65 lines (62 loc) · 3.12 KB
/
.gitlab-ci.yml
File metadata and controls
65 lines (62 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 同步模板 - 用于定时和手动触发的完整同步(改进版:使用merge策略保持commit ID稳定)
.github_sync_template:
stage: sync
variables:
GITHUB_REPO_PATH: "LianjiaTech/bella-queue"
GITLAB_REPO_PATH: "ai-arch/bella-batch"
GIT_USER_NAME: "GitLab CI Bot"
GIT_USER_EMAIL: "dy7tffuid54yu"
script:
- echo "开始调试变量..."
- if [ -z "$PROJECT_ACCESS_TOKEN" ]; then echo "❌ PROJECT_ACCESS_TOKEN 为空"; exit 1; fi
- if [ -z "$GITHUB_ACCESS_TOKEN" ]; then echo "❌ GITHUB_ACCESS_TOKEN 为空"; exit 1; fi
- echo "✅ 变量检查通过"
- echo "配置Git用户信息..."
- git config user.name "${GIT_USER_NAME}"
- git config user.email "${GIT_USER_EMAIL}"
- echo "配置GitHub远程仓库..."
- git remote remove github || true
- git remote add github "https://oauth2:${GITHUB_ACCESS_TOKEN}@github.com/${GITHUB_REPO_PATH}.git"
- echo "获取GitHub最新代码..."
- git fetch github "${GITHUB_SOURCE_BRANCH}"
- echo "分析分支状态..."
- LOCAL_HEAD=$(git rev-parse HEAD)
- GITHUB_HEAD=$(git rev-parse "github/${GITHUB_SOURCE_BRANCH}")
- echo "GitLab当前HEAD $LOCAL_HEAD"
- echo "GitHub远程HEAD $GITHUB_HEAD"
- if [ "$LOCAL_HEAD" = "$GITHUB_HEAD" ]; then echo "本地分支已是最新,无需同步"; exit 0; fi
- echo "检查分支差异..."
- GITLAB_ONLY=$(git rev-list --count "github/${GITHUB_SOURCE_BRANCH}"..HEAD 2>/dev/null || echo "0")
- GITHUB_ONLY=$(git rev-list --count HEAD.."github/${GITHUB_SOURCE_BRANCH}" 2>/dev/null || echo "0")
- echo "GitLab独有提交数 $GITLAB_ONLY"
- echo "GitHub独有提交数 $GITHUB_ONLY"
- |
if [ "$GITLAB_ONLY" -gt 0 ] && [ "$GITHUB_ONLY" -gt 0 ]; then
echo "双向存在新提交,执行安全merge策略..."
git merge "github/${GITHUB_SOURCE_BRANCH}" -m "chore: sync from github/${GITHUB_SOURCE_BRANCH} [保持双向提交历史]" || (echo "merge失败,存在冲突需手动解决"; exit 1)
elif [ "$GITHUB_ONLY" -gt 0 ]; then
echo "GitHub有新提交,执行快进合并..."
git merge "github/${GITHUB_SOURCE_BRANCH}" --ff-only || git merge "github/${GITHUB_SOURCE_BRANCH}" -m "chore: sync from github/${GITHUB_SOURCE_BRANCH}"
else
echo "仅GitLab有新提交,无需同步"
exit 0
fi
- echo "配置推送URL..."
- git remote set-url origin "https://oauth2:${PROJECT_ACCESS_TOKEN}@git.lianjia.com/${GITLAB_REPO_PATH}.git"
- echo "推送更新到 ${GITLAB_TARGET_BRANCH} 分支..."
- git push origin HEAD:"${GITLAB_TARGET_BRANCH}" || (echo "推送失败,请检查访问令牌权限"; exit 1)
- echo "✅ 同步完成!保持了commit历史完整性"
stages:
- sync
# 完整同步任务 - 定时和手动触发
github_sync_develop:
extends: [.github_sync_template]
variables:
GITHUB_SOURCE_BRANCH: "develop"
GITLAB_TARGET_BRANCH: "dev"
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_BRANCH == "dev"'
when: always
- if: '$CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == "dev"'
when: always
- when: never