[Github] Github Actions์™€ Firebase Channel์„ ์ด์šฉํ•œ ์Šคํ…Œ์ด์ง€ ํ™˜๊ฒฝ ๊ตฌ์ถ•

๋ฐ˜์‘ํ˜•

ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ดˆ๊ธฐ์— ๊ฐ€๊นŒ์ด ์žˆ๋Š” ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ(Dev) ํ™˜๊ฒฝ, ์‹ค์ œ Production ํ™˜๊ฒฝ์— ์˜ฌ๋ฆฌ๊ธฐ ์ „, Production๊ณผ ๋˜‘๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ ์œ„ํ•œ Stage ํ™˜๊ฒฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

2019.08.27 - [DevOps/Git] - Github Actions - React ํ”„๋กœ์ ํŠธ๋ฅผ Firebase์— Deploy ํ•˜๊ธฐ

 

Github Actions - React ํ”„๋กœ์ ํŠธ๋ฅผ Firebase์— Deploy ํ•˜๊ธฐ

Actions ๋งˆ์ง€๋ง‰ ํฌ์ŠคํŠธ๋กœ React ํ”„๋กœ์ ํŠธ๋ฅผ Firebase์— Deploy ํ•˜๋Š” ๊ธ€์„ ์จ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ YAML ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ๊ฐ„๋‹จํ•œ Workflow์™€ Matrix์™€ Secrets ๋“ฑ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊นŒ์ง€๋ฅผ ๋‹ค๋ค„๋ดค์Šต

blog.neonkid.xyz

2๋…„ ์ „, Github Actions๊ฐ€ ์ดˆ๊ธฐ์— ๋‚˜์™”์„ ๋•Œ React ํ”„๋กœ์ ํŠธ๋ฅผ Firebase์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ์‹œ๋„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ์—๋Š” firebase-tools๋ผ๋Š” npm ํŒจํ‚ค์ง€๋ฅผ Github actions์—์„œ ์ œ๊ณตํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์ฃผ์ž…ํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ์š”.

 

ํ•˜์ง€๋งŒ ์ด ๋ฐฐํฌ ๋ฐฉ์‹์€ ๊ณต๊ต๋กญ๊ฒŒ๋„ ๋ฐฐํฌ๋Š” ์‰ฝ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐํฌ ์ „ ๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฏธ๋ฆฌ ํ•ด๋ณผ ์ˆ˜ ์—†๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Firebase์—์„œ ์ƒˆ๋กœ์ด ๊ณต๊ฐœํ•œ Preview Channel์„ ์ด์šฉํ•ด ๋˜‘๊ฐ™์€ Firebase ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

Preview Channel

Firebase์—์„œ๋Š” ์œ ์ €๋“ค์—๊ฒŒ ๋ณด์—ฌ์งˆ ํŽ˜์ด์ง€(Live) ์ด์ „์— ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœํ•œ ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ๋Š” Preview Channel์„ ์ด๋ฒˆ์— ์ƒˆ๋กœ์ด ๊ณต๊ฐœํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด Preview Channel์„ ์ด์šฉํ•ด์„œ Firebase์˜ ๋˜‘๊ฐ™์€ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ Firebase์— React ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•ด ๋ฐฐํฌํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ Live Channel์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์— ๋˜‘๊ฐ™์€ ํ™˜๊ฒฝ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ฑ„๋„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ Preview Channel์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

 

Preview Channel์€ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฑ„๋„๋กœ ์œ ํšจ๊ธฐ๊ฐ„์„ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ Github์— React ํ”„๋กœ์ ํŠธ๋ฅผ Pull Request ์š”์ฒญํ•  ๋•Œ ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ Preview Channel์— ๋นŒ๋“œ๋˜์–ด ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

How to use

์šฐ๋ฆฌ๋Š” ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Github actions์˜ workflow์— ์ง์ ‘ Node ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•˜์—ฌ npm์œผ๋กœ firebase-tools๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋นŒ๋“œํ•ด ๋ฐฐํฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

 

Firebase์—์„œ๋Š” Github actions์—์„œ Preview Channel์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก actions ๋„๊ตฌ๋ฅผ Marketplace์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

https://github.com/marketplace/actions/deploy-to-firebase-hosting

 

Deploy to Firebase Hosting - GitHub Marketplace

A GitHub Action to deploy to Firebase Hosting

github.com

์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ด์šฉํ•ด์„œ Preview Channel์„ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๋จผ์ € ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐ์กด์— ์‚ฌ์šฉํ–ˆ๋˜ Github Actions Workflow์— ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ firebaseServiceAccount ๋ถ€๋ถ„์ด Github Secrets๋ฅผ ์‚ฌ์šฉํ–ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด Workflow๋ฅผ ๋Œ๋ฆฌ๊ธฐ ์ „์— Google Cloud Platform์—์„œ Service Account๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ Key๋ฅผ ๋ฐ›์•„ Github Secrets์— ์ฃผ์ž…ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ Pull Request ๋ณ„๋กœ ์ƒ์„ฑ๋˜๋Š” Preview channel์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ 7์ผ๋กœ ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์ž์œ ๋กœ์ด ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

 

https://console.cloud.google.com/iam-admin/serviceaccounts

 

Google Cloud Platform

ํ•˜๋‚˜์˜ ๊ณ„์ •์œผ๋กœ ๋ชจ๋“  Google ์„œ๋น„์Šค๋ฅผ Google Cloud Platform์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•˜์„ธ์š”.

accounts.google.com

์œ„ ํŽ˜์ด์ง€์— ์ ‘์†ํ•˜๋ฉด ์„œ๋น„์Šค ๊ณ„์ •์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ˜๋“œ์‹œ ํ˜„์žฌ ์„ ํƒ๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ Firebase์˜ ํ”„๋กœ์ ํŠธ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๊ณ  ๋‚˜์„œ ์„œ๋น„์Šค ๊ณ„์ • ์ƒ์„ฑ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. 

 

์ ๋‹นํ•œ ๊ณ„์ • ์ด๋ฆ„๊ณผ ID๋ฅผ ์ž…๋ ฅํ•œ ํ›„ ๋‹ค์Œ์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 

(Google์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ github-actions-{๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ ์ด๋ฆ„} ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

 

์ด 4๊ฐ€์ง€์˜ Role์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ Role์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ์„ค๋ช…๋“œ๋ฆฌ์ž๋ฉด..

 

  • Firebase Authentication Admin

    Preview URL์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ PR์„ ์˜ฌ๋ฆฌ๊ณ  ๋ฐฐํฌํ•œ Preview Channel์˜ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž„์‹œ ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž„์‹œ ์ฃผ์†Œ ์ƒ์„ฑ์„ ์œ„ํ•ด ์ด ๊ทœ์น™์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Firebase Hosting Admin

    ์ˆ˜์ •ํ•œ ์ฝ”๋“œ๋ฅผ ์ง์ ‘ Firebase์— ๋ฐฐํฌํ•˜๋Š” Role์ž…๋‹ˆ๋‹ค. 

  • Cloud Run Viewer

    ๋งŒ์•ฝ ํ”„๋กœ์ ํŠธ์— Cloud Functions ํ˜น์€ Cloud Run์„ ๋ชจ๋†€๋ฆฌ์Šค๋กœ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ํ•ด๋‹น Role์ด rewrite ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • API Keys Viewer

    Firebase actions์— ์‚ฌ์šฉ๋˜๋Š” firebase-tools ๋ช…๋ น์–ด๊ฐ€ ๋‚ด ํ”„๋กœ์ ํŠธ์— ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก API key๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” Role ์ž…๋‹ˆ๋‹ค.

์กฐ๊ธˆ ๋ณต์žกํ•œ ๊ถŒํ•œ ์ฒด๊ณ„์ด์ง€๋งŒ ๊ฐ 4๊ฐ€์ง€ Role์ด ๋ชจ๋‘ ํ•„์š”ํ•˜๋ฉฐ ๋ชจ๋‘ ์„ ํƒํ•˜์…จ์œผ๋ฉด ์ƒ์„ฑ์„ ๋งˆ์นฉ๋‹ˆ๋‹ค.

 

์ƒ์„ฑ์ด ๋๋‚ฌ์œผ๋ฉด ์ด๋ ‡๊ฒŒ ๊ณ„์ •์ด ํ•˜๋‚˜ ๋ชฉ๋ก์— ์ถ”๊ฐ€๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ID๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

 

KEYS์— ๋“ค์–ด๊ฐ€์„œ ADD KEY๋ฅผ ๋ˆŒ๋Ÿฌ Firebase CLI๊ฐ€ ๋ฐฐํฌํ•  ๋•Œ ์“ธ ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ํ•ด์ค๋‹ˆ๋‹ค. ์ด ํ‚ค๊ฐ€ ๋ฐ”๋กœ Github Secrets์— ์ ์žฌํ•  Firebase ๋ฐฐํฌ ํ‚ค์ž…๋‹ˆ๋‹ค.

 

KEY๋Š” ๋ฐ˜๋“œ์‹œ JSON์šธ ๋ฐœ๊ธ‰ ๋ฐ›์•„ PC์— ์ €์žฅํ•ด๋‘ก๋‹ˆ๋‹ค.

 

์ €์žฅ์ด ๋๋‚ฌ์œผ๋ฉด ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

 

 

์ด์ œ ํ”„๋กœ์ ํŠธ ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์—์„œ Secrets์— ๋“ค์–ด๊ฐ„ ํ›„ ์•„๊นŒ ์œ„์—์„œ ์ง€์ •ํ•œ Secret ์ด๋ฆ„์œผ๋กœ Secret์„ ๋งŒ๋“  ๋‹ค์Œ JSON์œผ๋กœ ๋ฐœ๊ธ‰ ๋ฐ›์€ ํ‚ค๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  Secret์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

Firebase CLI๋ฅผ ์ด์šฉํ•œ ํ‚ค ๋ฐœ๊ธ‰

์ด๋ ‡๊ฒŒ ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›๋Š” ๊ณผ์ •์ด ์‰ฝ์ง€๋งŒ์€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ž๋™ํ™”ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ์š”. ๊ธฐ์กด์˜ Firebase CLI์—์„œ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

$ firebase init hosting:github

 

์ด ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ธฐ์กด์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ๋˜‘๊ฐ™์ด ์ง„ํ–‰๋˜๋ฉฐ Github์˜ ๋กœ๊ทธ์ธ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ , ์‚ฌ์šฉํ•  ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ์˜ ์ด๋ฆ„๋งŒ ์ž…๋ ฅํ•œ๋‹ค๋ฉด ๋‚˜๋จธ์ง€ ํ‚ค ๋ฐœ๊ธ‰๊ณผ Workflow์˜ ์ƒ์„ฑ์„ ๋ชจ๋‘ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ workflow ์ƒ์„ฑ์‹œ ๊ธฐ์กด์˜ ํŒŒ์ผ์— Merge๋ฅผ ํ•ด์ฃผ์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— CLI๊ฐ€ ์ถ”๊ฐ€ํ•œ ์Šคํฌ๋ฆฝํŠธ์—์„œ Merge ์ž‘์—…์€ ์ˆ˜๋™์œผ๋กœ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

Firebase Hosting API ํ™œ์„ฑํ™”

ํ‚ค๋ฅผ ์ž๋™ ํ˜น์€ ์ˆ˜๋™์œผ๋กœ ๋ฐœ๊ธ‰๋ฐ›๊ณ  workflow๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค ํ•˜๋”๋ผ๋„ Google Cloud Platform์—์„œ Hosting API๊ฐ€ ํ™œ์„ฑํ™” ๋˜์–ด ์žˆ์ง€ ์•Š์•˜๋‹ค๋ฉด Preview Channel ๋ฐฐํฌ๊ฐ€ ์ด๋ค„์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 

 

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์•„๋ž˜์˜ ๋งํฌ๋กœ ์ ‘์†ํ•˜์—ฌ Firebase Hosting API๋ฅผ ํ™œ์„ฑํ™” ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

https://console.cloud.google.com/marketplace/product/google/firebasehosting.googleapis.com?q=search&referrer=search&project=nk-project-8ec03

 

Google Cloud Platform

There is a temporary block on your account. This happens when Google detects requests from your network that may have been sent by malicious software, a browser plug-in, or script that sends automated requests. Retry in a few minutes.

console.cloud.google.com

์œ„ ๋งํฌ๋ฅผ ํด๋ฆญํ•ด API ํ™œ์„ฑํ™”๋ฅผ ํด๋ฆญํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

Firebase๊ฐ€ ์ฃผ์†Œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹

๋ชจ๋“  ์ž‘์—…์ด ๋๋‚œ ๋‹ค์Œ PR์„ ์˜ฌ๋ฆฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด PR ์ง„ํ–‰์‹œ, Bot์ด ์‚ฌ์ดํŠธ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค๋Š” ์•Œ๋ฆผ์„ ์ฃผ๋ฉฐ ํ•ด๋‹น ๋งํฌ๋กœ ์ ‘์†ํ•˜๋ฉด ์ˆ˜์ •๋œ ์ฝ”๋“œ๋กœ ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜ฌ๋ผ๊ฐ„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด ๋งํฌ๋Š” Firebase์—์„œ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์ฃผ์†Œ์ด๋ฉฐ ์ฃผ์†Œ์˜ ๊ทœ์น™์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ฃผ์†Œ ๋งจ ์™ผ์ชฝ์— ์œ„์น˜ํ•˜๋Š” Site name์€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„, -- ๋‹ค์Œ ๋ถ€๋ถ„์ด ์ฑ„๋„ ID์ด๋ฉฐ ๊ทธ ๋‹ค์Œ์ด ๋ฐ”๋กœ ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํ•ด์‹œ๊ฐ’์ž…๋‹ˆ๋‹ค. ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ์œผ๋กœ ์ธํ•˜์—ฌ PR ๋งˆ๋‹ค ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ ํ…Œ์ŠคํŠธ์‹œ ์œ ์šฉํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

Channel ๊ด€๋ฆฌ

ํ˜„์žฌ ์šด์˜ ์ค‘์ธ ์ฑ„๋„์„ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด Firebase ์ฝ˜์†”์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฝ˜์†”์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค ๊ณ„์ •๊ณผ URL ๊ทธ๋ฆฌ๊ณ  ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

 

$ firebase hosting:channel:list

Firebase CLI ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด๊ฑฐ๋‚˜ ์‚ญ์ œ, ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋งŒ์•ฝ ์ˆ˜๋™์œผ๋กœ Preview Channel ๋ฐฐํฌ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

$ firebase hosting:channel:deploy preview --expires 1d

expires๋ฅผ ์ฃผ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ forever๊ฐ€ ๋˜๋ฒ„๋ฆฌ๋ฉฐ ํ•ด๋‹น ํ”„๋ฆฌ๋ทฐ ์ฑ„๋„์€ ์ง€์†์ ์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

๋งˆ์น˜๋ฉฐ..

Firebase์˜ Preview Channel์„ ์ด์šฉํ•ด์„œ Stage ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ Netlify๋ฅผ ์ด์šฉํ•ด๋ณผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ธฐ์กด์— Firebase๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ˜„์žฌ๋„ Firebase๋กœ ์šด์˜ ์ค‘์ธ ํŽ˜์ด์ง€๊ฐ€ ์žˆ์–ด ํฌ์ŠคํŒ…ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ˜„์žฌ Preview Channel์€ ๋ฒ ํƒ€ ๋ฒ„์ „์œผ๋กœ ์šด์˜ ์ค‘์— ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ๊ณต์‹์ ์ธ ๊ธฐ๋Šฅ์€ ์•„๋‹˜์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Google Firebase์˜ ๊ณต์‹ ๋ฌธ์„œ๋‚˜ ๋ธ”๋กœ๊ทธ์—๋„ ์ƒ์„ธํžˆ ์‚ฌ์šฉ๋ฒ•์ด ๊ธฐ์žฌ๋˜์–ด ์žˆ๋‹ค๋Š” ์ ์„ ๋ฏธ๋ฃจ์–ด ๋ณผ ๋•Œ ๊ณง ์ •์‹ ๋ฒ„์ „์œผ๋กœ ๋ฆด๋ฆฌ์ฆˆ ๋  ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

 

 

 

 

์ฐธ๊ณ :

- Google Firebase Blog (https://firebase.googleblog.com/2020/10/preview-channels-firebase-hosting.htm)

- Google Firebase Offical Docs https://firebase.google.com/docs/hosting/manage-hosting-resources

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments