GitHub Actions가 안 보일 때…Wrangler로 정적 블로그를 직접 올린 날
PR만 만들고 Actions가 돌지 않던 상황. npm run build와 wrangler deploy로 Cloudflare Workers 자산 배포까지 끝낸 운영 기록입니다.

증상은 ‘코드는 있는데 사이트에 글이 없다’였다. 브랜치에 글을 올리고 PR까지 만들었는데, 대시보드의 GitHub Actions 목록에는 이번 푸시가 잡히지 않았다. seominhyuk.com 카테고리 페이지도 예전 목록이었다. 배포 파이프라인을 Actions에만 맡긴 채 기다리면, 파이프라인 자체가 침묵할 때 콘텐츠 발행이 통째로 멈춘다.
사실: 로컬 빌드는 되고, 원격 트리거만 없었다
레포에는 이미 package.json에 "deploy": "npm run build && wrangler deploy"가 있었다. wrangler.jsonc는 assets.directory를 ./dist로 두고, html_handling은 drop-trailing-slash, not_found_handling은 404-page였다. 즉 Cloudflare Workers 정적 자산 배포 경로가 문서·스크립트 수준에서는 준비돼 있었다.
로컬에서 npm run build를 돌리니 Astro가 콘텐츠를 동기화하고 dist/에 HTML을 쌓았다. 새 글 경로도 생성됐다. 그다음 wrangler deploy는 “17 new or modified static assets”를 올리고 warpsense-blog 버전 ID를 반환했다. workers.dev URL에서는 새 HTML이 즉시 보였다. **빌드·업로드는 정상이고, 빠진 고리는 ‘누가 언제 deploy를 돌리느냐’**였다.
한 가지 더. 깨끗한 클론처럼 node_modules가 없으면 astro: command not found로 빌드가 바로 죽는다. Actions가 안 도는 날에는 로컬에서 npm install부터 다시 확인하는 편이 빠르다. 비밀값·토큰은 커밋하지 않고, Wrangler가 이미 로그인된 CLI 세션을 쓰게 했다.
이유: ‘푸시=배포’는 계약이 아니라 가정이다
많은 팀이 GitHub에 푸시하면 Pages/Workers가 따라온다고 가정한다. 그 가정이 성립하려면 워크플로 파일, 브랜치 필터, 시크릿, 계정 권한이 모두 살아 있어야 한다. 이번처럼 PR만 열고 Actions가 목록에 안 뜨면, 원인은 콘텐츠가 아니라 트리거 계층이다. 콘텐츠 컬렉션에 md를 추가해도, 배포 명령이 한 번도 실행되지 않으면 프로덕션 HTML은 바뀌지 않는다.
직접 Wrangler를 꽂는 선택은 우아한 CI 대체물이 아니다. 비상 레일이다. 다만 정적 블로그처럼 dist 산출물이 명확한 프로젝트에서는 비상 레일이 곧 발행 SLA가 된다. “PR 머지 대기”와 “독자에게 글이 보이는 시각”을 분리해 두지 않으면, 자동화 장애가 곧 편집 장애가 된다.
평가: 어디에 쓰고, 어디에 안 쓰는가
쓰는 곳: Actions·연동 배포가 침묵할 때, 미리보기 URL로 내용만 먼저 확인해야 할 때, wrangler.jsonc의 assets 설정이 이미 검증된 프로젝트. 안 쓰는 곳: 비밀·환경변수가 배포마다 바뀌는 앱, 프로덕션 승인 게이트가 필요한 규제 영역, 로컬 머신에만 Wrangler 로그인된 개인 계정으로 팀 프로덕션을 반복 배포하는 경우.
한계도 분명하다. 직접 배포는 감사 로그·브랜치 보호·리뷰 기록을 Actions만큼 남기지 않을 수 있다. 그래서 비상 배포 뒤에는 왜 Actions가 안 돌았는지를 별도 이슈로 남겨야 한다. 그렇지 않으면 다음에도 같은 침묵이 반복된다. 시니어 IT 실무자 시각으로 보면, 자동화는 기본값이고 수동 Wrangler는 명시적 예외여야 한다.
다음에 볼 것: 워크플로가 main 푸시에서만 도는지, PR 브랜치 이름 필터에 막히는지, Cloudflare Git 연동이 Workers 이름(warpsense-blog)과 일치하는지. 콘텐츠 글쓰기와 배포 배선은 한 팀의 일이지만, 실패 모드는 다르다. 글이 안 보이면 먼저 파이프라인을 의심하는 습관이 필요하다.
실무에서 남긴 최소 체크는 세 줄이다. (1) Actions에 해당 SHA가 보이는가. (2) 로컬 npm run build가 같은 커밋에서 성공하는가. (3) wrangler deploy 후 workers.dev와 커스텀 도메인 캐시가 같은 HTML인가. 세 줄이 어긋나면 콘텐츠를 더 고치기 전에 배포 경로를 먼저 고친다. 정적 블로그는 글의 품질만큼이나 보이는 시각이 제품이다.
출처
- 내부 실측:
npm run build→ Astro static build 성공,wrangler deploy로 assets 업로드 및warpsense-blog버전 배포 (2026-07-31~08-01, 비밀값 제외) - 레포 설정:
package.jsonscripts.deploy,wrangler.jsoncassets.directory=./dist - Cloudflare Workers static assets / Wrangler 배포 문서 — 열람: 2026-08-01