Travis CI를 이용한 Github Pages + Hexo 블로그 자동 배포하기
이 글은 Github Pages를 이용한 개인 블로그를 구축할 때, 매번 배포하는 번거로움을 줄이는 방법을 다룹니다.
상황
Github Pages와 Hexo는 매우 좋은 조합입니다. Hexo를 설치하고, Hexo Themes페이지에서 적절한 테마를 골라 설정만 하면 괜찮은 블로그를 구축할 수 있습니다.
문제점
Hexo는 좋은 툴을 많이 제공하고 있지만, 글을 매번 쓸 때마다 아래 과정을 터미널에서 해주어야합니다.
$ hexo clean
$ hexo generate
# hexo-deployer-git을 이용합니다.
# https://github.com/hexojs/hexo-deployer-git
$ hexo deploy
NPM 스크립트를 이용해 세개의 명령어를 하나로 만든다고 해도 글을 쓴 다음 매번 스크립트를 실행해주어야 합니다.
Hexo 개발환경이 없는 곳에서 글만 작성하고 싶다면 Node.js를 설치하고 Hexo를 설치하는 등의 부가적인 작업도 생깁니다.
해결방법
위 배포 과정이 정상적으로 작동한다고 가정합니다. Travis CI를 이용해 새로운 commit이 source branch에 추가되면 자동으로 세가지 (clean, generate, deploy) 과정 대신 처리합니다.
설정해야하는 부분은 소스코드 / Github / Travis CI 세 곳입니다.
# .travis.yml
language: node_jsnode_js:
- "9"# Hexo source 코드는 source branch에서 작업되고 있어야합니다.
branches:
only:
- sourcebefore_install:
- npm install -g hexoinstall:
- npm install# 주의: 'YOUR NAME'와 'YOUR EMAIL'를 변경해야합니다.
before_script:
- git config --global user.name 'YOUR NAME'
- git config --global user.email 'YOUR EMAIL'
- sed -i "s/__GITHUB_TOKEN__/${__GITHUB_TOKEN__}/" _config.yml# 블로그를 빌드 후 배포합니다.
script:
- hexo clean
- hexo generate
- hexo deploy# _config.yml# 기타 Hexo 설정...# Deployment
## Docs: https://hexo.io/docs/deployment.html
# 주의: <YOUR NAME>, <COMMIT MESSAGE>와 <YOUR EMAIL>를 변경해야합니다.
deploy:
type: git
repo: https://__GITHUB_TOKEN__@github.com/<USER NAME>/<USER NAME>.github.io
branch: master
message: "<COMMIT MESSAGE>"
중요 : Github에서 AccessToken을 미리 발급 받아야 합니다. 이 안내를 보시면 받을 수 있습니다.
Github 프로젝트의 Settings 메뉴에 들어가면 Github Apps를 설치할 수 있고 그 중 Travis CI를 선택합니다.
Hexo 블로그가 있는 저장소를 선택하고 저장하면 됩니다.
Github에서 설정할 것은 이 정도가 전부입니다.
이제 Travis CI를 설정합니다. 로그인 후 CI를 적용할 프로젝트를 선택 후 설정에 들어가면 환경 변수 설정 폼이 있습니다. Github에서 만든 Access Token을 넣어줍니다. 소스코드의 .travis.yml
, _config.yml
에 공통으로 들어있는 __GITHUB_TOKEN__
이 환경변수 이름입니다.
저장하면 source 브랜치에 새로운 코드가 커밋되면 자동으로 Travis CI가 빌드와 배포 과정을 대신 해줍니다.
더 생각해 볼 것들
문서를 작성하고 git 명령어인 add, commit, push 명령어는 아직 자동화하지 않았습니다.
gitpush() {
git add .
git commit -m "$*"
git push
}
alias gp=gitpush
이렇게 스크립트를 만들어 .bash_profile
등에 추가하면 gp 커밋메시지
등으로 줄일 수는 있으나 터미널에서 작업해야 한다는점은 같습니다.