github actions를 사용해 oraganization에 작성된 프로젝트 Vercel로 배포하기

도현수·2025년 1월 13일
0

배포를 준비하다 생긴 문제점

github organization에서 진행중인 프로젝트를 Vercel에서 배포하려고 하니 중요한 문제점이 있었다. organization의 프로젝트는 계정을 pro plan으로 업그레이드 해야지 사용 가능한 것... 한달에 20달러씩 지불하며 프로젝트를 유지하기엔 부담이 되어서 다른 방법을 생각해보게 되었다.

다른 방법 - 개인 레포지토리로 fork해서 배포하기

생각한 방법은 간단했다. 팀 프로젝트를 개인 레포지토리로 fork하고 이를 배포하는 것. 개인 레포지토리에 있는 프로젝트기 때문에 Vercel 계정을 업그레이드 할 필요가 없다.

(Vercel에 배포하는 방법은 생략..)

배포는 무사히 끝냈는데... 다시 프로젝트를 진행하다 문제가 생겼다. 프로젝트 진행 중에 코드는 organization에 저장될텐데 저장 사항을 개인 레포지토리에 어떻게 반영할 지에 대한 문제였다. fork한 레포지토리엔 이렇게 최신 상태의 organization 레포지토리와 싱크를 맞춰주는 버튼이 있기는 했지만, 개인 레포의 계정주(나)만 이 작업이 가능하고 코드가 업데이트되면 일일이 들어와서 버튼을 눌러져야 하는게 번거롭다는 문제가 있었다.

github actions사용해서 싱크 자동으로 맞추기

찾아보니 나와 같은 상황에 있는 사람들이 github actions로 이를 해결한 경우들을 찾았고 이를 적용하기로 했다. 흐름은

팀 레포지토리에 코드 업데이트 - github actions가 이를fork한 개인 레포지토리에 적용 - Vercel이 이를 감지하고 배포에 적용

이다.

0. 배포를 진행할 개인 계정에서 github 토큰 발급받기

https://github.com/settings/tokens 에서 새 토큰을 만들 수 있다. 권한은 repo에만 체크해줘도 무방하다.

🚨🚨🚨 이때 발급된 토큰은 다시 볼 수 없으니 꼭 나만 볼 수 있는 어딘가에 복붙해놓자 🚨🚨🚨

1. organization에서 프로젝트 레포지토리의 settings에 위에서 만든 토큰과 개인 계정 이메일을 등록해준다.

2. organization에서 프로젝트 레포지토리의 최상위 경로에 build.sh 파일 생성해주기

최상위에 build.sh 파일 작성해주고, 아래에 teamRepository 라고 적힌 곳에 팀 레포지토리의 이름을 적어준다.

#!/bin/sh
cd ../
mkdir output
cp -R ./teamRepository/* ./output
cp -R ./output ./teamRepository/

3. 최상위 경로의 .github/workflows 경로에 deploy.yml 파일을 만든다.

name: Deploy



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.AUTO_ACTIONS }}

        with:

          source-directory: 'output'

          destination-github-username: 사용자 깃허브 이름

          destination-repository-name: fork한 개인 레포지토리 이름

          user-email: ${{ secrets.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

secrets 뒤에 등록한 토큰명과 이메일 이름을 정확히 적어주고, 이메일과 깃허브 닉네임도 정확히 적어준다.

적용 완료!


이제 main으로 push된 코드가 개인 레포지토리로 잘 전달되는 것을 확인할 수 있다

출처

0개의 댓글

관련 채용 정보