GitHub Actions 소개
GitHub Actions는 GitHub 저장소에서 직접 워크플로우를 자동화할 수 있는 CI/CD(지속적 통합/지속적 배포) 도구입니다. 코드를 작성하고 푸시하면 자동으로 빌드, 테스트, 배포까지 이어지는 과정을 구현할 수 있습니다.
Hugo 블로그와 GitHub Actions
Hugo로 만든 정적 블로그를 GitHub Pages에 배포하는 과정은 다음과 같은 단계로 이루어집니다:
- Hugo로 정적 파일 생성
- 생성된 파일을 GitHub Pages 브랜치에 푸시
- GitHub Pages에서 웹사이트 제공
이 모든 과정을 GitHub Actions를 사용하여 자동화할 수 있습니다.
자동 배포 워크플로우 설정하기
1. 워크플로우 파일 생성
저장소의 .github/workflows
디렉토리에 deploy.yml
파일을 생성합니다. 이 파일에 워크플로우 설정을 작성합니다.
name: Deploy Hugo Blog
on:
push:
branches:
- master # 또는 main 브랜치
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Setup Git Submodules
run: |
git submodule update --init --recursive
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.123.6'
- name: Build Hugo Site
run: |
cd piesp-blog
hugo --minify
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./piesp-blog/public
2. 워크플로우 작동 원리
위 워크플로우는 다음과 같은 순서로 동작합니다:
- Checkout Repository: 저장소의 코드를 가져옵니다.
- Setup Git Submodules: Hugo 테마와 같은 서브모듈을 초기화합니다.
- Setup Hugo: 지정된 버전의 Hugo를 설치합니다.
- Build Hugo Site: Hugo를 사용하여 정적 사이트를 생성합니다.
- Deploy to GitHub Pages: 생성된 파일을 GitHub Pages에 배포합니다.
워크플로우 최적화 팁
1. 캐싱 활용
빌드 시간을 단축하기 위해 Hugo 모듈과 같은 의존성을 캐싱할 수 있습니다:
- name: Cache Hugo modules
uses: actions/cache@v2
with:
path: /tmp/hugo_cache
key: ${{ runner.os }}-hugo-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-hugo-
2. 특정 파일 변경 시에만 실행
모든 푸시에 대해 워크플로우를 실행하지 않고, 콘텐츠나 설정이 변경된 경우에만 실행하도록 설정할 수 있습니다:
on:
push:
branches:
- master
paths:
- 'piesp-blog/**'
- '.github/workflows/**'
결론
GitHub Actions를 활용하면 Hugo 블로그의 배포 과정을 완전히 자동화할 수 있습니다. 이를 통해 콘텐츠 작성에만 집중하고, 배포 과정에 소요되는 시간과 노력을 절약할 수 있습니다. 더 복잡한 워크플로우도 필요에 따라 구성할 수 있으니, GitHub Actions 문서를 참고하여 자신만의 워크플로우를 만들어보세요.