Git Sync로 샌드박스 테스트
Git Sync로 샌드박스 테스트 (Testing sandboxes with Git Sync)
사용자가 모든 변경에 풀 리퀘스트를 열지 않고도 직접 푸시할 수 있는 샌드박스 브랜치를 사용해요. 샌드박스 브랜치는 단기 프로젝트와 실험을 위한 마찰이 적은 공간이며, 모든 대시보드를 Git에서 버전 관리로 유지해요. 작업이 준비되면 main 브랜치로 승격해요.
샌드박스는 write 워크플로가 활성화되어 Grafana와 동기화되는 같은 저장소의 브랜치예요. write 워크플로를 사용하면 대시보드를 저장할 때 샌드박스 브랜치에 직접 커밋되므로, 편집 경험이 Git Sync 없이 Grafana를 사용하는 것과 비슷하게 느껴져요. 차이점은 모든 변경이 여전히 Git에 커밋되어 아무것도 손실되지 않고 기록이 보존된다는 거예요.
이 시나리오는 모든 사람이 작업하는 단일 공유 샌드박스 브랜치를 사용해요. 공유 샌드박스는 얼마나 많은 사용자가 작업하든 관계없이 Repository 연결 하나만 사용하므로 스택당 10개 Repository 연결 제한 내에 잘 유지돼요. 더 엄격한 격리가 필요하다면 각 사용자에게 자신만의 샌드박스 브랜치를 줄 수 있어요. 개별 또는 공유 샌드박스를 참고해요.
출처: 문서
본문
사용자가 모든 변경에 풀 리퀘스트를 열지 않고도 직접 푸시할 수 있는 샌드박스 브랜치를 사용해요. 샌드박스 브랜치는 단기 프로젝트와 실험을 위한 마찰이 적은 공간이며, 모든 대시보드를 Git에서 버전 관리로 유지해요. 작업이 준비되면 main 브랜치로 승격해요.
샌드박스는 write 워크플로가 활성화되어 Grafana와 동기화되는 같은 저장소의 브랜치예요. write 워크플로를 사용하면 대시보드를 저장할 때 샌드박스 브랜치에 직접 커밋되므로, 편집 경험이 Git Sync 없이 Grafana를 사용하는 것과 비슷하게 느껴져요. 차이점은 모든 변경이 여전히 Git에 커밋되어 아무것도 손실되지 않고 기록이 보존된다는 거예요.
이 시나리오는 모든 사람이 작업하는 단일 공유 샌드박스 브랜치를 사용해요. 공유 샌드박스는 얼마나 많은 사용자가 작업하든 관계없이 Repository 연결 하나만 사용하므로 스택당 10개 Repository 연결 제한 내에 잘 유지돼요. 더 엄격한 격리가 필요하다면 각 사용자에게 자신만의 샌드박스 브랜치를 줄 수 있어요. 개별 또는 공유 샌드박스를 참고해요.
이 용도로 사용해요 (Use it for)
- 단기 프로젝트: 프로덕션에 도달할 수도 있고 아닐 수도 있는 작업을 위한 임시 공간이 필요해요.
- 공유 실험: 팀이 공유 프로덕션 대시보드에 영향을 주지 않고 한 공간에서 자유롭게 실험해요.
- 빠른 반복: 프로비저닝되지 않은 인스턴스의 마찰 없는 편집을 원하지만, Git 기록의 안전성도 원해요.
- 단계적 승격: 샌드박스에서 개발한 뒤 완성된 작업을
main브랜치로 승격해요.
아키텍처 (Architecture)
┌────────────────────────────────────────────────────────────┐
│ GitHub Repository │
│ Repository: your-org/grafana-manifests │
│ │
│ Branch: main ← Promoted, reviewed work │
│ └── grafana/ │
│ ├── dashboard-stable.json │
│ └── dashboard-approved.json │
│ │
│ Branch: sandbox ← Direct pushes, shared experiments │
│ └── grafana/ │
│ ├── alice/dashboard-wip.json │
│ └── bob/dashboard-test.json │
└────────────────────────────────────────────────────────────┘
↕
Git Sync (write workflow)
↕
┌─────────────────────────┐
│ Grafana Instance │
│ │
│ Repository Resource: │
│ - branch: sandbox │
│ - path: grafana/ │
│ - workflows: [write] │
│ │
│ Save = direct commit │
│ to sandbox │
└─────────────────────────┘
저장소 구조 (Repository structure)
Git에서:
your-org/grafana-manifests
├── (branch: main)
│ └── grafana/
│ ├── dashboard-stable.json
│ └── dashboard-approved.json
└── (branch: sandbox)
└── grafana/
├── alice/
│ └── dashboard-wip.json
└── bob/
└── dashboard-test.json
Grafana Dashboards 보기에서 (sandbox에 동기화됨):
Dashboards
└── 📁 grafana-manifests/
├── 📁 alice/
│ └── Work in Progress Dashboard
└── 📁 bob/
└── Test Dashboard
- (저장소 이름에서 온) "grafana-manifests"라는 폴더에 샌드박스 브랜치에서 동기화된 대시보드가 들어 있어요.
- 사용자는 그 안에
alice/,bob/같은 하위 폴더를 만들어 공유 브랜치 안에서 작업을 분리할 수 있어요. 하위 폴더는 동기화된 경로 아래의 하위 디렉터리에 매핑되므로 추가 Repository 연결이 필요 없어요. - 구성된 브랜치와 경로의 대시보드만 인스턴스에 나타나요.
- 대시보드를 저장하면 샌드박스 브랜치에 직접 커밋돼요.
구성 매개변수 (Configuration parameters)
write 워크플로를 활성화해 샌드박스 브랜치와 동기화하도록 Repository 리소스를 구성해요:
- Repository:
your-org/grafana-manifests - Branch:
sandbox - Path:
grafana/ - Workflows:
write
Repository 리소스에서 이렇게 보여요:
YAML
spec:
github:
url: 'https://github.com/your-org/grafana-manifests'
branch: 'sandbox'
path: grafana/
workflows:
- write
Note
write워크플로만 활성화하면 대시보드를 저장할 때 항상 샌드박스 브랜치에 직접 커밋돼요. 사용자가 Grafana에서 풀 리퀘스트를 열 수도 있게 하려면branch워크플로를 추가해요:workflows: [write, branch]. 자세한 내용은 Configuration parameters를 참고해요.
작동 방식 (How it works)
- 저장소에 샌드박스 브랜치를 만들어요. 예:
sandbox. write워크플로를 활성화해 그 브랜치를 동기화하는 Repository 리소스를 구성해요.- 사용자는 Grafana에서 대시보드를 만들고 편집하며, 선택적으로 자신의 하위 폴더에서 작업해요. 각 저장은 샌드박스 브랜치에 직접 커밋돼요.
- 경험이 Git Sync 없이 Grafana를 사용하는 것과 비슷하게 느껴지지만 모든 변경이 Git에 커밋돼요.
- 작업이 준비되면
main브랜치로 승격해요. 샌드박스를 main으로 승격을 참고해요.
개별 또는 공유 샌드박스 (Individual or shared sandboxes)
샌드박스는 모든 사람이 공유하거나 단일 사용자로 범위를 지정할 수 있어요. 각 샌드박스는 자체 Repository 연결을 통해 동기화되는 브랜치이므로, 선택은 스택당 10개 Repository 연결 제한에 따라 달라져요. 자세한 내용은 Usage and performance limitations를 참고해요.
- 공유 샌드박스 (권장):
sandbox같은 단일 브랜치를 모든 사용자가 공유하는 하나의 Repository 연결로 동기화해요. 얼마나 많은 사용자가 작업하든 연결 하나만 사용하므로 어떤 수의 사용자로도 확장돼요. 공유 브랜치 안에서 정리를 원한다면 하위 폴더(예:alice/,bob/)로 사용자의 작업을 분리해요. 모든 사람이 같은 브랜치에 커밋하므로 격리가 덜하다는 단점이 있어요. 위에서 설명한 설정이 이것이에요. - 개별 샌드박스: 각 사용자에게
sandbox/alice,sandbox/bob같은 자신의 브랜치를 주고, 각각 별도의 Repository 연결로 동기화해요. 가장 큰 격리를 제공하지만 모든 샌드박스가 10개 연결 중 하나를 소비하므로 사용자별 샌드박스는 많은 사용자로 확장되지 않아요. 소수의 활성 사용자나 단기 프로젝트를 위해 아껴두고, 작업이 끝나면 브랜치와 그 연결을 삭제해 연결을 확보해요.
두 접근 방식 모두 main으로 같은 방식으로 승격돼요. 샌드박스를 main으로 승격을 참고해요.
샌드박스 브랜치 보호 (Protect sandbox branches)
샌드박스 브랜치가 직접 푸시를 허용하더라도 파괴적인 작업으로부터 보호해요. Git 제공자에서 샌드박스 브랜치에 대한 강제 푸시를 차단할 것을 권장해요.
강제 푸시는 브랜치 기록을 다시 쓰고 Git Sync가 의존하는 커밋을 조용히 버릴 수 있어요. 이들을 차단하면 기록을 append-only로 유지해 Grafana와 Git이 일관되게 유지되고 대시보드가 현재 상태에 도달한 방법을 항상 추적할 수 있어요.
- GitHub: 샌드박스 브랜치(예:
sandbox또는 개별 샌드박스를 사용한다면sandbox/*패턴)에 대한 브랜치 보호 규칙(또는 ruleset)을 추가하고 Allow force pushes를 비활성화해요. - GitLab: 샌드박스 브랜치를 보호된 것으로 설정하고 강제 푸시를 허용하지 않아요.
- Bitbucket: 기록 재작성을 방지하는 샌드박스 브랜치에 대한 브랜치 권한을 추가해요.
보통 샌드박스 브랜치에서는 풀 리퀘스트를 선택 사항으로 유지해 사용자가 직접 푸시할 수 있게 하면서도 강제 푸시는 차단해요.
샌드박스를 main으로 승격 (Promote a sandbox to main)
샌드박스 작업이 준비되면 main 브랜치로 승격해요. 모든 것이 이미 Git에 있으므로 승격은 표준 Git 작업이에요. 검토 요구 사항에 맞는 옵션을 선택해요:
옵션 1: 샌드박스 브랜치에서 풀 리퀘스트 열기 (권장) (Option 1: Open a pull request from the sandbox branch (recommended))
Git 제공자를 사용해 샌드박스 브랜치에서 main으로 풀 리퀘스트를 열어요.
- Git 제공자에서
sandbox에서main으로 풀 리퀘스트를 열어요. - 변경 사항을 평범한 Git diff로 검토하고 필요에 따라 승인을 요청해요.
- 풀 리퀘스트를 병합해요.
main을 동기화하는 인스턴스는 다음 동기화에서 승격된 대시보드를 가져와요.
이렇게 하면 main에 도달하는 모든 것에 대한 전체 검토 및 감사 추적이 유지되며, main이 프로덕션을 공급할 때 권장되는 경로예요.
샌드박스 Repository 리소스에서 branch 워크플로도 활성화하면 사용자가 Git 제공자로 전환하는 대신 저장할 때 이 풀 리퀘스트를 Grafana에서 직접 열 수 있어요.
옵션 2: 선택한 변경 사항 체리픽 또는 병합 (Option 2: Cherry-pick or merge selected changes)
일부 대시보드만 준비되었을 때 전체 브랜치를 병합하는 대신 선택적으로 승격해요.
main을 기준으로 한 브랜치에 샌드박스 브랜치의 관련 커밋을 체리픽하거나 특정 대시보드 파일을 복사해요.main으로 풀 리퀘스트를 열고 검토해요.- 병합해 승격을 완료해요.
공유 샌드박스에 완성된 작업과 실험적 작업이 섞여 있을 때 이 방법을 사용해요.
옵션 3: 별도 인스턴스 또는 경로를 통해 승격 (Option 3: Promote through a separate instance or path)
main이 프로덕션 인스턴스에 동기화될 때 샌드박스를 승격 흐름의 개발 단계로 취급해요.
- 샌드박스 인스턴스에서 개발해요(
write워크플로로 샌드박스 브랜치에 동기화). - 풀 리퀘스트(옵션 1)를 사용하거나 파일을
main경로로 복사해 승인된 대시보드를main으로 승격해요. main을 동기화하는 프로덕션 인스턴스가 자동으로 업데이트돼요.
이것은 development and production environments 시나리오를 반영하며, 샌드박스 브랜치가 개발 단계 역할을 해요.
옵션 4: Grafana UI에서 승격 (Option 4: Promote from the Grafana UI)
main 브랜치가 같은 인스턴스의 폴더(두 번째 Repository 연결을 통해)나 별도 인스턴스에 동기화된다면, 사용자는 Git을 건드리지 않고 Grafana에서 직접 대시보드를 그 안으로 옮길 수 있어요:
- 사본 저장: 샌드박스 대시보드를 열고 Save as(사본 저장)를 선택한 뒤
main브랜치가 지원하는 폴더를 대상으로 선택해요. Git Sync가 사본을main에 커밋해요. - 대시보드 가져오기: 샌드박스에서 대시보드를 내보내고(Export를 JSON으로), Dashboards > New > Import로
main브랜치가 지원하는 폴더에 저장해요. Git Sync가main에 커밋해요.
이것은 전적으로 UI에서 작업하는 것을 선호하는 사용자에게 적합해요. 이 경로는 풀 리퀘스트 없이 main에 커밋하므로 main이 직접 쓰기를 허용할 때만 사용하고, main이 검토를 요구하면 옵션 1을 선호해요.
승격 후 단기 샌드박스 브랜치를 삭제하거나, 장기 공유 샌드박스를 유지하고 계속 반복할 수 있어요.
더 알아보기 (Learn more)
다음 문서에서 더 배워보세요: