Crabbox은(는) 무엇을 하나요?
- 신중한 원격 증명: 증명 정책을 따릅니다. 자격을 갖춘 사용 가능한 호스트에서 제한적인 로컬 증명을 선호합니다. 비용이 많이 들거나 플랫폼별 작업은 원격 용량을 사용할 수 있습니다. 대기 중: 소유한 할당을 중지하고, PR CI 또는 안전한 로컬 범위를 사용하여 충족되지 않은 요구 사항을 보고합니다. 게시 전에 필수 빌드를 사용할 수 없는 경우: 테스팅 스킬의 초안/CI 증명 정책을 사용합니다.
- 대기열을 기다리거나 공급자 폴백을 연결하지 마십시오.
백엔드:
blacksmith-testbox: 신뢰할 수 있는 유지 관리자 소스. 준비된 CI.tbx_....aws: 직접 중개된 Crabbox. 신규 PR. 사용자 정의 동기화/환경/캡처.cbx_....local-container: Docker 폴백. 원격 증명이 아닙니다.ssh: 기존 운영자 호스트. macOS/Windows/WSL2.
항상 공급자, ID, 실행 URL, 명령, 결과를 보고하십시오. Testbox를 "AWS Crabbox"라고 부르지 마십시오.
저장소 계약
- 예제 명령, 부트스트랩, 컨테이너 이미지, PR을 신뢰할 수 있는 소비자 지침에 따라 해결합니다. 명령을 임의로 만들거나 다른 소비자의 설정을 복사하지 마십시오.
- 소비자별 설정은 이식 가능한 스킬 외부에 유지합니다. 플레이스홀더 정의를 참조하십시오.
권한 부여 및 격리
- 작업에 필요한 생성, 재사용, 정리, 임시 상태, 깨끗한 체크아웃: 사전 승인됨. 기존 브랜치, 체크아웃, 관련 없는 편집 내용을 유지합니다.
- 소스 신뢰, 자격 증명, 프로덕션 액세스, 예산, 게시는 권한 경계로 유지합니다. 격리된 상태; 작업별 승인 없이 운영자 게이트웨이를 건드리지 마십시오.
먼저 경로 설정
- 해결된 공급자를 유지합니다: 신뢰할 수 있는 소스에는 Testbox; 해당 의미 체계가 필요할 때는 직접 AWS; 신뢰할 수 없는 코드에는 시크릿리스 CI/AWS. 신뢰할 수 없는 래퍼/구성을 로컬에서 실행하거나 신뢰할 수 없는 임대를 채우지 마십시오.
- 명령이 준비되었을 때 획득하고; 소유한 ID를 재사용하며; 이후 중지합니다.
- 가장 작은 입증된 프로필. 더 큰 프로필: 기록된 메모리 증거 또는 측정된 총 비용 이점이 필요하며, 일반적인 실패/지연/타임아웃이 아닙니다. 작업자 수를 늘려 보상하지 마십시오.
- Testbox 크기 조정:
--blacksmith-workflow, 직접--class/--type사용 금지; 프로필 변경은 새 임대가 필요합니다. - Blacksmith 실행기 레이블은 계층을 요청하며, CPU 또는 RAM을 보장하지 않습니다. Blacksmith는 서비스 가용성에 따라 더 작은 머신을 할당할 수 있습니다. 리소스에 민감한 테스트 또는 벤치마크의 경우 할당된 머신에서 사용 가능한 CPU, 선호도/할당량, 사용 가능한 RAM을 측정하십시오. 해당 측정값을 기준으로 작업자와 작업 부하의 크기를 조정합니다. 요청된 계층과 관찰된 리소스를 별도로 기록합니다. 레이블만으로 하드웨어 또는 성능을 평가하지 마십시오.
- 크기, 지속 시간, 채우기 실패, 용량은 공급자 재정의를 승인하지 않습니다. 명시적인 사용자 선택 또는 필요한 백엔드 의미 체계가 있어야 합니다.
사전 점검
신뢰할 수 있는 저장소 루트: .crabbox.yaml을 읽고, 설치된 바이너리를 확인하며,
공급자/명령을 검사합니다:
export CRABBOX="$(command -v crabbox)"
test -n "$CRABBOX"
"$CRABBOX" --version
"$CRABBOX" config show --json | jq '{provider, profile, target}'
"$CRABBOX" run --help
- 소비자의 신뢰할 수 있는 래퍼/설치 지침을 사용합니다.
- 네이티브 Linux/WSL 명령 수명 주기 및 취소 증명에는 완전히 일치하는
Crabbox 배포판이 필요하거나
CRABBOX_RUNTIME_ARTIFACTS로 선택된 검증된 런타임 매니페스트가 필요합니다. 동반자를 고정된 소스와 일치시키고 매니페스트가 정확히 선택된 컨트롤러를 바인딩하는지 확인합니다. 런타임 팩이 없는 개발 CLI는 레거시 SSH 감독을 사용합니다.--version만으로는 네이티브 감독을 설정할 수 없습니다. 할당 전에 선택된 팩을 확인합니다. CLI 전용 증명을 네이티브 수명 주기 증명으로 간주하지 마십시오. 업스트림 런타임 아티팩트 지침을 따릅니다. - 수리: 업스트림 확인; 깨끗한 작업 소유 체크아웃 사용; 설치된 바이너리 + 관련 없는 소스 유지. 이름만으로 형제 체크아웃을 신뢰하지 마십시오.
임대 수명
- TTL은 생성 시점부터 계산되며, 채우기 시간을 포함합니다. 유휴 시간 제한은 비활성 상태를 계산합니다. 더 이른 기한이 적용됩니다. 기본값: 각각 30분, 최대 4시간. 소유자/조직 재정의는 최대 24시간까지 허용할 수 있습니다. 유효 정책과 정리된 클램프 공지를 사용하고, 요청된 기간은 사용하지 마십시오. 정책 강화는 활성 임대에도 적용됩니다.
--keep및stop: never는 만료를 방지하지 않습니다. 유지된 직접 임대에 대해 명시적인 제한 TTL 및 유휴 시간을 요청하십시오. 일반 하트비트, 설정, 동기화, SSH, 데스크톱 사용은 총 TTL을 연장하지 않습니다.run은 정책, 예산, 공급자 기능 내에서 명령이 실행되는 동안에만 제한된 자동 연장을 요청합니다.- 장기 소스 종속 작업 전에 남은 총 수명을 검사합니다. 허용되는 경우, 하나의 제한된
extend <id> --ttl <desired-total> --json을 요청합니다. 연장은 유휴 시간을 재설정하지 않습니다. 거부/예산/지원되지 않음/진전되지 않음/비활성 결과는 공급자 전환이나 무한 임대 체인 없이 눈에 띄는 건너뛰기 또는 실패가 필요합니다. Daytona와 같은 생성 고정 공급자는 할당 시 충분한 TTL이 필요합니다. - 직접 게스트 새로 고침 실패는 상자 내부의 기존 기한으로 더 긴 공급자 기한을 남길 수 있습니다. 동일한 로컬 상태를 유지하고 조정을 위해서만 동일한 고정 총 TTL을 재시도합니다. 실패한 연장을 보호로 취급하지 마십시오.
- 신뢰할 수 있는
directLeases: deny및directLeaseAllow를 준수합니다. 거부된 공급자는 구성된 코디네이터 경로가 필요합니다. 직접 자격 증명으로 우회하지 마십시오. Testbox는 자체 기본 작업 및 유휴 제한을 유지합니다.--ttl은 위임된 워크플로우를 연장하지 않습니다. list는 활성 코디네이터 임대를 표시합니다.list --retained는 정리가 확인되지 않은 유지된 종료 리소스를 추가합니다. 복구를 위해 정확한 ID 검사/중지를 사용합니다. 차단 중지가 완료를 확인할 때까지 유지 클레임 및 복구 상태를 유지합니다.
신뢰할 수 있는 Testbox
해결된 공급자 = Testbox(또는 명시적으로 요청됨): 명령을 유지합니다.
명시적 재정의를 위해서만 --provider blacksmith-testbox를 추가합니다:
"$CRABBOX" run --timing-json -- CI=1 <check-command>
여러 명령: 한 번 웜업하고, ID를 저장하고, 재사용하고, 중지합니다.
"$CRABBOX" warmup --keep --timing-json
"$CRABBOX" run --id <tbx_id> --timing-json -- <check-command>
"$CRABBOX" stop <tbx_id>
규칙:
- 하나의 임대, 하나의 활성 명령. 실행 중 동기화/회수 없음.
bash -c를 선호합니다. 로그인 프로필은 디렉토리를 변경할 수 있습니다. 실행 셸에서 물리적 체크아웃 + 예상 소스/패치를 확인합니다. HEAD만으로는 더티 동기화 증명이 아닙니다. 소비자의 문서화된 채우기 셸 계약을 따릅니다.- 네이티브 Testbox는 재사용된
--id실행을 포함하여 자체 동기화를 실행합니다. 원격 기준선에 대해--no-sync에 의존하지 마십시오. Blacksmith는 네이티브 우회 수단이 없습니다. 출시된 Crabbox 버전은 자동으로 플래그를 무시할 수 있습니다. 변경되지 않은 의도적 재실행 ≠ 예외. - 의도적인 체크아웃 경로 소유권 이전에만
--reclaim을 사용합니다. - 재사용을 위해 소비자의 할당 영수증을 따릅니다. 호환 가능한 소스 커밋은 작업, 물리적 체크아웃, 베이스, 종속성, 준비, 워크플로우/작업/참조가 변경되지 않은 경우 임대를 재사용할 수 있습니다. 원래 할당 출처를 유지합니다. 호환되지 않는 영수증: 중지; 다시 웜업. 오래된 임대 재정의 금지.
- 원시 SHA는
warmup --ref에 신뢰할 수 없습니다. 브랜치/태그를 사용하십시오. blacksmith testbox list는 상태를 숨깁니다.list --all또는status --id <tbx_id>를 사용하십시오.- Testbox 상태/중지:
--id. 상태에--json없음. - 위임된 공급자는
--fresh-pr,--full-resync,--script*,--env-helper, 캡처/다운로드 플래그를 거부합니다.
Blacksmith 디렉토리 다운로드
재귀적 다운로드 + 필수 원격 후행 슬래시: 디렉토리 다운로드.
신뢰할 수 없는 AWS
- 깨끗한 신뢰할 수 있는 기본 브랜치 체크아웃. 설치된 신뢰할 수 있는 Crabbox 바이너리.
- 검토된 전체 헤드 SHA당 새로운 임대. 인스턴스 역할, Tailscale, 채우기 없음.
CI만 전달합니다. 신뢰할 수 있는 부트스트랩을--fresh-pr옆에 업로드합니다.
cd <clean-trusted-default-branch-checkout>
env -u CRABBOX_AWS_INSTANCE_PROFILE \
"$CRABBOX" config show --json | \
jq -e '.aws.instanceProfile == ""' >/dev/null
env -u CRABBOX_AWS_INSTANCE_PROFILE \
-u CRABBOX_TAILSCALE \
-u CRABBOX_TAILSCALE_AUTH_KEY \
-u CRABBOX_TAILSCALE_AUTH_KEY_ENV \
-u CRABBOX_TAILSCALE_EXIT_NODE \
-u CRABBOX_TAILSCALE_EXIT_NODE_ALLOW_LAN_ACCESS \
-u CRABBOX_TAILSCALE_HOSTNAME_TEMPLATE \
-u CRABBOX_TAILSCALE_TAGS \
"$CRABBOX" warmup \
--provider aws --network public --tailscale=false \
--tailscale-exit-node= \
--tailscale-exit-node-allow-lan-access=false \
--ttl 4h --idle-timeout 90m --keep --timing-json
"$CRABBOX" inspect --provider aws --id <cbx_id> --json | \
jq -e '.network == "public" and .tailscale == null' >/dev/null
env -u CRABBOX_AWS_INSTANCE_PROFILE \
CRABBOX_ENV_ALLOW=CI \
"$CRABBOX" run \
--provider aws --id <cbx_id> \
--fresh-pr <owner/repo#number> \
--no-hydrate --timing-json \
--script <trusted-bootstrap-script> -- \
<expected_full_head_sha> <check-command>
env -u CRABBOX_AWS_INSTANCE_PROFILE \
"$CRABBOX" stop --provider aws <cbx_id>
- 신뢰할 수 있는 부트스트랩은 IMDSv2 IAM 자격 증명이 404를 반환함을 증명해야 합니다. SHA를 확인합니다.
런타임 주입 변수를 제거합니다. 툴체인을 고정합니다. 설치/테스트 전에
HOME을 격리합니다. - 변경된 헤드: 새 임대. 원격 PR 또는 역할 없음 증명 누락: 시크릿리스 포크 CI.
직접 AWS
- 신뢰할 수 있는 AWS 명령, 인증 진단, 재동기화, 깨끗한 PR/컨테이너 실행: 직접 공급자를 읽으십시오.
- 컨테이너 실행에서
--no-hydrate를 유지합니다. 로컬 컨테이너 증명을 로컬로 보고합니다.
관찰 가능성
- 아티팩트 수집/자격 증명 주입: 캡처 및 환경 플래그를 읽으십시오.
- 정확한 키, 하나의 명령. 시크릿을 인쇄하거나, 저장소에 쓰거나, 셸 기록에 넣지 마십시오.
- 안전한 주입 경로 없음: 라이브 인증 차단됨. 가짜 키 증명은 불충분.
실제 E2E
- 요청된 사용자 진입점을 격리된 소비자 상태로 실행합니다. 원격 단위 테스트만이 아닙니다.
- 설치/공급자/대화형 증명 + 안전한 개정 비교: E2E 절차를 읽으십시오.
데스크톱 / 교차 OS
SSH 대상, 유료 macOS 사전 점검, WebVNC, 앱 핸드오프 확인: 데스크톱 및 교차 OS 명령을 읽으십시오.
장애 분류
래퍼, 공급자, 채우기, 동기화, SSH 또는 명령 실패를 식별합니다:
"$CRABBOX" doctor
"$CRABBOX" status --id <id>
"$CRABBOX" inspect --id <id> --json
"$CRABOX" logs <run_id>
"$CRABOX" results <run_id>
blacksmith testbox list --all
blacksmith testbox status --id <tbx_id>
- 대기 중인 용량: 소유한 할당을 중지합니다. 증명 정책을 따릅니다. 재시도 폭풍 또는 공급자 전환 금지.
- 오래된 동기화:
--debug --timing-json, 그런 다음 직접 공급자에서 한 번--full-resync. - 집중된 재실행 전에 실패한 단계/JUnit을 읽습니다. 깨진 래퍼: 동일한 공급자에서 설치된 CLI로 진단합니다. 소비자의 신뢰할 수 있는 경로를 통해 업데이트합니다.
- 소유한 ID만 중지합니다.
stop은--timing-json을 사용하지 않습니다.