본문으로 건너뛰기

Private Repo에서 GitHub Blog 만들기: GitHub Actions 활용

 · reading-time-plural

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 생성​

아래의 명령을 수행합니다.

# 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 하는 코드가 들어가 있는데 프로젝트 상황에 맞게 변경해서 사용하면 됩니다.

.github/workflows/deploy.yml
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 을 이렇게 사용할 수 있구나 예제를 얻어 갈 수 있으시면 좋을 거 같습니다.

여기까지 읽어주셔서 감사합니다.

Reference​

SSH Key - 비밀번호 없이 로그인 - 원격제어