배포·자동화 실습 예시
정적 사이트 게시부터 Actions 자동 배포·CI 파이프라인까지 난이도별로 따라하는 가이드 | ← 레퍼런스 문서로 돌아가기
actions/* 권장 버전 태그index.html 한 장짜리 소개 페이지를 만들었다. 별도 서버 없이 공개 URL로 누구나 볼 수 있게 하고 싶다. 빌드 도구는 쓰지 않고, 새로 만든 공개 저장소에 파일을 그대로 올려 게시하는 가장 단순한 방법을 쓴다.
-
공개 저장소 루트에 index.html 푸시
새 공개 저장소를 만들고, 저장소 루트(
/)에index.html을 올린다. (전제:main브랜치 사용)git add index.html git commit -m "Add landing page" git push origin main
-
Settings > Pages에서 브랜치 게시 설정
Settings > Pages로 가서 Source를 "Deploy from a branch"로, Branch를
main, Folder를/ (root)로 지정하고 Save한다.Settings > Pages Source = "Deploy from a branch" Branch = main Folder = / (root) → Save
-
공개 URL 확인
잠시 후 프로젝트 사이트 URL에서 페이지가 보이는지 확인한다.
<user>·<repo>를 본인 값으로 바꾼다.https://<user>.github.io/<repo>/
/) 또는 /docs 둘 중 하나만 허용되며, 다른 폴더를 쓰려면 Actions 방식이 필요하다.
.nojekyll 파일을 추가하고 다시 푸시한다. Pages의 기본 Jekyll 빌드가 _로 시작하는 폴더를 무시하는 문제를 막아 준다.
main에 푸시하면 GitHub Actions가 알아서 사이트를 다시 배포하도록 자동화한다. (전제: 공개 저장소, 루트에 정적 파일이 있음, gh CLI 로그인 완료)
-
게시 소스를 GitHub Actions로 전환
Settings > Pages에서 Source를 "GitHub Actions"로 바꾼다. 이제 워크플로가 배포를 담당한다.
Settings > Pages Source = "GitHub Actions"
-
deploy.yml 워크플로 작성
.github/workflows/deploy.yml을 만들고 아래 내용을 그대로 넣는다.main푸시와 수동 실행(workflow_dispatch) 모두에서 동작한다.name: Deploy static content to Pages on: push: branches: [main] workflow_dispatch: permissions: contents: read pages: write id-token: write concurrency: group: "pages" cancel-in-progress: false jobs: deploy: environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/configure-pages@v5 - uses: actions/upload-pages-artifact@v3 with: path: '.' - id: deployment uses: actions/deploy-pages@v4 -
푸시하고 실행 관찰
워크플로 파일을 푸시하면 Actions 탭에서 자동으로 실행된다.
gh run watch로 진행 상황을 실시간으로 본다.git add .github/workflows/deploy.yml git commit -m "Add Pages deploy workflow" git push origin main gh run watch
checkout), Pages 설정을 구성한 뒤(configure-pages), 루트 폴더를 아티팩트로 업로드하고(upload-pages-artifact, path: '.'), deploy-pages가 실제 사이트로 배포한다. concurrency: group: "pages"로 동시 배포 충돌을 막는다.
pages: write·id-token: write는 Pages 배포에 필수다. 누락하면 deploy-pages 단계가 권한 오류로 실패한다. 또한 actions/* 버전 태그는 권장값이며 최신값으로 갱신될 수 있다.
./dist)만 사이트로 배포되도록, 빌드·테스트를 한 job에서 끝낸 뒤 별도 deploy job이 그 결과만 배포하게 만든다. (전제: 공개 저장소, package.json에 test·build 스크립트, 빌드 산출물은 ./dist)
-
build job: 설치·테스트·빌드·업로드
setup-node로 Node를 준비하고npm ci → npm test → npm run build를 실행한 뒤,./dist를 Pages 아티팩트로 업로드한다. 테스트가 실패하면 여기서 멈춘다.jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 - run: npm ci - run: npm test - run: npm run build - uses: actions/upload-pages-artifact@v3 with: path: './dist' -
deploy job: needs로 build에 연결
deploy job에
needs: build를 두어 build가 성공할 때만 실행되게 한다.deploy-pages가 업로드된./dist아티팩트를 배포한다. (배포 권한 블록은 중급 D-1과 동일하게 둔다)deploy: needs: build runs-on: ubuntu-latest environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - id: deployment uses: actions/deploy-pages@v4 -
실행 확인, 실패 시 로그 분석
실행 목록을 보고 진행을 관찰한다. 실패하면 해당 실행 ID의 로그를 열어 어느 단계(테스트/빌드)에서 멈췄는지 확인한다.
gh run list gh run watch gh run view <id> --log
needs: build 의존성으로 순차 실행된다. build가 npm test에서 실패하면 deploy job은 시작조차 하지 않으므로, 깨진 산출물이 사이트로 나가지 않는다. 통과한 ./dist만 아티팩트로 넘어가 deploy-pages가 게시한다.
_next 같은 _ 시작 폴더가 있는지 확인하고 필요 시 산출물 루트에 빈 .nojekyll을 포함시킨다. 다만 Actions 방식 배포에서는 대개 불필요하다.
GitHub Pages·Actions 2026-06 기준 | 2026년 6월 16일 작성
← 배포·자동화 매뉴얼