3.0 KiB
3.0 KiB
Git Repository Mirroring Workflow
목적
- 외부 SSH Git 저장소(센터 공용 코드 관리용 깃)의 특정 브랜치를 Gitea
center_dev조직의 개별 저장소로 순차 복제합니다. - 브랜치마다 대응 저장소명을 결정해
main브랜치로 강제 푸시하며, 태그 동기화 옵션을 제공합니다.
실행 환경
- Runner 라벨:
internal(해당 라벨이 있는 셀프호스티드 러너에서만 실행) - 예약 실행: 매일 02:07 KST (
cron: 7 2 * * *) - 수동 실행:
workflow_dispatch입력을 통해 선택 브랜치만 실행 가능
시크릿/변수
secrets.SSH_PRIVATE_KEY: 소스 저장소 접근용 SSH 키secrets.BASE_GITEA_TOKEN: Gitea API/푸시 토큰vars.BASE_GITEA_URL: Gitea URL (예: https://gitea.example.com)vars.BASE_GITEA_USER: 토큰 소유자 IDvars.NOTIFY_WEBHOOK(선택): 채팅 웹훅 URL. 없으면 알림 미전송.vars.SYNC_TAGS(선택):"false"로 설정 시 태그 동기화 비활성화. 미설정 시 태그를 동기화함.
저장소 이름 매핑 규칙
Develop_Net8→baseDevelop_Net8_*→*부분만 사용 (예:Develop_Net8_heh→heh)Develop_*/develop_*→ 접두사 제거 (예:develop_boxzainer→boxzainer)- 그 외 브랜치는 브랜치명을 그대로 사용
sourceRepo/branch,alias형태를 사용하면 alias로 최종 저장소명을 강제 설정- 동일 이름 타겟이 이미 존재하면 소스가 달라도 덮어쓰기 가능하므로 목록 구성 시 주의
branch_list 사용법
- 기본 실행 시
branch_list파일을 위에서 아래로 순차 처리 #로 시작하거나 줄 내#이후는 주석으로 무시sourceRepo/branch또는sourceRepo/branch,alias형식을 한 줄에 하나씩 기입
수동 실행 입력
branches: 콤마로 구분한sourceRepo/branch또는sourceRepo/branch,alias목록- 입력이 비어 있으면
branch_list전체를 처리
동작 개요
- 브랜치 존재 여부 확인 (
git ls-remote) - 타겟 저장소 존재 확인/생성 (
default_branch=main) - 커밋 동일 시 skip (알림 전송)
- 신규 생성: 소스 브랜치를 bare single-branch clone 후
main으로 강제 푸시 - 기존 존재: 빈 bare 저장소 init → 타겟
main커밋을 shallow-exclude로 지정해 소스 브랜치만 fetch →main으로 강제 푸시 - 태그 동기화가 켜져 있으면 태그 fetch/push(강제+prune)
- 기본 브랜치를
main으로 패치, 임시 디렉터리 정리
알림
NOTIFY_WEBHOOK설정 시 시작/성공/실패/건너뛰기 상태를 KST 타임스탬프와 소요시간, 모드(신규/증분)와 함께 전송
주의사항
- 대용량 데이터로 인해 순차 실행을 전제로 함(병렬 실행 비권장)
- 태그 푸시는
--force --prune로 수행되어 소스에 없는 태그가 타겟에서 제거됨 - 동일 저장소명을 의도하지 않은 소스 조합으로 사용할 경우 덮어쓰기가 발생할 수 있으므로
branch_list/alias를 신중히 관리