외부 Git 저장소(GitHub, GitLab 등)를 내부 GitLab에 그대로 복제 및 동기화하는 방법입니다.
사전 준비
- 내부 GitLab 계정 생성: 내부 GitLab에서 사용할 프로젝트를 미리 생성하세요.
- 외부 저장소 접근: 외부 저장소에 대한 읽기 권한을 확인하세요.
- 공개 저장소인 경우 읽기 권한이 기본으로 제공됩니다.
- 비공개 저장소인 경우 Personal Access Token(PAT) 또는 SSH 키를 생성하여 인증을 설정해야 합니다.
내부 GitLab 프로젝트 생성
- GitLab에 로그인
- 내부 GitLab에서 새로운 프로젝트를 생성합니다.
- 프로젝트 이름은 외부 저장소 이름과 동일하게 설정해도 좋습니다.
- 빈 저장소 준비
- 새로운 프로젝트를 생성할 때 "빈 프로젝트"를 선택하세요.
- 초기화 작업(Git ignore, README 추가 등)은 하지 않습니다.
외부 저장소 복제
내부 GitLab 저장소를 외부 저장소와 동기화하려면 먼저 외부 저장소의 URL을 복제합니다.
1. Git 명령어를 통한 초기 복제
# 외부 저장소 복제
git clone --mirror https://external-repository-url.git
# 복제한 저장소로 이동
cd repository-name.git
--mirror
옵션은 저장소의 모든 브랜치, 태그, Git 히스토리를 그대로 복사합니다.
2. 내부 GitLab 원격 저장소 추가
# 내부 GitLab 저장소를 원격으로 추가
git remote set-url --push origin https://internal-gitlab-repository-url.git
동기화 작업
1. 최초 푸시
내부 GitLab에 외부 저장소를 처음으로 푸시합니다.
git push --mirror
2. 정기 동기화 설정
외부 저장소의 변경 사항을 내부 저장소에 동기화하려면 주기적으로 다음 작업을 수행합니다.
- 외부 변경 사항 가져오기
git fetch origin
- 내부 GitLab에 푸시
git push --mirror
3. 자동화
동기화 작업을 자동화하려면 Crontab이나 CI/CD 파이프라인을 설정합니다.
# 매일 새벽 2시에 동기화 작업 수행
0 2 * * * cd /path/to/repository-name.git && git fetch origin && git push --mirror
추가적인 고려사항
- Access Token 사용
외부 저장소가 비공개인 경우 HTTPS URL에 Access Token을 포함해야 합니다.https://<username>:<token>@external-repository-url.git
- SSH 인증
SSH를 사용할 경우 SSH 키를 생성하고 외부 및 내부 저장소에 등록합니다.git clone --mirror git@external-repository-url.git
GitLab CI/CD를 활용한 동기화
GitLab의 CI/CD 파이프라인을 활용해 동기화를 자동화할 수도 있습니다.
.gitlab-ci.yml 예제
stages:
- sync
sync:
stage: sync
script:
- git clone --mirror https://external-repository-url.git temp-repo
- cd temp-repo
- git remote set-url --push origin https://internal-gitlab-repository-url.git
- git fetch origin
- git push --mirror
only:
- schedules
이 스크립트는 GitLab의 스케줄 기능과 함께 사용하여 동기화를 주기적으로 실행합니다.
결과 확인
- 내부 GitLab 저장소에 외부 저장소의 브랜치, 태그, 커밋 히스토리가 제대로 복제되었는지 확인하세요.
- 정기적인 동기화 작업이 올바르게 수행되는지 검증하세요.
이 과정을 통해 외부 저장소의 모든 데이터를 내부 GitLab으로 복제 및 동기화할 수 있습니다. n8n을 사용하여 외부 Git 저장소(GitHub, GitLab 등)를 내부 GitLab으로 복제 및 동기화하는 자동화 워크플로를 구성하는 방법입니다.
n8n 워크플로 개요
n8n은 HTTP Request 및 Shell Command 노드를 사용하여 외부 저장소를 내부 GitLab으로 복제 및 동기화할 수 있습니다.
워크플로 동작 흐름
- 외부 Git 저장소에서 데이터를 가져오기 (
HTTP Request
노드) - 내부 GitLab에 프로젝트 확인 및 생성 (
HTTP Request
노드) - Git 명령어 실행 (
Execute Command
노드)- 저장소 복제 및 동기화
- 결과 확인 및 알림
워크플로 상세 구성
1. Trigger Node
- 워크플로 시작 트리거를 설정합니다.
- 정기적으로 동기화를 실행하려면
Cron
노드를 사용하세요. - 예: 매일 새벽 2시 실행
{ "nodes": [ { "parameters": { "triggerTimes": { "item": [ { "mode": "everyDay", "hour": 2 } ] } }, "name": "Cron", "type": "n8n-nodes-base.cron", "typeVersion": 1, "position": [ 250, 300 ] } ] }
- 정기적으로 동기화를 실행하려면
2. HTTP Request (외부 저장소 확인)
- 외부 저장소 정보를 가져옵니다.
- 노드 설정
- 메서드:
GET
- URL:
https://api.github.com/repos/{owner}/{repo}
(GitHub 예시) - 인증: Personal Access Token
- 출력 값
- 외부 저장소 URL
- 메서드:
3. HTTP Request (내부 GitLab 저장소 확인 및 생성)
- 내부 GitLab에 프로젝트가 존재하는지 확인하고 없으면 생성합니다.
- 노드 설정
- 메서드:
GET
- URL:
https://gitlab.example.com/api/v4/projects/{project_id_or_name}
- 인증: GitLab Personal Access Token
- 메서드:
- 없는 경우
- 새 프로젝트 생성
- 메서드:
POST
- URL:
https://gitlab.example.com/api/v4/projects
- Body:
{ "name": "repository-name", "visibility": "private" }
- 메서드:
- 새 프로젝트 생성
4. Execute Command (Git 명령어 실행)
Git 명령어를 실행하여 동기화 작업을 수행합니다.
명령어 구성
# Git 저장소 복제
git clone --mirror https://external-token@github.com/owner/repository.git /tmp/repository.git
# 내부 저장소로 Push 설정
cd /tmp/repository.git
git remote set-url --push origin https://internal-token@gitlab.example.com/owner/repository.git
# 동기화
git fetch origin
git push --mirror
노드 설정
- 명령어: 위 Git 명령어 입력
- 실행 환경
- n8n 서버가 Git 명령어를 실행할 수 있어야 합니다.
- 필요한 경우 Git 및 SSH 키를 설정하세요.
5. 알림
- 동기화 성공 여부를 Slack, 이메일 등으로 알림 설정.
- Slack 노드 예시
- 메서드:
POST
- URL:
https://slack.com/api/chat.postMessage
- Body:
{ "channel": "#notifications", "text": "Git 저장소가 성공적으로 동기화되었습니다." }
- 메서드:
워크플로 실행 및 모니터링
- n8n에서 워크플로를 저장하고 활성화합니다.
- 워크플로가 실행되면 동기화 작업이 진행됩니다.
- 내부 GitLab에서 저장소 및 히스토리를 확인하세요.
추가 고려사항
- 오류 처리
- 동기화 실패 시 알림을 설정합니다.
- HTTP Response 코드 또는 Git 명령어 실행 결과를 기반으로 예외 처리를 추가하세요.
- 보안
- Access Token은 환경 변수 또는 n8n Credentials에 저장하세요.
- 토큰을 명령어에 직접 포함하지 않도록 주의합니다.
이 과정을 통해 n8n을 사용하여 외부 저장소를 내부 GitLab으로 자동 복제 및 동기화할 수 있습니다. 필요에 따라 알림 또는 추가 처리를 설정하여 워크플로를 확장할 수 있습니다.
728x90
댓글