기존에는 Jekyll 블로그를 GitHub Pages로 deploy해서 사용하고 있었다. junchive.kr
라는 custom domain 구입 후 DNS 연결해서 사용하고 있었다. 그런데 사용하면서 GitHub Pages와 관련해서 불편한 점들이 느껴져서 대체할만한 다른 플랫폼을 찾아보았다. jekyll plugin에 제한이 많이 걸려서 원하는 플러그인을 사용할 수 없다는 것과, github workspace가 제공되지만 느리고 불편한 점이 많아서 잘 안쓰게 된다는 이유 때문이었다.
GitHub Pages의 문제점
가장 크리티컬한 이유는 바로 plugin의 제한이었다. 기본적으로 jekyll에서 제공하는 jekyll-paginate
이 매우 구려서 jekyll-paginate-v2
로 옮겨가고 싶었는데, jekyll-paginate-v2-repository에서 밝히듯이 GitHub Pages에 공식적으로 등록된 플러그인이 아니라 사용 불가하다. _config.yml
이랑 Gemfile
을 건드려봐도 우회해서 사용하는게 자꾸 오류가 떠서 스트레스를 받던 중, ‘안되겠다 옮기자!!’ 생각에 다른 플랫폼으로 옮겨갔다.
⚠️ Please note that this plugin is NOT supported by GitHub pages. Here is a list of all plugins supported. However you can follow this GitHub guide to enable it or by using Travis CI. GitLab supposedly supports any plugin.
CI/CD 선택지
CI/CD란 쉽게 설명하면 지속적인 통합과 배포를 이야기하는데, 내가 만든 코드를 올리고 deploy해주는 과정을 자동으로 해준다. 기존에 GitHub Pages을 썼던 가장 큰 이유는 Github Pages에서 Jekyll을 사용할 때, 별도의 CI/CD 설정 없이도 자동으로 배포되기 때문이었다. 그냥 원하는 theme을 고르고 github pages만 연결해주면 편리하게 끝나는 문제였다. 그래서 하나의 방법은 github repository에 Travis CI
을 연결해서 GitHub Pages 대신 CI/CD 과정을 실행시키는 것이었다. 그런데 생각보다 설정 과정이 복잡했고, 각종 자료를 찾아서 해보아도 Ruby Gem 상에 에러가 자꾸만 발생해서 포기했다…
GitLab Pages
다른 대안은 배포 자체를 Netlify
에 하던지, 아니면 다른 편리한 CI/CD를 찾는 것이었다. 찾아보다가 GitLab Pages
는 plugins에 대한 제한이 딱히 없다고 해서 GitLab으로 옮겨서 사용하기로 했다. GitLab에 회원가입하고, SSH-keys와 기본적인 결제 수단을 등록한 뒤에 {username}.gitlab.io
의 repository를 새로 만든다. 만일 {title}
처럼 다른 이름으로 repository를 만들게 되면 최종 deploy했을 때에 https://{username}.gitlab.io/{title}
의 형태로 deploy되어서 페이지 이동이 불가능해진다. 꼭 단일 페이지를 사용할 때에만 다른 이름으로 설정하자.
Gemfile & _config.yml 설정
# Gemfile
source "https://rubygems.org"
gem "jekyll"
gem "jekyll-paginate"
gem "jekyll-sitemap"
# _config.yml
(앞 내용 생략)
plugins:
- jekyll-paginate
- jekyll-sitemap
GitLab Pipeline
가장 중요한 부분이 바로 Pipeline 설정이다. 이것만 해주면 CI/CD 세팅이 완료된다. 여러 템플릿이 있는데, 나는 아래 템플릿을 사용했다. CI/CD Configuration
에서 아래 내용을 추가하고 deploy하면 자동으로 GitLab Pages가 알아서 배포까지 끝내준다.
# .gitlab-ci.yml
image: ruby:2.7
workflow:
rules:
- if: $CI_COMMIT_BRANCH
cache:
paths:
- vendor/
before_script:
- gem install bundler
- bundle install --path vendor
pages:
stage: deploy
script:
- bundle exec jekyll build -d public
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH == "main"
environment: production
test:
stage: test
script:
- bundle exec jekyll build -d test
artifacts:
paths:
- test
rules:
- if: $CI_COMMIT_BRANCH != "main"
DNS Settings
이건 {username}.gitlab.io
도메인을 사용할 사람들에게는 해당되진 않는다. Custom Domain을 등록하고 싶은 경우에만 사용하면 된다. 본인이 사용하고 있는 DNS 서비스 사이트(e.g 나의 경우 CloudFlare)설정에 들어가서 DNS 레코드를 수정해주면 된다. GitLab의 경우 A레코드에 35.185.44.232
추가하고 본인의 GitLab Pages 설정에 나와있는 내용을 TXT레코드에 추가해주면 된다. A레코드 대신 CNAME레코드에 {username}.gitlab.io
을 추가해도 되지만, IP주소 찾는데 조금의 시간이 소요되기 때문에 A레코드가 낫다고 생각한다. (큰 차이는 아님)
후기
아무래도 우리나라에서는 GitHub에 비해서 GitLab의 인지도가 많이 낮아서 관련 정보도 적고, forum이나 Q&A도 찾아보기 쉽지 않았다. Official Documentation을 뒤져가면서 에러들을 해결해냈는데, 조금은 뿌듯하달까? 기본적으로 제공되는 Web IDE도 GitLab 쪽이 월등히 좋아서 고정된 세팅 환경에서 개발하는게 아니라면 GitLab도 추천한다. 이제 플랫폼을 옮겼으니 입맛에 따라서 plugins 쇼핑을 조금 해봐야겠다.
앞으로 더 수정해야할 것들
- utterances 댓글 기능을 GitLab Issues로 옮기기
- Gemfile -> jekyll-paginate-v2 추가하기
- 더 추가할 plugins 찾아보기