약 3분

포스트 업로드 작업 자동화

그래도 한땀한땀 올리는 맛이 있었는데
포스트 업로드 작업 자동화
Photo by Homa Appliances / Unsplash

앞서 작성한 글에서 언급했다시피 나는 Ghost + Github Pages 조합의 블로그를 운영하고 있다. 거의 모든게 만족스러웠지만 포스트 업로드 과정만은 상당히 번거로웠는데, 초반이라 작성한 글이 몇개 안 됐기 때문에 크게 문제의식을 느끼지 못하고 있었다.

이때의 워크플로우는

  1. 로컬 Ghost 도커 컨테이너에서 글을 작성하기
  2. ghost-static-site-generator를 통해 static page들을 만들기
  3. /static 디렉토리를 전부 복사해서 깃 리포지토리에 붙여넣기
  4. git add . -> git commit -> git push origin main으로 배포하기

였는데, 지금 보니 어떻게 이걸 그냥 놔둘 생각을 했을까 싶다.

아무튼 엊그제 작성한 글을 깃허브에 업로드하다 문득 이거 너무 귀찮은데, 자동화 할 수는 없나?하는 생각이 들었고, 아래와 같은 쉘 스크립트를 작성했다:

#!/bin/bash

# 정적 사이트 생성
node /Users/castledoor/ghost-static-site-generator/src/index.js \
     --url=http://doorcs.github.io

# 생성된 파일들을 현재 디렉토리로 복사
cp -r static/* ./

# `static` 디렉토리 삭제
rm -rf static

# commit && push
git add .
git commit -m "$1"
git push origin main

publish.sh

말이 쉘 스크립트지 초기 버전은 단순히 CLI 명령들을 모아 둔 파일이었는데, 셸 스크립트에 대해 조금 더 배워보고 싶다는 생각이 들어서 셸 스크립트 문법에 대해

#!/bin/bash

set -e

PARAM=$1

if [ -z "$PARAM" ]; then
  PARAM=$(date +%y%m%d) # 파라미터(커밋 메시지)가 없을 경우, YYMMDD 형식으로 날짜를 가져옴
fi

# 정적 사이트 생성 ( 현재 디렉토리 아래에 `static` 디렉토리를 만들어 저장함! )
node /Users/castledoor/ghost-static-site-generator/src/index.js \
     --url=http://doorcs.github.io

# rsync를 통해 디렉토리를 동기화 ( 변경된 파일만 복사 && 없어진 파일은 삭제 )
rsync -a static/ ./

# static 디렉토리 삭제
rm -rf static

# git 커밋 및 푸시
git add .
git commit -m "$PARAM"
git push origin main

최종:

#!/bin/bash

set -euo pipefail

# 변수 설정
PARAM=${1:-$(date +%y%m%d)}
GENERATOR=/Users/castledoor/ghost-static-site-generator/src/index.js
DIR=/Users/castledoor/doorcs.github.io
URL=http://doorcs.github.io

# 정적 사이트 생성 ( 현재 디렉토리 아래에 `static` 디렉토리를 만들어 저장함! )
node $GENERATOR --url=$URL

# rsync를 통해 디렉토리를 동기화 ( 변경된 파일만 복사 && 없어진 파일은 삭제 )
rsync -a --delete \
      --exclude='.git/' \
      --exclude='.github/' \
      --exclude='.gitignore' \
      static/ $DIR/

# static 디렉토리 삭제
rm -rf static

# git 커밋 및 푸시
cd $DIR
git add .
git commit -m "$PARAM"
git push origin main