다른 블로그에 있는 가이드를 보면서 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 Repository 의 Example 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"