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

  1. Truy cập vào GitLabProject SettingsCI/CDVariables.
  2. 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ánh main.

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. 🚀