본문으로 건너뛰기

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

 · reading-time-plural · 

Private Repo 으로 Github Blog (GitHub Pages) 를 만들기 위해서는 Github 계정을 Pro로 업그레이드해야 합니다. 근데, 계정을 업그레이드하지 않고 SSHGithub 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 ActionsPublic Repo으로 SSH 를 이용해서 Push 하도록 만들 것입니다.

핵심적으로 알아야 될 것은 A 라는 RepoB 라는 Repocommit 할 때 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 keypublic key 를 등록합니다.

push을 위해서 Allow write access 를 체크해야합니다.

정상적으로 등록된 것을 확인할 수 있습니다.

Private Repo(Blog 코드가 존재하는 Repo) 에 Key 등록

생성된 id_rsa 내용을 복사해서 Private Repo(Blog 코드가 존재하는 Repo)secretsprivate 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 PagesRepo 에 자동으로 Push 되어서 배포가 이뤄질 것입니다!

이렇게만 본다면 문제가 없어 보이지만 아쉬운 점도 존재합니다.

  • 블로그 코드를 관리하는데 PublicPrivate 으로 나눠져서 관리 포인트가 증가한다.
  • Private Repo PushGithub ActionsPublic Repo Github Pages Deploy 과정을 거치기 때문에 느리다

마치며

이렇게 Private Repo의 코드를 Public Repo에 Push 함으로써 Private 으로 Github Blog 개발 방법에 대해서 설명하였습니다.

Github Blog 때문에 요금제 업그레이드는 부담스럽거나, 개인 설정 같은 것 때문에 Private 으로 Blog 를 관리해야 하는 사람에게는 도움이 될 수 있기를 바랍니다.

더 나아가 SSHGithub Actions 을 이렇게 사용할 수 있구나 예제를 얻어 갈 수 있으시면 좋을 거 같습니다.

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

Reference

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