Private Repo
으로 Github Blog
(GitHub Pages) 를 만들기 위해서는 Github 계정을 Pro로 업그레이드해야 합니다. 근데, 계정을 업그레이드하지 않고 SSH
와 Github Actions
을 이용해서 Private
으로 Github Blog
를 만들 수 있다는 사실을 아시나요? 이번 글에서 소개해 보도록 하겠습니다.
원리
원리는 단순한데 블로그 코드를 운영할 Private
Repo의 코드를 GitHub Pages
으로 사용될 Public
Repo으로 Push
하는 방법입니다.
매번 Private
Repo의 코드를 Github Pages
가 사용되는 Public
Repo으로 이동하기는 번거롭겠죠? 이를 Github Actions
을 이용해서 자동 할 것입니다.
Public
Repo에 접근할 수 있도록 SSH Key
를 발급받고 Private
Repo의 Push
가 발생하면 Github Actions
이 Public
Repo으로 SSH
를 이용해서 Push
하도록 만들 것입니다.
핵심적으로 알아야 될 것은 A
라는 Repo
가 B
라는 Repo
로 commit
할 때 SSH
으로 어떻게 자격 증명
을 하느냐입니다.
방법은 아래의 설계
단계에서 보도록 하겠습니다.
설계
note
기본적으로 SSH
가 무엇인지, SSH 공개키 인증
을 알고 있다는 가정으로 설명되었습니다.
SSH Key
생성을 위해서는ssh-keygen
를 사용합니다.id_rsa
(private key) 와id_rsa.pub
(public key) 으로 서로 인증하는 것입니다.Github Pages Repo
(Public Repo) 에 Deploy key으로public key
를 등록하고Blog Code가 존재하는 Repo
(Private repo) 에private key
를 이용해서commit
하는 것입니다.- 그리고 이 작업을
Github Actions
을 이용하여 자동화합니다.
구현
SSH key 생성
info
아래의 명령을 수행합니다.
# Key를 생성하려는 경로로 이동: 다른 SSH와 겹치지 않기 위함
cd ~/Downloads
# Key 생성
ssh-keygen -f id_rsa -t ed25519 -C "your-github-email@test.com"
여기서 Key
생성 시 암호를 지정하지 않도록 합니다. 그냥 Enter
치면 됩니다.
note
이유는 Github Actions
에서 사용하는 webfactory/ssh-agent@v0.5.0
에서 Error: Command failed: ssh-add -
가 발생합니다.
관련 Issue: Command failed: ssh-add
Key
가 생성되면 아래와 같이 파일
이 보이실 것입니다.
Public Repo(Github Pages Repo) 에 Key 등록
생성된 id_rsa.pub
내용을 복사해서 Public Repo(Github Pages Repo)
에 Deploy key
에 public key
를 등록합니다.
push을 위해서 Allow write access
를 체크해야합니다.
정상적으로 등록된 것을 확인할 수 있습니다.
Private Repo(Blog 코드가 존재하는 Repo) 에 Key 등록
생성된 id_rsa
내용을 복사해서 Private Repo(Blog 코드가 존재하는 Repo)
에 secrets
에 private key
를 등록합니다.
Github Actions 등록
Private Repo
에 아래의 코드를 참고하며 Github Actions
을 등록합니다.
저는 Node.js
기반이라 yarn
을 사용하여 Build
하는 코드가 들어가 있는데 프로젝트 상황에 맞게 변경해서 사용하면 됩니다.
name: Deploy to GitHub Pages
on:
push:
branches:
- main
env:
USER_EMAIL: your-github-email@test.com
USER_NAME: your-github-id
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v3
with:
node-version: 16.x
cache: yarn
- uses: webfactory/ssh-agent@v0.5.0
with:
ssh-private-key: ${{ secrets.GH_PAGES_DEPLOY }}
- name: Deploy to GitHub Pages
env:
USE_SSH: true
run: |
git config --global user.email ${{ env.USER_EMAIL }}
git config --global user.name ${{ env.USER_NAME }}
yarn install --immutable
yarn deploy
아쉬운 점
여기까지 따라오셨다면 이제 Private
에서 수정 발생 시 Github Pages
의 Repo
에 자동으로 Push
되어서 배포가 이뤄질 것입니다!
이렇게만 본다면 문제가 없어 보이지만 아쉬운 점도 존재합니다.
- 블로그 코드를 관리하는데
Public
과Private
으로 나눠져서 관리 포인트가 증가한다. Private Repo Push
→Github Actions
→Public Repo Github Pages Deploy
과정을 거치기 때문에 느리다
마치며
이렇게 Private
Repo의 코드를 Public
Repo에 Push
함으로써 Private
으로 Github Blog
개발 방법에 대해서 설명하였습니다.
Github Blog
때문에 요금제 업그레이드는 부담스럽거나, 개인 설정 같은 것 때문에 Private
으로 Blog
를 관리해야 하는 사람에게는 도움이 될 수 있기를 바랍니다.
더 나아가 SSH
와 Github Actions
을 이렇게 사용할 수 있구나 예제를 얻어 갈 수 있으시면 좋을 거 같습니다.
여기까지 읽어주셔서 감사합니다.