Gatsby 블로그 만들기 중 배포 이슈

@ZungTa · 2021-09-07 화요일 · 3 min read

gh-pages 브랜치로 푸시하였으나 Github Action이 작동 안함
GITHUB_TOKEN은 안써도 됨
Personal Access Token은 Repo권한만 주면 됨
무조건 master branch로 배포되는 문제점
해결방법

다른 블로그에 있는 가이드를 보면서 Gatsby로 블로그를 만들고 배포하던 중 발생한 이슈와 해결과정에 대해서 공유하고자 한다.

gh-pages 브랜치로 푸시하였으나 Github Action이 작동 안함

이 이슈는 내가 지식이 부족했기 때문에 발생하였으나..

솔직히 많은 블로그를 찾아봐도 그냥 github 웹사이트에서 workflow 만들라고 되어있어서 그렇게 만들고 나면 default branch인 main에 병합될 수 밖에 없는 듯 하다.

하지만 실제로 포스트를 쓰고 관리하는 branch는 gh-pages기 때문에 gh-pages branch에서 .github/workflow/main.yml 에 작성해야한다.

GITHUB_TOKEN은 안써도 됨

내가 본 블로그들에선 workflow를 작성할 때 대략 다들 비슷하게

on:
  push:
    branches:
      - gh-pages
name: build gatsby
jobs:
  build_gatsby:
    name: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1

      - name: yarn install
        run: yarn install

      - name: gatsby build
        env:
          GH_API_KEY: ${{ secrets.GITHUB }}
        run: yarn build

      - name: deploy
        uses: maxheld83/ghpages@v0.2.1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GH_PAT: ${{ secrets.GITHUB }}
          BUILD_DIR: "public/"

main.yml을 이렇게 작성해주라고 되어있다.

하지만 GITHUB_TOKEN은 안 적어줘도 작동이 잘 된다.

그리고 maxheld83/ghpages RepositoryExample Usage부분에도 GITHUB_TOKEN은 쓰지 않는다.

또한 내가 본 블로그에서는 그냥 대략적으로 Personal Access Token을 만들고 Repository의 Secret에 등록해주면 된다 까지만 설명하고 그 Secret의 이름과 위의 main.yml에서 쓰는 secrets.[이름]이 일치해야 한다고는 말을 안해줘서 잘 모르는 사람은 헷갈릴 수 있을 거라고 생각한다.

Personal Access Token은 Repo권한만 주면 됨

Deploy용도로 쓸 Personal Access Token을 발급 받을 때 모든 권한을 체크하고 발급 받으라는 글이 있는데. Repo권한만 줘도 된다.

무조건 master branch로 배포되는 문제점

github action을 써서 push하면 바로 배포되게 workflow를 짜놓을 경우 문제점이

나 같은 경우는 main branch를 default branch로 쓰는데 maxheld83/ghpages를 사용하면 무조건 master branch로 배포되게 하드코딩 되어있다. (해당 github의 issue)

그래서 이건 제작자가 고쳐주기 전까진 어쩔 수 없으려나 생각을 하였지만 해결을 하였다.

해결방법

https://github.com/maxheld83/ghpages 를 Fork 한 후

entrypoint.sh 를 조금 수정한다. (MIT License이다)

#!/bin/sh

set -e

echo "#################################################"
echo "Changing directory to 'BUILD_DIR' $BUILD_DIR ..."
cd $BUILD_DIR

echo "#################################################"
echo "Now deploying to GitHub Pages..."
REMOTE_REPO="https://${GH_PAT}@github.com/${GITHUB_REPOSITORY}.git" && \
REPONAME="$(echo $GITHUB_REPOSITORY| cut -d'/' -f 2)" && \
OWNER="$(echo $GITHUB_REPOSITORY| cut -d'/' -f 1)" && \
GHIO="${OWNER}.github.io" && \
if [[ "$REPONAME" == "$GHIO" ]]; then
  if [ "${BRANCH}" == "" ]; then # 여기
    REMOTE_BRANCH="master" # 여기
  else # 여기
    REMOTE_BRANCH="${BRANCH}" # 여기
  fi # 여기
else
  REMOTE_BRANCH="gh-pages"
fi && \
git init && \
git config user.name "${GITHUB_ACTOR}" && \
git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" && \
if [ -z "$(git status --porcelain)" ]; then
    echo "Nothing to commit" && \
    exit 0
fi && \
git add . && \
git commit -m 'Deploy to GitHub Pages' && \
git push --force $REMOTE_REPO master:$REMOTE_BRANCH && \
rm -fr .git && \
cd $GITHUB_WORKSPACE && \
echo "Content of $BUILD_DIR has been deployed to GitHub Pages."

환경변수로 BRANCH를 받아서 원하는 BRANCH로 배포할 수 있게 수정하였다.

이렇게 수정하고 Release를 해야한다.

새롭게 v3.0.1로 Release를 하고

workflow의 main.yml 파일을 아래와 같이 수정한다.

deploy의 uses를 내 Repository로 변경하고 환경변수로 BRANCH를 같이 주었다.

만약에 BRANCH 환경변수가 없다면 master로 배포된다.

on:
  push:
    branches:
      - gh-pages
name: build gatsby
jobs:
  build_gatsby:
    name: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1

      - name: yarn install
        run: yarn install

      - name: gatsby build
        env:
          GH_API_KEY: ${{ secrets.ACCESS_TOKEN }}
        run: yarn build

      - name: deploy
        uses: zungta/ghpages@v0.3.1
        env:
          GH_PAT: ${{ secrets.ACCESS_TOKEN }}
          BUILD_DIR: "public/"
          BRANCH: "main"
@ZungTa
I'm a backend developer
© ZungTa Devlog, Built with Gatsby