Menu

메모용 개발 블로그

전체보기 > 개발일기 >

정적 블로그 개발기 7 - 자동배포

2022-05-20 01:34:34

지금까지 배포 방식

지금까지는 배포를 블로그 생성기를 받고 그 안에 post 경로 아래에 블로그 글들을 보관하는 형태에서 블로그 생성기에서 변환명령을 내려줘야했다.

대충 배포까지 스크립트에 때려박은터라 사용성이 그렇게 안좋지는 않았지만 그래도 글들만 다운받아서 바로 수정하고 올리면 자동으로 변환하고 배포해준다면 낭만적이지 않겠는가?

그래서 낭만을 위해서 간단한 삽질을 하였다.

무엇으로 배포할 것 인가?

일단 블로그 글들이 git으로 관리되고 있었으므로 이걸 gitlab에 올리는 순간 무언가 일어나는 것이 가장 자연스러운 일이라 생각하였다.

그래서 gitlab runner를 블로그 글 배포용으로 사용하였다.

환경

gitlab runner 서버는 gitlab이 설치된 서버와 동일한 곳에 위치하고 있다. 아무래도 기존에 설치해놓은 것을 재탕하는 것이 제일 싸게 먹히는 법이다.

개발 과정

우선 CI/CD 스크립트를 무한으로 테스트 해먹기 위해서 브랜치를 별도로 분리하고 이리저리 삽질을 해주었다.

스크립트를 한방에 완벽하게 짜내는 능력은 없으므로 어쩔 수 없다.

stages:
  - deploy

deploy:
  stage: deploy
  script:
    - PATH=$PATH:/home/gitlab-runner/node/node-v17.2.0-linux-x64/bin
    - cd ..
    - rm -rf ./blogmaker 2> /dev/null
    - git clone 블로그_생성기_저장소_주소 blogmaker
    - mv ./blog-data ./blogmaker/post
    - cd ./blogmaker
    - git clone 블로그_배포_주소 export
    - npm i
    - npm run build
    - cd post
    - git config --local user.email "이메일" && git config --local user.name "이름"
    - git remote add origin2 블로그_글_저장소
    - git pull origin2 main
    - git checkout -t origin2/main
    - git add .
    - if [ "$(git diff --staged)" != "" ]; then git commit -m "Gitlab Runner" && git push origin2 main; fi
    - cd ../export
    - git config --local user.email "이메일" && git config --local user.name "이름"
    - git add .
    - if [ "$(git diff --staged)" != "" ]; then git commit -m "Gitlab Runner" && git push origin main; fi

이런식으로 작성하였다. 동작환경은 쉘 환경에서 동작하도록 하였고, 아무래도 node 때문에 docker를 사용해서 분리하는편이 마음이 편안할 것 같았으나 배포할때마다 도커를 거치는 것 또한 마음이 불편하기에 그냥 node런타임을 러너 홈 경로에 따로 설치한 다음 임시로 path에 올리도록 하였다.

  1. node 런타임 PATH 등록
  2. 이전 블로그 빌더 삭제
  3. 블로그 빌더 깃에서 클론
  4. 현재 블로그 글 세팅
  5. 배포 저장소 클론
  6. 블로그 빌더 빌드
  7. 블로그 빌드
  8. post 경로 이동
  9. 깃 커미터 정보 설정
  10. 글 원격저장소 연결 & 브랜치 가져오기 & 이동
  11. 글 메타 정보 변경 시 커밋 & 푸시
  12. export 경로 이동
  13. 깃 커미터 정보 설정
  14. 커밋 & 배포

대략 위의 과정을 거쳐서 배포하도록 하였다.

image-20220520003259021

정상적으로 배포되는 모습을 볼 수 있다.

후기

나중에 서버가 이동된다면 잡스러운 설정을 다시해야한다는 생각에 머리가 아찔해지지만 그건 미래의 내가 하겠지...

다만 아쉽게도 러너가 올린 커밋에도 반응을 한다는건데. 이건 나중에 수정하도록 해야겠다.

어짜피 블로그 빌드를 두번하는건 내가 아니라 나의 컴퓨터이기 때문이다.