Git 블로그 카테고리 목록 페이징 기능 구현
★ 추후 다시 작성 예정입니다
현재 Git 블로그는 GitHub Pages를 통해 자동 빌드 및 배포가 되고 있습니다.
*.github.io 리포지토리에 push 시 GitHub가 Jekyll로 빌드해서 정적 웹사이트로 배포합니다.
GitHub Pages는 글 카테고리 목록 페이징 및 커스텀 플러그인을 지원하지 않습니다.
GitHub Actions로 jekyll-paginate-v2 플러그인을 사용하면 카테고리별 페이징이 가능합니다.
수동 페이징 구현은 반복 작업이 많고 번거로우므로 권장하지 않습니다.
GitHub Actions 페이징 플러그인 사용 원리
main 브랜치 push 시 .github/workflows/jekyll.yml 워크플로우가 실행되어,
bundle exec jekyll build로 생성된 _site 폴더가 gh-pages 브랜치에 push 됩니다.
gh-pages 브랜치를 배포하므로, 기본 빌드 환경에서 지원하지 않는 커스텀 플러그인도 동작 가능합니다.
jekyll-paginate-v2 플러그인 추가
Gemfile 파일 수정
source "https://rubygems.org"
gemspec
gem 'jekyll-admin', group: :jekyll_plugins
gem 'jekyll-sitemap'
gem 'jekyll-paginate-v2' // 추가
Gemfile 파일에 카테고리 목록 페이징을 위한 jekyll-paginate-v2 플러그인을 추가합니다.
GitHub Pages 기본 빌드에서는 동작하지 않으므로, GitHub Actions로 직접 빌드해야 합니다.
_config.yml 설정 수정
// 기존 jekyll-paginate 페이징 주석
# paginate: 5
# paginate_path: /page:num/
plugins:
- jekyll-paginate-v2 // jekyll-paginate를 수정
- jekyll-sitemap
- jekyll-gist
- jekyll-include-cache
// 전체 페이징 설정 추가
pagination:
enabled: true
per_page: 5
sort_field: 'date'
sort_reverse: true
permalink: "/page/:num/"
title: ""
// 카테고리 및 태그별 페이징 설정 추가
autopages:
enabled: true
categories:
enabled: true
title: '카테고리: :cat'
permalink: '/categories/:cat/'
layout: 'archive-taxonomy'
_config.yml 파일에서 jekyll-paginate-v2 플러그인을 활성화합니다.
/categories/카테고리명 페이지가 생기고, archive-taxonomy.html 레이아웃이 적용됩니다.
메인페이지 전체 목록 페이징
메인페이지 페이징 활성화
---
pagination:
enabled: true
index.html 파일에 페이징 활성화 코드를 추가합니다.
메인페이지 페이징 코드 추가
home.html 파일 하단에 페이징 로직을 작성한 html을 추가합니다.
카테고리 목록 페이징
카테고리 페이징 활성화
pagination:
enabled: true
category: app-dev
per_page: 5
sort_reverse: true
_pages/categories/카테고리명.md 파일에 페이징 활성화 코드를 추가합니다.
GitHub Actions로 블로그 빌드
Ruby 설치
https://rubyinstaller.org/downloads
Ruby 공식 설치 페이지에서 Ruby+Devkit 3.x.x 버전 다운로드 후 설치합니다.
Ruby 설치 확인 명령어
ruby -v
gem -v
VS Code 터미널은 툴을 재시작해야 명령어를 사용할 수 있습니다.
Bundler 설치
gem install bundler
Ruby 명령어를 이용하여 Bundler를 설치합니다.
Bundler 설치 확인 명령어
bundler -v
Buldler 설치 성공 시 아래와 같은 메세지가 나옵니다.
Successfully installed bundler-2.6.9
1 gem installed
A new release of RubyGems is available: 3.6.7 → 3.6.9!
Run `gem update --system 3.6.9` to update your installation.
Gemfile.lock 생성
bundle install
터미널에서 블로그 폴더로 이동 후 위 명령어를 실행하여 Jekyll 의존성을 설치합니다.
Gemfile 파일 수정 시 bundle install 재실행이 필요합니다.
정상 설치 메시지
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Fetching public_suffix 6.0.2
Fetching bigdecimal 3.1.9
...
Installing jekyll-sitemap 1.4.0
Installing jekyll-admin 0.12.0
Bundle complete! 6 Gemfile dependencies, 60 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
GitHub Actions 워크플로우 생성
name: Build and Deploy Jekyll Site
on:
push:
branches: [ main ] # 기본 브랜치가 main이 아닌 경우 수정
jobs:
build-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v3
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1' # 최신 버전 사용 가능
bundler-cache: true
- name: Install dependencies
run: bundle install
- name: Build the site
run: bundle exec jekyll build
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3 # gh-pages 브랜치 미사용 시 변경
with:
github_token: $
publish_dir: ./_site
Git 블로그 폴더에 /.github/workflows/jekyll.yml 폴더 및 파일을 생성합니다.
이 파일은 GitHub Actions 빌드 자동화 스크립트입니다.
main 브랜치에 push 시 GitHub Actions를 통해 gh-pages 브랜치가 자동 생성되고 배포됩니다.
archive-taxonomy.html 파일 수정
카테고리 글 목록 페이지에 페이징 코드를 추가합니다.
GitHub Pages 빌드 설정 변경
GitHub 페이지 > 로그인 > 우측 상단 프로필 아이콘 > Your repositories > *.github.io 블로그 리포지토리 선택 > Settings > Pages > Source : Deploy from a branch 선택 > Branch : gh-pages 브랜치 선택 > Save
GitHub Actions 푸시 권한 설정
GitHub 페이지 > 로그인 > 우측 상단 프로필 아이콘 > Your repositories > Settings > Actions > General > 하단 Workflow permission : Read and write permissions 선택 > Save
빌드 시 403 오류 메시지
Run peaceiris/actions-gh-pages@v3
[INFO] Usage https://github.com/peaceiris/actions-gh-pages#readme
Dump inputs
Setup auth token
Prepare publishing assets
Setup Git config
Create a commit
Push the commit or tag
/usr/bin/git push origin gh-pages
remote: Permission to 0songha0/0songha0.github.io.git denied to github-actions[bot].
fatal: unable to access 'https://github.com/0songha0/0songha0.github.io.git/': The requested URL returned error: 403
Error: Action failed with "The process '/usr/bin/git' failed with exit code 128"
GitHub Actions 봇에 gh-pages 브랜치에 푸시 권한이 없어서 발생하는 403 권한 오류입니다.