Galaxy tarball과 Git 역할은 풀·인증·캐시가 다릅니다(타 스택 글과 겹치지 않게 이원만 다룹니다). 원격 Mac에서
ansible-galaxy가 끊기면 이후 단계가 공회전하므로 forks·timeout·재시도·TMPDIR·경로를 표로 고정합니다. 홈·블로그 목록·Git·Docker 풀 가속·풀 안정성 FAQ.
왜 Galaxy와 Git 역할을 분리해 생각해야 하나요?
컬렉션은 허브 tarball 풀, Git 역할은 클론·서브모듈까지 이어집니다. 같은 러너에서 Docker·npm과 겹치면 TCP·디스크가 먼저 포화되어 Galaxy만 타임아웃처럼 보일 수 있습니다.
- 단일 변수로 섞기 금지: 미러 URL·토큰을 Galaxy와 Git에 동시에 적용하면 한쪽만 깨져도 원인 추적이 느려집니다.
- forks 오해:
forks는 플레이북 실행 병렬도이지 Galaxy 다운로드 스레드가 아닙니다. 수치를 나눠 기록하세요. - 임시 디렉터리 교차 장치: 느린 공유 볼륨에
TMPDIR가 잡히면 unpack 단계에서만 수 분이 날 수 있습니다.
| 신호 | Galaxy 쪽 의심 | Git 역할 쪽 의심 |
|---|---|---|
| 간헐 5xx·느린 첫 바이트 | 허브 레이트·경로 MTU | 낮음 |
| 특정 커밋에서만 hang | 낮음 | shallow·서브모듈·DNS |
| 로컬은 성공·CI만 실패 | 원격 Mac의 ansible.cfg 검색 경로·프록시·roles_path 불일치 |
|
실행 가능 파라미터 표: ansible.cfg·환경·재시도
복붙용 시작점입니다. 코어 버전별 옵션 차이는 있으나, 키는 의미 단위로 맞추면 됩니다.
| 항목 | 설정 위치 / 예시 | 권장 시작값 | 의사결정 기준 |
|---|---|---|---|
forks |
[defaults] forks=16 (ansible.cfg) |
10~20 (M4 계열) | 플레이북 SSH 병렬도. Galaxy 다운로드와 혼동 금지. |
timeout |
[defaults] timeout=45 |
30~60초 | RTT·점프박스 있으면 상향. |
| galaxy CLI 재시도 | ansible-galaxy … --verbose를 셸 루프로 감쌈 |
최대 3회 | 플레이크 대응. 401은 토큰부터. |
| 실패 백오프 | 루프 사이 sleep |
2s → 4s → 8s | CI retry:와 중복되지 않게 상한 계산. |
TMPDIR |
export TMPDIR="$RUNNER_TEMP/tmp" |
NVMe 로컬 경로 | unpack과 동일 로컬 FS. |
| 컬렉션 설치 경로 | ANSIBLE_COLLECTIONS_PATH 또는 collections_paths |
~/ci-galaxy/collections |
CI 캐시 키에 경로 문자열 포함. |
| 역할 경로 | roles_path / ANSIBLE_ROLES_PATH |
./roles:~/ci-galaxy/roles |
vendor와 CI 캐시 순서 분리. |
동시 ansible-galaxy |
xargs -P 2 등 (파일 분할 시) |
1~2 병렬 | 3+는 역효과 많음. requirements 샤드. |
# 예: GitHub Actions / self-hosted macOS — Galaxy+Git 이원 풀 전에 경로 고정
export TMPDIR="${RUNNER_TEMP:-/tmp}/ansible-tmp"
mkdir -p "$TMPDIR" "${HOME}/ci-galaxy/collections" "${HOME}/ci-galaxy/roles"
export ANSIBLE_COLLECTIONS_PATH="${HOME}/ci-galaxy/collections"
export ANSIBLE_ROLES_PATH="${HOME}/ci-galaxy/roles:./roles"
# ansible.cfg 인접 또는 ANSIBLE_CONFIG 로 forks·timeout 분리 기록
export ANSIBLE_FORKS=16
export ANSIBLE_TIMEOUT=45
retry_galaxy() {
local n=0 d=2
until ansible-galaxy collection install -r requirements.yml; do
n=$((n+1)); [ "$n" -ge 3 ] && return 1
sleep "$d"; d=$((d*2))
done
}
retry_galaxy
ansible-galaxy role install -r requirements.yml
[galaxy] server_list 순서는 문서에 고정하고, 허브 호스트 변경 시 캐시 키로 의도적 미스를 냅니다.
의사결정 매트릭스: 직렬 vs 소수 병렬·벤더링
| 전략 | 장점 | 리스크 | 선택 조건 |
|---|---|---|---|
| 직렬 galaxy + 단일 캐시 | 로그 단순·락 충돌 적음 | 월 큰 requirements에서 시간 증가 | 요구 수 < ~15, 회선 안정 |
requirements 샤드 + -P 2 |
대형 목록 완화 | 동시 실패 시 원인 분리 필요 | 의존 그래프가 얕을 때 |
| Git 서브모듈 벤더 (역할만) | CI 외부 풀 제거 | 저장소 용량·갱신 프로세스 | 규제망·허브 접속 불가 |
| tarball 아티팩트 승격 | 재현성 최고 | 빌드 파이프라인 단계 증가 | 릴리즈 게이트·감사 로그 |
프리플라이트 체크리스트
ansible-galaxy collection list와 실제ansible-playbook가 동일ANSIBLE_COLLECTIONS_PATH를 보는지 확인.- Git 역할은
git ls-remote로 원격 Mac에서 동일 URL·자격 증명 재현. - 동시 빌드가 많으면 노드 업그레이드·풀 분리가 프록시 미세 조정보다 저렴한 경우가 많습니다.
캐시 키와 무효화: Galaxy 해시 vs Git ref
컬렉션 키: requirements 지문·코어 버전·ANSIBLE_COLLECTIONS_PATH. Git 역할은 커밋 SHA 고정이 안전합니다. IO 분리·백오프는 Git·Docker 풀 가속·풀 안정성 FAQ와 같이 보세요.
FAQ
Q. Automation Hub와 galaxy.ansible.com을 섞어도 되나요?
A. 가능하지만 server_list 순서와 토큰 스코프를 문서화하지 않으면 재현 사고가 납니다. 순서 변경은 캐시 무효화 이벤트로 취급하세요.
Q. 동일 워크스페이스에서 병렬 job이 캐시를 깨먹습니다.
A. job별 하위 디렉터리로 ANSIBLE_COLLECTIONS_PATH를 분리하거나, 락 파일(flock)으로 galaxy 단계를 직렬화하세요.