Hướng dẫn đồng bộ repository từ GitLab sang GitHub
1. Thêm biến môi trường trên GitLab
Để đồng bộ, bạn cần tạo hai biến môi trường trên GitLab:
- GITLAB_PERSONAL_ACCESS_TOKEN: Token cá nhân dùng để truy cập GitLab repository.
- GITHUB_TOKEN: Token cá nhân dùng để push code lên GitHub repository.
Cách thêm biến môi trường trên GitLab
- Truy cập vào GitLab → Project Settings → CI/CD → Variables.
- Chọn Add variable và thêm các biến sau:
Key:
GITLAB_PERSONAL_ACCESS_TOKEN
Value: (Token cá nhân GitLab của bạn)
Type: Variable
Mask: ✅ (Nên bật để ẩn giá trị này trong logs)
Key:
GITHUB_TOKEN
Value: (Token cá nhân GitHub của bạn)
Type: Variable
Mask: ✅ (Nên bật để bảo mật thông tin)
2. Chỉnh sửa file .gitlab-ci.yml
Thêm đoạn script dưới đây vào file .gitlab-ci.yml
để tự động đồng bộ từ GitLab sang GitHub:
stages:
- deploy
deploy_to_github:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache git
script:
- git config --global user.email "nguyenngocbinhneu@gmail.com"
- git config --global user.name "Nguyen Ngoc Binh"
- echo "Cloning repository..."
- git clone --mirror https://oauth2:$GITLAB_PERSONAL_ACCESS_TOKEN@gitlab.com/nguyenngocbinh/papers.git || (echo "Clone failed"; exit 1)
- cd papers.git
- echo "Adding GitHub remote..."
- git remote add github https://$GITHUB_TOKEN@github.com/nguyenngocbinh/papers.git
- echo "Pushing to GitHub..."
- git push --mirror github || (echo "Push failed"; exit 1)
only:
- main
Giải thích các bước quan trọng:
git clone --mirror
: Clone repository từ GitLab ở chế độ mirror để giữ nguyên lịch sử commit.git remote add github
: Thêm GitHub repository làm remote mới.git push --mirror github
: Đẩy toàn bộ repository lên GitHub.only: - main
: Chỉ thực hiện job này trên nhánhmain
.
Lưu ý quan trọng:
- Cần cấp quyền phù hợp cho cả hai tokens để đảm bảo có thể đọc từ GitLab và ghi lên GitHub.
- Đảm bảo rằng repository trên GitHub đã được tạo sẵn trước khi chạy pipeline.
- Nếu repository có dung lượng lớn, hãy xem xét sử dụng Git LFS hoặc các phương pháp đồng bộ khác.
Sau khi thiết lập, mỗi khi có thay đổi trên GitLab, pipeline sẽ tự động đồng bộ lên GitHub. 🚀