내가 글을 웹에 올리는 방법은?

내가 글을 웹에 올리는 방법은?

이 웹사이트는 Ruby 기반인 Jekyll로 만들었다. 개발자들이 많이 써온 프로그램인데, 2014년부터 써왔더니 나도 제법 쓸줄 안다. next.js 같은 더 현대적인 프로그램들이 각광받는 요즘에도, 오히려 투박해서 매력적인 프로그램이다.

이 프로그램을 쓰는 방법은 개발자에겐 쉽겠지만 나한테 그렇지 않았다. 수많은 시행착오를 거쳐서야, 내게 가장 최적인 방식을 찾게 됐다.

간만에 GitHub를 둘러보다가, 수년 전 한참 애먹었던 Continuous Integration이 Actions이라는 이름으로 서비스화되어 있었다. 주말에 장난감처럼 빠져 놀았다.

환경 만들기

Windows Subsystem for Linux에 Jekyll을 이용하는 환경을 만든다. 집에 다용도로 쓰는 리눅스 서버가 있어 Build를 맡겨 보았지만 WSL만큼 편리할 수는 없었다. 특히나 저전력 서버이다 보니 상시 구동 중인 IoT 프로그램들과 자원을 나눠먹기 어려웠다.

# WSL 설정: on Bash Shell

sudo apt-get update -y && sudo apt-get upgrade -y
# 시간이 오래 걸리는 작업이므로 powershell에서 wsl --export Ubuntu Ubuntu.tar로 백업해두는 것이 좋다.

sudo apt install ruby-bundler ruby2.7-dev build-essential dh-autoreconf zlib1g-dev libffi-dev libssl-dev
cd REPOSITORY_PATH
bundle install

배포하기

4~5년 전쯤엔 3rd-party 플러그인을 쓰려면 Travis-CI나 Netlify을 썼었다. 지금은 GitHub Actions으로 GitHub 내에서 3rd-party 플러그인도 이용하여 배포까지 할 수 있다. 이 웹사이트에도 간단한 플러그인을 작성해서 적용하고 있다.

Jekyll 공식문서 예제를 조금 변형해서, Workflow를 만들었다. main branch가 Workflow를 거친 후 나온 결과물은 gh-pages branch에 저장된다. gh-pages branch는 Github Pages의 전통적인 기능에 따라 https://jihunroh.github.io에 결과물을 게시한다.

name: Build and deploy Jekyll site to GitHub Pages

on:
  push:
    branches: [ "main" ]

jobs:
  build:

    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Cache gems
      uses: actions/cache@v3
      with:
        path: vendor/bundle
        key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile') }}
        restore-keys: |
          ${{ runner.os }}-gems-
    - name: Build & Deploy to GitHub Pages
      uses: helaili/jekyll-action@v2
      with:
        target_branch: gh-pages
        target_path: /
        token: ${{ secrets.GH_TOKEN }}

오랜 고질병처럼 글쓰기보단 글쓰는 프로그램에 몰두하게 된다. 2022년 하반기 목표가 일이건, 공부건 하는 모든 일을 여과없이 기록하는 건데 도움이 될 수도?