티스토리 뷰
1 서론
2 프로젝트 설정
3 브랜치 설정
4 파이어베이스 프로젝트 별칭을 로컬 .firebaserc에서 등록
5 github action을 리모트서 직접 테스트하지말고 act 툴을 활용해보기
6 ci 배포를 위해 firebase 인증 토큰 이용하기
7 action 예제
# 서론
오랜만에 외부 프로젝트를 진행하다, 여러 스테이징을 나눠개발할 필요성이 있다고 생각하였다. 여러 명이서 작업하고, 여러 명이 각자의 기능이 제대로 되는지 확인이 필요하기 때문이다.
- 이거 내 로컬 PC에서는 되고, 푸시하고 파베에 배포했을 때도 됐거든? 근데 너꺼 머지하고 배포한뒤 파이어베이스 들어가보니 왜 안되지?
이런 상황을 피하고 싶기 때문이다. 이전 사람이 푸시했을 때 되었다는 걸 (빌드를 뛰어넘어 기능적인 의미도 있겠지만) 로컬로 브랜치를 체크아웃 하여 로컬 PC에서 도 돌려보고 또 그걸 파이어베이스에 배포를 해야하는데 그럼 운영 하는 파베를 잠시 내려야하겠고 ..
여튼 짧게 말해서 브랜치를 나눈 만큼 운영/개발/테스트 환경도 분리하는게 편리하기에 세팅을 했다.
# 프로젝트 설정
파이어베이스는 각 프로젝트가 각 인스턴스 같이 동작하는데 그래서 프로젝트를 세 개를 만들었다. (seoulnpo)
# 브랜치 설정
깃헙에도 feature/*, develop, main 브랜치가 있다.
# 파이어베이스 프로젝트 별칭을 로컬 .firebaserc에서 등록
로컬 PC에서 파이어베이스 프로젝트를 Init하게되면 firebase.json, .firebaserc가 생성된다. 둘다 파이어베이스 프로젝트 설정파일인데, .firebaserc 에서 프로젝트별 alias를 설정할 수 있다.
.firebaserc를 직접 수정하여 하는 방법도 있겠지만, 아래 명령어로 firebaserc를 업데이트할 수 있다. (interactive 모드이다)
firebase use --add
위 선택을 수행하게 되면, .firebaserc가 업데이트 된다
이렇게 설정하게 되면 cli에서 firebase use test 명령어로 프로젝트를 설정한 후 firebase deploy를 하게 되면 배포가 가능하다.
firebase use test
firebase deploy // or
firebase deploy --token &token // ci 환경
firebase target:apply도 유사한 기능을 지원했는데, 내부동작이 다르기 때문에, functions를 지원을 안하고 있다. 그래서 firebase use를 사용하였다. 이게 내가 원하는 기능이기도 했다.
# github action을 리모트서 직접 테스트하지말고 act 툴을 활용해보기
나는 mac os 라서 mac os 설치하라는 데로 설치했다. docker는 이미 깔았었기에. 만약 docker가 없다면 설치하도록하자.
- 가끔 act 실행시 container가 생성되지 않고 멈출 때가 있는데, 그땐 이전 container가 좀비처럼 살아있는 것이다. docker ps로 확인이 가능한데 rm -f 로도 삭제되지 않았다. '활성 상태 보기' 서 과감하게 docker를 종료하고 다시 docker를 킨다음 실행하면 잘된다.
# ci 배포를 위해 firebase 인증 토큰 이용하기
고립된 환경, 컨테이너에서 인증을 진행하기 사전 작업이 필요하다. 터미널에서 firebase login:ci 를 수행한 후 터미널에 보여지는 token을 저장해서 사용하면 된다. 터미널에 뜨는 내용을 봐서는 추후에 deprecated 될듯하다
Authenticating with a `login:ci` token is deprecated and will be removed in a future major version of `firebase-tools`. Instead, use a service account key with `GOOGLE_APPLICATION_CREDENTIALS`:
https://cloud.google.com/docs/authentication/getting-started
https://firebase.google.com/docs/cli
당장 사용에 이슈는 없으니 일단은 이 정도로 DONE 처리 함
# 액션 예제
문법과 관련된 내용은 https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions 참고
필요한 것 부터 보자!
env:
branch: ${{ github.ref_name }}
token: ^^__;;; 여러분들은 토큰을 여기에 넣으면 안되어요! 레포지터리의 settings > secret에 등록해서 사용!!!!
name: deploy-firebase
run-name: deploying firebase by ${{ github.actor }}
on: [push]
jobs:
build-and-deploy-functions:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@master
with:
node-version: 16.18.0
- name: install dependencies
run: |
npm install -g firebase-tools
cd server && npm install
- name: environment-set-test
if: ${{ contains(env.branch, 'feature') }}
run: |
echo ${{ secrets.TEST_ENV }} | base64 -d > server/functions/.env
cd server && firebase use test --token $token
- name: environment-set-develop
if: env.branch == 'develop'
run: |
echo ${{ secrets.DEV_ENV }} | base64 -d > server/functions/.env
cd server && firebase use develop --token $token
- name: environment-set-master
if: env.branch == 'main'
run: |
echo ${{ secrets.MASTER_ENV }} | base64 -d > server/functions/.env
cd server && firebase use master --token $token
- name: deploy
run: cd server && firebase deploy --only=functions --token $token
build-and-deploy-hosting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@master
with:
node-version: 16.18.0
- name: build
run: |
npm install -g firebase-tools
npm install -g yarn
yarn
yarn build
- name: environment-set-test
if: ${{ contains(env.branch, 'feature') }}
run: firebase use test --token $token
- name: environment-set-develop
if: env.branch == 'develop'
run: firebase use develop --token $token
- name: environment-set-master
if: env.branch == 'main'
run: firebase use master --token $token
- name: deploy
run: firebase deploy --only hosting --token $token
내용 끝!
'개발이야기' 카테고리의 다른 글
git cherry-pick 없이 conflict 없이 merge하기 (FEAT. cherry pick이 더 유용) (0) | 2023.03.01 |
---|---|
이터레이터, 제너레이터, 코루틴 (0) | 2022.10.29 |
FastAPI 간단하게 시작하기 (0) | 2022.06.30 |
diff 알고리즘 에 관하여 (0) | 2021.12.27 |
필요로 인해 공부하는 CS - DID, TODO 들 목록 (0) | 2021.04.05 |
- Total
- Today
- Yesterday
- 엄청난 인내심과 시뮬레이션을 위한 아레나 툴
- 이산 수학
- 아레나
- Simulation
- 시뮬레이션
- 명제논리
- grafana cloud
- Propositional and Predicate Logic
- 데이터 중심 애플리케이션 설계
- rosen
- beginning javascript
- 로젠
- 아레나시뮬레이션
- 자바스크립트
- flutter
- 그라파나
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 최단경로 알고리즘
- paul wilton
- Arena
- 아레나 시뮬레이션
- 대규모 시스템 설계 기초
- 백준
- Grafana
- 자바스크립트 예제
- 이산수학
- Discrete Mathematics
- 항해99
- javascript
- arena simulation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |