포스트 업로드 작업 자동화
그래도 한땀한땀 올리는 맛이 있었는데
앞서 작성한 글에서 언급했다시피 나는 Ghost + Github Pages
조합의 블로그를 운영하고 있다. 거의 모든게 만족스러웠지만 포스트 업로드 과정만은 상당히 번거로웠는데, 초반이라 작성한 글이 몇개 안 됐기 때문에 크게 문제의식을 느끼지 못하고 있었다.
이때의 워크플로우는
- 로컬 Ghost 도커 컨테이너에서 글을 작성하기
- ghost-static-site-generator를 통해 static page들을 만들기
/static
디렉토리를 전부 복사해서 깃 리포지토리에 붙여넣기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