Github Actions를 이용하여 Hexo 블로그 배포하기
기존의 Travis-CI를 이용하여 Hexo 블로그를 배포하기 위해,
ChangJoo Park님의 포스팅인 Travis CI를 이용한 Github Pages + Hexo 블로그 자동 배포하기를 참고하여 아래와 같은 YAML 파일을 작성하여 Travis CI 서비스를 이용해서 배포하였습니다.
기존의 코드
# .travis.yml
language: node_js
node_js:
- "10"
# Hexo source 코드는 master branch에서 작업되고 있어야합니다.
branches:
only:
- master
before_install:
- npm install -g hexo
install:
- npm install
before_script:
- git config --global user.name "INPUT_YOUR_USER_NAME"
- git config --global user.email "INPUT_YOUR_EMAIL"
- sed -i "s/__GITHUB_TOKEN__/${__GITHUB_TOKEN__}/" _config.yml
# 블로그를 빌드 후 배포합니다.
script:
- hexo clean
- hexo generate
- hexo deploy
Github에서 자체적으로 Github Actions
라는 기능을 베타로 제공중이여서 신청을 해두었고,
어제 승인되어 repo에 아래 이미지와 같은 탭이 생겼습니다.🎉
해당 기능을 이용해 보기 위해 travis.yml 파일을 Github Actions에 맞게 아래와 같이 바꾸어보았습니다.
변경사항
# .github/workflows/hexo-deploy.yml
name: Node CI
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Hexo-Cli Install
run: npm i -g hexo
- name : Change Environment
env:
GITHUB_TOKEN: "INPUT_YOUR_GITHUB_ACCECSS_TOKEN"
run: |
git config --global user.name "INPUT_YOUR_USER_NAME"
git config --global user.email "INPUT_YOUR_EMAIL"
sed -i "s/__GITHUB_TOKEN__/${GITHUB_TOKEN}/" _config.yml
- name: NPM Install
run: npm install
- name: Hexo Clean
run: hexo clean
- name: Hexo Generate
run: hexo g
- name: Hexo Deploy
run: hexo d
Github Actions
문서에 따르면 기존의 Secret Config 부분은 repo의 아래의 탭에서 지정이 가능합니다.
해당 Secrets를 사용시에는 사용하려는 step에서 with 키워드를 이용해 설정하거나, env 를 이용해서 아래와 같이 설정 할 수 있습니다.
steps:
- name: Test Set Secret With
with: ${{ secrets.YOUR_SECRET }}
- name: Test Set Secret Env
env:
my_secret : ${{ secrets.YOUR_SECRET }}
사담
Github Actions는 이미 만들어진 환경을 사용 할 수도 있고, Github Repo에 있는 도커 스크립트를 이용할 수도 있는것으로 보입니다.
steps:
- uses: actions/setup-node@74bc508 # 특정 커밋을 지정
- uses: actions/[email protected] # 특정 릴리즈 버전 지정
- uses: actions/setup-node@master # 브랜치 지정
- uses: docker://alpine:3.8 # Docker Hub에서 제공하는 이미지와 태그 지정
- uses: ./.github/actions/my-action # 해당 repo 안에 정의된 파일 지정
또한, if
제어문도 사용이 가능하고, 쉘을 선택하여 처리한다거나 Cron-Job등이 사용가능하고
jobs.<job_id>.strategy.matrix
를 활용하여 os와 실행환경(ex. node | php) 버전을 조합하여 빌드 테스트가 가능하다고 합니다.
runs-on: ${{ matrix.os }}
strategy:
matrix:
node: [6, 8, 10]
os: [ubuntu-16.04, ubuntu-18.04]
steps:
- uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node }}
이와 같이 정의할 경우에는 3개의 노드버전과 2개의 os 버전을 조합하여 6가지의 job이 실행됩니다.
이외에도 다양한 기능을 제공하여 깃허브를 이용하고 있다면 한번쯤은 이용해봐도 좋을 서비스라고 생각합니다.