Github Actions를 이용하여 Hexo 블로그 배포하기

기존의 Travis-CI를 이용하여 Hexo 블로그를 배포하기 위해,

ChangJoo Park님의 포스팅인 Travis CI를 이용한 Github Pages + Hexo 블로그 자동 배포하기를 참고하여 아래와 같은 YAML 파일을 작성하여 Travis CI 서비스를 이용해서 배포하였습니다.


yaml

    # .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에 맞게 아래와 같이 바꾸어보았습니다.


yaml

    # .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 를 이용해서 아래와 같이 설정 할 수 있습니다.

yaml

    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에 있는 도커 스크립트를 이용할 수도 있는것으로 보입니다.

yaml

    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) 버전을 조합하여 빌드 테스트가 가능하다고 합니다.

yaml

    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이 실행됩니다.

이외에도 다양한 기능을 제공하여 깃허브를 이용하고 있다면 한번쯤은 이용해봐도 좋을 서비스라고 생각합니다.