Vercel, Firebase 및 Circleci와의 지속적인 통합 및 배포 워크플로우
15001 단어 firebasedevopstutorialserverless
도구 및 책임
CI: CircleCI을 사용하여 프런트엔드 및 백엔드의 모든 테스트/필터링/유형 검사를 실행합니다.Firebase 기능
Vercel: Vercel을 사용하여 프런트엔드를 배포합니다.이것은 전방을 자동으로 배치하기 위해 Googlegithub repo에 연결됩니다.
Firebase: Firebase을 백엔드(서버 기능 및 데이터베이스 및 인증 없음)로 사용합니다.일반적으로 우리는 하나의 프로젝트를 사용하여 개발을 진행할 것이며, 하나의 프로젝트는
개술
프런트엔드
Dell 고객은 기본적으로 NextJs React 애플리케이션입니다.Vercel은 NextJs의 배후 조종자이기 때문에 통합/도구가 매우 원활하다.
시작하려면 다음이 필요합니다.
사용자 정의 구축 절차가 필요하고 명령이나 출력 폴더라면 그들의 documentation에 따라 조작할 수 있다
환경 변수
모든 환경 변수 can be set up directly on Vercel
코드 라이브러리에 있는 지점에 따라 다른 값을 제공해야 한다면 (따라서 목표가 Staging역이든prod역이든) System Env Variables에 의존할 수 있습니다
export const getEnvVar = (key: string): string => {
const isProd = process.env.NEXT_PUBLIC_VERCEL_GITHUB_COMMIT_REF === 'master';
switch (key) {
case 'NEXT_PUBLIC_FIREBASE_API_KEY':
return isProd
? process.env.NEXT_PUBLIC_PROD_FIREBASE_API_KEY
: process.env.NEXT_PUBLIC_FIREBASE_API_KEY;
default:
throw new Error(`key ${key} is not recognized `);
}
}
Firebase 호스팅에 대한 참고 사항:그것을 배치하기 위해서, 우리는 처음에 Firebase 트랜잭션을 사용했지만, 속도가 상당히 느립니다. 왜냐하면 firebase의 서버 기능이 없는 서버 쪽 내용을 서비스해야 하기 때문입니다.
Firebase 호스트를 사용하려면
us-central1
의 함수 하나만 사용할 수 있습니다.이것은 known limitation입니다. 동시에 동적 내용을 제공하려면 Google Cloud Run을 설정해야 합니다백엔드 -firebase 서버 기능 없음
이 부분은 로컬과 제품 설정 사이에서 좀 까다롭다.그것의 배후에는 몇 개의 Firebase 관건적인 개념이 있다.
Firebase 프로젝트: 일반적으로 제품은 Firebase 프로젝트를 사용하고 스테이지는 Firebase 프로젝트를 사용합니다.이것은 언제든지 Staging이나 프로젝트에 코드를 배치하려면 프로젝트 사이를 전환해야 한다는 것을 의미합니다. 이것은 CI를 통해 자동화됩니다.
서비스 계정: Firebase 프로젝트 관리자인지 확인하는 방법 중 하나입니다.Firebase 콘솔
RuntimeConfig: 이것은
firebase CLI
을 통해 설정된 설정으로 Firebase 프로젝트와 관련된 환경 변수를 추가하는 데 사용됩니다.Firebase CLI: 명령줄 도구로 Firebase에서 여러 작업을 수행할 수 있습니다. 예를 들어
우리는 아래의 설정에서 하나하나 소개할 것이니 걱정하지 마라. (나는 주로 나 자신에게 다음에 내가 그것을 설정해야 한다고 말할 때)😄)
commmon을 로컬로 설정하고 임시 저장/생산
Firebase 프로젝트 구성:
npm install -g firebase-tools
firebase login
firebase use --add
그러면 프로젝트 목록이 포함된 .firebaserc
파일이 프로젝트에 나타납니다.지점 배치에 기반한 정확한 프로젝트의 목표를 정하기 위해 이 별명에 의존하는 것이 중요하다.질문이 있으면 firebase-cli documentation을 참고하시면 됩니다.환경 변수:
환경 변수의 경우 Firebase CLI를 사용하여 Firebase 프로젝트에 직접 추가할 수 있습니다.
firebase functions:config:set someservice.id="THE CLIENT ID"
나중에 다음과 같은 방법으로 액세스할 수 있습니다.const functions = require('firebase-functions');
...
const id = functions.config().someservice.id,
참고:이 환경 변수는 Firebase의 프로젝트에 직접 저장되기 때문에 로컬에서 필요하지 않습니다.일반적으로 수동으로 값을 확인하기 위해 로컬에서 다운로드합니다.만일을 대비해서 그것들을 소홀히 하는 것은 좋은 생각일지도 모른다.
관리자 SDK 초기화:
Firebase 관리 sdk를 설정하고 추가하려면 add a service account이 필요합니다.
이것은 국지전을 야기할 것이다.json 파일은 기계의 특정한 gitignore 폴더 아래에 있습니다.
Firebase는 환경 변수에 파일 경로를 배치하는 것을 권장합니다(이전 섹션). - firebase docs if needed을 참조하십시오.
import * as admin from 'firebase-admin';
...
const config = functions.config();
const app = admin.initializeApp({
credential: admin.credential.cert(config.credentials.google_application),
databaseURL: `https://${config.credentials.project_id}.firebaseio.com`
});
로컬 설정
로컬 개발을 위해 저는 데이터베이스/auth와 서버 기능이 없는 staging 프로젝트를 사용합니다.다음과 같은 방법으로 수행할 수 있습니다.
firebase --use XXX
을 사용하여 Firebase CLI를 통해 Firebase 항목 수동 선택현재 사용하고 있는 항목을 주의하십시오.prod에 대한 스크립트를 실행하기를 원할 때가 있습니다. 최종적으로 사용하는 항목은
firebase --use master
입니다. 이것은 선택한 항목입니다.staging/your test env를 다시 선택할 때까지.이 단계에서 서버 기능이 없는 수동 배포를 피하고 CI에 책임을 넘기고자 합니다.
CI 설정
CI는 우리의 기능을 Firebase에 배치하는 것을 책임질 것이다.
분명히 몇 가지 제한이 있다.
이러한 목표를 달성하려면 다음과 같은 몇 가지를 구성해야 합니다.
BASE_64
을 추가하는 것이다.보통 나는circleCI에서 2개의 변수를 얻는다. 예를 들어 FUNCTION_PROD_SERVICE_ACCOUNT_BASE64
과 FUNCTION_STAGING_SERVICE_ACCOUNT_BASE64
command: echo << parameters.key_env_name >> | base64 -di > ./keys/<< parameters.key_path >>
command: ./node_modules/.bin/firebase deploy --token "$FIREBASE_TOKEN" -P << parameters.environment >> --only functions:hubspot,functions:users
이것은 합병 실행 중인 지점에 따라만 터치할 수 있습니다.이렇게- functions_deploy:
requires:
- functions-build
environment: staging
key_path: $STAGING_SERVICE_ACCOUNT_PATH
key_env_name: $FUNCTION_STAGING_SERVICE_ACCOUNT_BASE64
filters:
branches:
only: develop
- functions_deploy:
requires:
- functions-build
environment: prod
key_path: $PROD_SERVICE_ACCOUNT_PATH
key_env_name: $FUNCTION_PROD_SERVICE_ACCOUNT_BASE64
filters:
branches:
only: master
functions_deploy:
executor: node
parameters:
environment:
type: string
key_path:
type: string
key_env_name:
type: string
working_directory: ~/project/app/functions
steps:
- checkout:
path: ~/project
- attach_workspace:
at: ~/project
- run:
name: add service account
command: echo << parameters.key_env_name >> | base64 -di > ./keys/<< parameters.key_path >>
- run:
name: Firebase Deploy
command: ./node_modules/.bin/firebase deploy --token "$FIREBASE_TOKEN" -P << parameters.environment >> --only functions:hubspot,functions:users
이렇게 된 것 같습니다. 이제 무대에 오르고prod 환경에서Vercel과Firebase를 사용하여 전단과 후단을 자동으로 배치할 수 있습니다.나는 이것이 너에게 도움이 되기를 바란다. 네가 이 과정에서 약간의 것을 배웠으면 한다. 나는 당연히 해냈지.
Reference
이 문제에 관하여(Vercel, Firebase 및 Circleci와의 지속적인 통합 및 배포 워크플로우), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/matthieuveillon/continuous-integration-and-deployment-workflow-with-vercel-firebase-and-circleci-20n8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)