[DevOps] Github Actions로 브랜치별 Firebase 배포 설정하기
서론
필자가 최근 새로 참여하게된 팀에서 firebase를 통해 서비스를 구축하고자 하여, 이와 관련한 github 브랜치별 firebase 배포 설정을 작업하게 되었다. 이때 했던 내용들을 정리차 포스팅으로 남겨보았다.
이러한 배포 자동화 설정은 수동으로 일일히 배포하는 방식보다 큰 수고를 덜어주고 항상 일률적으로 빠르게 배포할 수 있게되어, 오직 개발에만 집중할 수 있도록 도움이 된다. 특히 팀에서 협업을 위해 코드리뷰를 진행하는 경우 프론트 프로젝트에서는 preview가 필수이기 때문에 더욱 이러한 배포 자동화는 필요하다.
firebase는 2020년부터 미리보기 채널(베타)라는 이름으로 production 배포를 위한 live channel뿐만 아닌 테스트, 개발을 위한 배포 채널을 나눌 수 있도록 기능을 제공하고 있다. 그래서 이번 배포 설정에서는 해당 기능와 github actions를 활용해보았다.
1. 세팅 계획
일단 우리팀 프론트 개발에서도 GitFlow와 코드리뷰, develop/main 브랜치 보호를 도입하고자 했고, GitFlow에 맞춰 코드리뷰를 위한 preview 채널 배포와 개발서버 및 실서버 배포 세팅이 필요했다.
그래서 우리팀에서는 github actions workflow를 'preview', 'development', 'production'으로 나누어 구성하게 되었고 각각은 아래와 같이 작업이 되었다.
- preview workflow: 어떠한 브랜치든(feature, hotfix, etc...) PR을 생성하면 해당 브랜치를 체크아웃하고 빌드한 뒤, 브랜치명을 channel ID로 설정하여 firestore preview channel에 배포하는 workflow
- development workflow: develop 브랜치에 push되면(PR이 머지되는 경우) develop 브랜치를 체크아웃하고 빌드한 뒤, 'develop'이라는 channel ID로 firestore preview channel에 배포하는 workflow
- production workflow: main 브랜치에 push되면(PR이 머지되는 경우) main 브랜치를 체크아웃하고 빌드한 뒤, firebase 'live' channel로 배포하는 workflow
이 각각의 workflow yml을 작성법은 3번에서 확인할 수 있다.
우선 workflow를 실행하기 위한 권한 정보 설정 방법에 대해 소개하겠다.
2. Firebase Service Account 비공개키 발급 및 Github Personal access token 발급
workflow 내에서 Firebase관련 배포를 설정하려면 우선 해당 레포지토리 시크릿에 Service Account 비공개키를 설정해놓아야한다.
우선 Firebase 프로젝트 페이지의 설정을 들어가 "서비스 계정" 탭에 들어간다. 그리고 "새 비공개 키 생성" 버튼을 클릭하면 json 형식의 비공개 키가 발급되는데, 이 파일은 동일한 키가 단 한번만 발급되기 때문에 잃어버리지 않도록 주의해야한다.
발급된 json 비공개키는 파일 내부의 텍스트를 모두 복사하여 레포지토리 시크릿 등록 입력창에 붙여넣으면 된다.
기존에는 personal access token 발급은 organization에서 발급되지 않았었다. 하지만 최근에는 beta 버전이긴하지만 organization을 통한 발급을 제공하고 있는듯 하다. 그래서 만약 organization을 통해 발급하고 싶다면, 오른쪽 상단 프로필 아이콘을 클릭하고 "Your organizations"를 클릭한 뒤 organization의 "Settings" 버튼을 클릭하면 설정페이지로 접근할 수 있다. 그리고 Personal access tokens 메뉴에 들어가면 토큰 발급이 가능하다. 옵션을 필요에 따라 직접 설정해주면 된다.
또는 개인계정에서 작업중인 레포지토리일 경우 그냥 오른쪽 상단 프로필 아이콘을 클릭한 뒤 "Settings"를 클릭하고 Developer settings에 들어간뒤, Personal access tokens에서 토큰을 발급해주면 된다.
3. workflow yml 작성
권한 인증을 위한 설정들이 모두 완료되면, 이제 workflow yml을 작성하고 github actions를 돌릴 수 있다.
FirebaseExtended 그룹에서 만든 action-hosting-deploy라는 firebase 배포 action이 있다(firebase official은 아니지만 유용하다.) 그래서 필자도 이 action을 사용하여 각 workflow들을 작성해보았다.
각 workflow yml들은 레포지토리 루트에 .github/workflows 디렉토리를 만들고 그 아래에 넣으면 된다.
ex)
- projectRoot/.github/workflows/preview.yml
- projectRoot/.github/workflows/development.yml
- projectRoot/.github/workflows/production.yml
preview workflow yml
development workflow yml
production workflow yml
작성이 모두 완료되면 커밋을 하고 원격 레포지토리로 푸시하면 된다.