[Github] Github Actions์ Firebase Channel์ ์ด์ฉํ ์คํ ์ด์ง ํ๊ฒฝ ๊ตฌ์ถ
ํ๋ก์ ํธ ๊ฐ๋ฐ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์๋ ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ฐ๋ฐ ์ด๊ธฐ์ ๊ฐ๊น์ด ์๋ ์๋ฒ๋ฅผ ์ด์ฉํด ๋ณ๊ฒฝ ์ฌํญ์ ๋น ๋ฅด๊ฒ ๋ฐ์ํ ์ ์๋ ๊ฐ๋ฐ(Dev) ํ๊ฒฝ, ์ค์ Production ํ๊ฒฝ์ ์ฌ๋ฆฌ๊ธฐ ์ , Production๊ณผ ๋๊ฐ์ ํ๊ฒฝ์์ ํ ์คํธ ํด๋ณด๊ธฐ ์ํ Stage ํ๊ฒฝ์ด ์์ต๋๋ค.
2019.08.27 - [DevOps/Git] - Github Actions - React ํ๋ก์ ํธ๋ฅผ Firebase์ Deploy ํ๊ธฐ
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
์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ด์ฉํด์ 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
์ ํ์ด์ง์ ์ ์ํ๋ฉด ์๋น์ค ๊ณ์ ์ ์์ฑํ ์ ์์ต๋๋ค.
๋ฐ๋์ ํ์ฌ ์ ํ๋ ํ๋ก์ ํธ๊ฐ 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๋ฅผ ํ์ฑํ ํด์ค์ผ ํฉ๋๋ค.
์ ๋งํฌ๋ฅผ ํด๋ฆญํด 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 Offical Docs https://firebase.google.com/docs/hosting/manage-hosting-resources
'DevOps > Git' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Github] Password authentication was removed์ ๋์ฒํ๊ธฐ (0) | 2021.08.19 |
---|---|
Github Actions - React ํ๋ก์ ํธ๋ฅผ Firebase์ Deploy ํ๊ธฐ (0) | 2019.08.27 |
Github Actions - Matrix & Secrets (0) | 2019.08.26 |
Github Actions - ๊ฐ๋จํ ์ํฌํ๋ก์ฐ ์์ฑํด๋ณด๊ธฐ (0) | 2019.08.24 |
Github Actions ๋๋์ด ํ์ฑํ ๋๋ค. (0) | 2019.08.24 |