IT 시행착오·

GitHub Actions가 안 보일 때…Wrangler로 정적 블로그를 직접 올린 날

PR만 만들고 Actions가 돌지 않던 상황. npm run build와 wrangler deploy로 Cloudflare Workers 자산 배포까지 끝낸 운영 기록입니다.

Cloudflare 오피스 입구 — Workers/엣지 배포 운영 맥락 (cc by-sa, wikimedia-commons)

증상은 ‘코드는 있는데 사이트에 글이 없다’였다. 브랜치에 글을 올리고 PR까지 만들었는데, 대시보드의 GitHub Actions 목록에는 이번 푸시가 잡히지 않았다. seominhyuk.com 카테고리 페이지도 예전 목록이었다. 배포 파이프라인을 Actions에만 맡긴 채 기다리면, 파이프라인 자체가 침묵할 때 콘텐츠 발행이 통째로 멈춘다.

사실: 로컬 빌드는 되고, 원격 트리거만 없었다

레포에는 이미 package.json"deploy": "npm run build && wrangler deploy"가 있었다. wrangler.jsoncassets.directory./dist로 두고, html_handlingdrop-trailing-slash, not_found_handling404-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.json scripts.deploy, wrangler.jsonc assets.directory=./dist
  • Cloudflare Workers static assets / Wrangler 배포 문서 — 열람: 2026-08-01