버셀은 무료버전은 개인 연습용 프로젝트만 지원하기때문에, organization 레포지토리는 무료버전으로 배포할 수 없다.
그런데 사이드프로젝트같은것을 하다보면 organization으로 팀을 결속하여 다같이 소스를 공유하기때문에 연습용인데도 불구하고 무료버전을 사용하지못한다.
이럴때는 개인 repo로 우회하여 사용할 수 있지만, 팀repo에서 어떤값을 커밋하면 개인 repo로 계속 synk를 맞춰줘야하기때문에 번거롭다.
따라서 이를 CI/CD 구축으로 github action을 사용할 수 있다.
CI/CD가 거창한 이름인거같은데, 내가 생각하기엔 그냥 자동으로 배포를 하게끔 파이프라인을 연결해주는 방법이라고 생각하면 편하다.
팀 레포의 해당 fork 버튼으로 fork하고, 버셀에는 내 깃허브에 fork된 소스로 올리면 무료로 배포할 수 있다.
https://github.com/settings/tokens 에서 secrets token 발급
권한은 repo에만 체크해주면 된다.
그럼 아래와같이 ghp
토큰이 발생한다. 복사해놓고 다른데에 꼭 저장하자.
팀 repo setting -> security -> actions의 Repository secrests 선택
아까 개인계정에서 만든 키 값을 넣어주면
저장완료
깃허브 개인계정도 이메일로 넣어준다
SOHYUN_GITHUB_EMAIL
thgus7424@naver.com
최상위 경로에 그냥 build.sh
파일을 추가 해주면 된다. 여기서는 팀 레포의 이름을 넣어주어야한다.
// ./build.sh
#!/bin/sh
cd ../
mkdir output
cp -R ./dodoesdid-client/* ./output
cp -R ./output ./dodoesdid-client/
Actions -> new workflow -> set up a workflow yourself 클릭
yml 파일을 아래와 같이 생성한다.
name: git push into another repo to deploy to vercel
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
container: pandoc/latex
steps:
- uses: actions/checkout@v2
- name: Install mustache (to update the date)
run: apk add ruby && gem install mustache
- name: creates output
run: sh ./build.sh
- name: Pushes to another repository
id: push_directory
uses: cpina/github-action-push-to-another-repository@main
env:
API_TOKEN_GITHUB: ${{ secrets.SOHYUN_GITHUB_KEY }}
with:
source-directory: 'output'
destination-github-username: 5o-hyun
destination-repository-name: dodoesdid-client
user-email: ${{ secrets.SOHYUN_GITHUB_EMAIL }}
commit-message: ${{ github.event.commits[0].message }}
target-branch: main
- name: Test get variable exported by push-to-another-repository
run: echo $DESTINATION_CLONED_DIRECTORY
이렇게하면 설정이 완료되었다.
방금 yml파일을 팀레포지토리에서 만들었는데 vercel에 접속하여 배포가 되었는지 확인해보자
잘 동작하는것을 확인 할 수있다.
추가로 테스트 해보려면 팀 레포지토리에서 수정사항을 입력후 커밋시 버셀 deployments에 잘 들어오는지 확인해면 된다.