소개
FIELDNOTES에는 올바른 방문객 테스트가 있지만 로컬 배포 스크립트는 테스트 실패 후에도 계속되거나 다른 패키지를 공개할 수 있습니다. 이번 과제는 검사 결정과 실제 전달을 연결하는 것입니다.
새 환경에는 첫 실습에서 완성한 방문객 검사와 변경되지 않은 공개 사이트가 준비되어 있습니다. 짧은 Bash 파이프라인을 고쳐 잘못된 입력은 거부하고 정상 입력은 공개하며 이후 초안 수정이 저장된 패키지를 바꾸지 않음을 확인합니다. Workstation, Live Website, Candidate Preview 탭이 준비되어 있습니다. 로컬 학습용 파이프라인이며 GitHub Actions나 운영 보안 경계는 아닙니다.
실패하면 공개 중단하기
이 단계에서는 같은 후보 인수를 검사와 공개 단계에 전달합니다. Live Website에서 전시, Plan your visit, 방문 안내서 다운로드를 여세요. 현재 입구는 East gate입니다. FIELDNOTES로 홈에 돌아가세요.
Workstation으로 전환하세요. cat으로 제공된 파이프라인을 출력합니다.
cat pipeline.sh
초기 스크립트는 검사 후 고정된 packages/candidate.tar.gz를 공개하려 합니다. 개별 명령 줄은 이전 명령이 실패해도 계속 실행됩니다. 제공된 공개 도구도 검사하지 않은 패키지를 거부하지만 파이프라인 역시 실패를 반환하고 의도한 입력을 두 단계에 전달해야 합니다.
Bash는 첫 인수를 $1에 저장합니다. candidate="$1"은 이를 변수에 보관합니다. "$candidate"는 경로에 공백이 있어도 값을 하나의 인수로 확장합니다. &&는 이전 명령이 종료 상태 0일 때만 다음 명령을 실행합니다. 0은 성공, 0이 아닌 값은 실패입니다. 마지막으로 실행한 명령이 이 짧은 스크립트의 결과를 결정합니다.
첫 실습의 here-document 방식으로 전체 스크립트를 바꾸세요. 마지막 BASH가 리터럴 블록을 끝냅니다.
cat > pipeline.sh <<'BASH'
#!/bin/bash
candidate="$1"
python3 tools.py check "$candidate" &&
python3 tools.py publish "$candidate"
BASH
#!/bin/bash는 인터프리터를 지정합니다. 여기서는 bash를 명시해 실행하므로 실행 권한 변경은 필요 없습니다. 두 명령은 정확히 같은 패키지 인수를 받습니다. || true를 넣거나 검사를 지우거나 인수를 고정된 정상 패키지로 바꾸지 마세요.
잘못된 후보를 테스트하세요. 이 실패는 의도적입니다.
bash pipeline.sh packages/wrong.tar.gz
FAIL: Wrong visitor guide content가 표시되고 Published 줄은 없어야 합니다. 바로 상태를 확인하세요. $?는 직전 명령의 종료 상태이며 echo가 이를 출력합니다. 파이프라인 직후 별도 명령으로 실행하세요.
echo $?
1이 나와야 합니다. 중간에 다른 명령을 실행하면 상태가 바뀝니다. Live Website를 새로 고치고 방문 및 다운로드 링크를 따라가세요. 정상 기준 사이트는 계속 이용할 수 있어야 합니다. 공개를 거부해도 서비스는 작동해야 합니다.
Bash 구문 오류가 보이면 저장한 파일을 다시 읽고 위 내용으로 복구하세요. 스크립트 자체의 오류는 유효한 공개 검사의 증거가 아닙니다. 다음 단계에서 정상 입력도 통과하는지 확인합니다.
테스트한 패키지 공개하기
이 단계에서는 정상 후보를 공개 사이트에 반영하고 저장된 패키지 바이트와 편집 가능한 작업 사본을 구별합니다. Workstation에서 시작하세요.
제공된 packages/candidate.tar.gz는 환경 준비 중 drafts/에서 만들었습니다. 파이프라인은 저장된 패키지를 사용해야 하며 나중에 달라진 초안 내용으로 다시 만들면 안 됩니다.
먼저 후보를 명시적으로 검사하세요.
python3 tools.py check packages/candidate.tar.gz
통과 메시지와 보존된 패키지 식별자가 출력됩니다. 이제 패키지 생성 후 일반적인 개발자 수정을 흉내 내세요. >는 이 초안 텍스트 파일만 교체하며 echo는 따옴표 안 텍스트를 출력합니다.
echo 'UNREVIEWED DRAFT: use the West gate' > drafts/downloads/guide.txt
초안이 실제로 바뀌었는지 확인하세요.
cat drafts/downloads/guide.txt
UNREVIEWED DRAFT: use the West gate가 출력됩니다. 의도적인 초안 전용 수정입니다. 저장된 패키지를 편집하거나 다시 만들지 마세요.
수정한 파이프라인을 저장된 후보에 실행하세요.
bash pipeline.sh packages/candidate.tar.gz
PASS: visitor checks. Frozen package ... 다음에 같은 식별자의 Published frozen package ...가 나와야 합니다. 실행 도구는 고정한 사본을 테스트하고 정확히 그 바이트를 공개하며 성공한 검사 기록이 없는 바이트는 거부합니다. 식별자는 보조 증거이며 실제 사이트 확인을 대신하지 않습니다.
Live Website로 전환해 FIELDNOTES로 홈에 돌아간 뒤 새로 고치세요. Explore the exhibition, Plan your visit, Download visitor guide를 여세요. 검토하지 않은 초안 수정과 관계없이 페이지와 다운로드 모두 East gate여야 합니다. Step-free route와 Download access guide도 열어 Garden ramp가 유지되는지 확인하세요. 삽화와 스타일도 완전해야 합니다.
Workstation으로 돌아가세요. curl은 HTTP 요청을 보내고 -sS는 진행 표시를 숨기면서 연결 오류는 보여 줍니다. 127.0.0.1은 이 실습 환경이며 8081은 공개 서버 포트입니다. 개인 컴퓨터 터미널이 아닌 Workstation에서 실행하세요.
curl -sS http://127.0.0.1:8081/downloads/guide.txt
본문은 FIELDNOTES Visitor Guide로 시작하고 Entrance: East gate를 포함합니다. 공개 사이트는 변경된 초안이 아닌 저장된 패키지를 사용합니다. 초안 내용이 보이면 파이프라인이 공개하는 입력을 확인하고 변경하지 않은 제공 후보로 올바른 파이프라인을 다시 실행하세요.
마지막으로 거부를 다시 확인하세요.
bash pipeline.sh packages/missing.tar.gz
의도한 404 실패가 발생하며 공개하지 않아야 합니다. Live Website를 새로 고치고 방문 안내서를 다시 다운로드하세요. 승인한 후보는 계속 사용할 수 있습니다. 이제 두 결정을 모두 확인했습니다. 이 실습은 정적 사이트의 로컬 배포 경로를 보호하며 접근 제어, 서명, 호스팅 CI, 데이터베이스 마이그레이션 롤백은 구현하지 않습니다.
요약
조건부 실행으로 잘못된 공개를 중단하고 같은 패키지를 두 단계에 전달했으며 이후 초안 수정과 관계없이 정확히 테스트한 내용을 공개했습니다. 일반 방문 및 접근성 경로 모두 사용할 수 있습니다.


