Github Action,jekyll을 이용해 다른 리포지토리에 Push하기

Posted by negabaro kim on Friday, June 10, 2022 Tags: ci_cd/github-action   2 minute read

할 내용

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