할 내용
prviate repo와 public repo가 있고 공개하기 싫은 내용,메모등을 private 리포지토리에서 관리하고 정제된 내용만 public repo로 push하는 방법에 대해 정리해본다.
왜 필요한가?
jekyll을 이용해 블로그를 쓰고 있는데 가끔 공개하기 부끄러운 내용들(글이 정제되지 않았다거나 부정확한 정보) 을 실수로 올리는 경우라든가 심각한 경우 공개해서는 안되는 코드라던가, 세큐리티에 위협이되는 키들을 공개 리포지토리에 올림으로 인해 github에 검색이되어버리는 리스크를 없애기 위해
어떻게 구현하는가?
github action을 이용한다.
다른 리포지토리에 push하는 코드는 cpina/github-action-push-to-another-repository@main
가 재사용이 좋았기에 채택했다.
다른 리포지토리에 업로드하게 하기위해 DEPLOY_KEY를 github -> settings -> secrets에 추가해주자
필자의 경우 GIT_FOR_DEPLOY라는 파일을 추가해놓았다. 해당설정을 github action에서 아래와 같이 사용
env:
SSH_DEPLOY_KEY: $
github.com/negabaro/negabaro.github.io
라면
source-directory: '_site'
destination-github-username: 'negabaro'
destination-repository-name: 'negabaro.github.io'
이런식으로 추가해준다.
jekyll빌드 설정은 Makefile에서 관리(후술)
권한 관련 문제가 있어서 github action상에서 생성하는 파일/디렉토리에는 따로 권한을 부여해줬다.
- name: set Gemfile.lock
run: touch Gemfile.lock && chmod a+w Gemfile.lock
- name: set _site
run: mkdir ./_site && chmod a+w ./_site
전체코드(.github/workflows/deploy.yml)
name: Deploy
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v2
- name: set Gemfile.lock
run: touch Gemfile.lock && chmod a+w Gemfile.lock
- name: set _site
run: mkdir ./_site && chmod a+w ./_site
- name: Run jekyll build
run: make build-for-github-action
- name: Pushes to another repository
uses: cpina/github-action-push-to-another-repository@main
env:
SSH_DEPLOY_KEY: $
with:
source-directory: '_site'
destination-github-username: 'negabaro'
destination-repository-name: 'negabaro.github.io'
user-email: negabaro
target-branch: master
Makefile은 아래와 같다.
github Action환경에서는 -it
옵션을 쓰면 TTY Device에러가 발생하므로 넣어주지 않는게 포인트
build-for-github-action:
docker run --rm -p 8888:8888 -v $$(pwd):/srv/jekyll -v $$(pwd)/vendor/bundle:/usr/local/bundle jekyll/jekyll jekyll build