October 07, 2021
๋ธ๋ก๊ทธ๋ฅผ ์๋ก ํ์ ๊ธ์ ์์ฑ์ ํ๋ฉด์ ์์ฃผ ์น๋ช
์ ์ผ๋ก ๊ท์ฐฎ์ ๋ฌธ์ ๊ฐ ํ๋ ์๊ฒผ๋ค. ๋ฐ๋ก
deploy
!! ํฌ์คํ
์ ํ๋ ์ธ ๋๋ง๋ค ์ผ์ผํ ๋ฐฐํฌ๋ฅผ ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์น๋ ๊ฒ์ด ๋๋ฌด ๊ท์ฐฎ์๋ ๋๋ ์๋ํ์ ๊ฐ์ ํจ์ ๋๋๋ค. ๊ตฌ๊ธ์์ ์ด์ฌํ ์์น๋ฅผ ํ ๊ฒฐ๊ณผ Jenkins
์ GitHub Actions
์ด๋ผ๋ ํด์ ๋ฐ๊ฒฌํ๊ณ โฆ ๊ทธ๋ฌ๋ค๊ฐ ๊ฒฐ๊ตญ GitHub Actions
๋ผ๋ ๋ฐฉ๋ฒ์ ์ฑํํ๊ธฐ๋ก ๊ฒฐ์ฌ์ ํ๋๋ฐ โฆ๋๋ณด๊ธฐ
CI/CD๋ ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ๋จ๊ณ๋ฅผ ์๋ํ
์์ผ์ ์งง์ ์ฃผ๊ธฐ๋ก ๊ณ ๊ฐ์๊ฒ ์ ๊ณต์ ํ ์ ์๊ฒ๋ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
CI : Continuous Integration(์ง์์ ํตํฉ)
CD : Continuous Delivery(์ง์์ ์ ๊ณต)/ Continuous Deployment(์ง์์ ๋ฐฐํฌ)
์ ์ค์๋ง์ด์ง๋งโฆ๋ฌด์จ ๋ง์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค ๋ ์์๋ณด์
ํ ์ค๋ก ์์ฝํ๋ฉด ํตํฉ์ ์ํ ๋จ๊ณ(๋น๋, ํ ์คํธ, ๋จธ์ง)๋ฅผ ์๋ํํ๋ ๊ฒ์ด๋ค
CI๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ ์ฉํ๋ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์๋ก์ด ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ๊ธฐ์ ์ผ๋ก ๋น๋ ๋ฐ ํ ์คํธ๋์ ๊ณต์ ๋ ํ์งํ ๋ฆฌ์ ํตํฉ์ด ๋๋ค. ์ฌ๋ฌ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ๋์์ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋ ์ฝ๋ ์์ ์ ํ ๊ฒฝ์ฐ์ ์ถฉ๋ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
์ง์์ ์ ๊ณต
์ง์์ ๋ฐฐํฌ
CI
CD
GitHub์์ ์ ๊ณตํ๋ ์ํฌํ๋ก์ฐ๋ฅผ ์๋ํํ๋๋ก ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค.
Github์์ ์ฌ๋ฌ๊ฐ์ง workflow ํ ํ๋ฆฟ์ ์ถ์ฒํด์ฃผ๋๋ฐ, ์ด๊ฑธ ์ฌ์ฉํจ์ผ๋ก์ ํ ์คํธ/๋น๋/๋ฐฐํฌ ๋ฑ ๋ค์ํ ์์ ๋ค์ ์๋ํํ์ฌ ๋๋ฑ ์ฒ๋ฆฌํ ์ ์๋ค.
Workflow(์ํฌ ํ๋ก์ฐ)
job
์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์ด๋ฒคํธ์ ์ํด ์คํ๋๋ค.YAML
์ผ๋ก ์์ฑ๋๊ณ , .github/workflows
ํด๋ ์๋์ ์ ์ฅ๋๋ค.Event(์ด๋ฒคํธ)
ex)
# push๋ PR์ด ๋ฐ์ํ ๋ ์ํฌํ๋ก์ฐ ์คํ
on: [push, pull_request]
๊ฒ๋ค๊ฐ cron ๋ฌธ๋ฒ์ผ๋ก schedule
์ด๋ฒคํธ๋ฅผ ์ค์ ํ ์ ์๋ค!
ex)
# ์-๊ธ ์ค์ 9์
on:
schedule:
- cron: '0 9 * * 1-5'
Job(์์ )
Step(์คํ )
Runner(๋ฌ๋)
GitHub Actions Runner Application
์ด ์ค์น๋ ์๋ฒ.GitHub Actions๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Access Token
์ด ํ์ํ๋ค. ๋ ํฌ์งํ ๋ฆฌ์ ์ง์ ์ ์ผ๋ก ์ ๊ทผ์ ํด์ผํ๊ธฐ ๋๋ฌธ!!
์ฌ๊ธฐ์์ ๋ฐ๊ธ๋ฐ์ ์ ์๋ค.
Generate New Token
๋ฒํผ์ ํด๋ฆญํด์ Note์ ๋ถ๋ถ์ ํ ํฐ ์ด๋ฆ์ ์ ๊ณ , Select scopes์ Repo๋ถ๋ถ์ ์ ๋ถ ์ฒดํฌํด์ค๋ค.
Generate Token
๋ฒํผ์ ๋๋ฅด๋ฉด ํ ํฐ์ด ์์ฑ๋๋ค! ๊ทธ๋ฐ๋ฐ ํ ํฐ์ ๋ค์์ ๋ค์ ํ์ธํ ์ ์์ผ๋๊น ๊ผฌ์ฅ..๋ณต์ฌํด์ ์ด๋ ์ ์ด๋์ผํ๋ค..
์์์ ๋ฐํํ ํ ํฐ์ ๋ ํฌ์งํ ๋ฆฌ์ ํ ๋น์ ํด์ฃผ์.
๋ ํฌ์งํ ๋ฆฌ์ ์ค์ ์ ๋ค์ด๊ฐ Secrets
ํญ์ ์๋ New repository secret
๋ฒํผ์ ํด๋ฆญํด์ Name์๋ ํ ํฐ ์ด๋ฆ(์์ ํ ํฐ ์ด๋ฆ๊ณผ ๋ฌ๋ผ๋ ๋จ!), Value์๋ ์์์ ๋ฐํํ ํ ํฐ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ ์ถ๊ฐ๋ฅผ ํ๋ฉด ๋!
์ํฌํ๋ก์ฐ๋ฅผ ์คํ์ํค๊ธฐ ์ํด์๋ ๋จผ์ .github/workflows
๋ฐ์ main.yml
ํ์ผ์ ์ถ๊ฐํด์ค๋ค.
# GitHub Action์ workflow ์ด๋ฆ
name: Gatsby Publish
# gh-pages๋ผ๋ ๋ธ๋์น์ push๋ฅผ ํ ๋๋ง๋ค jobs๋ฅผ ์คํ
on:
push:
branches:
- gh-pages
jobs:
build_gatsby:
name: build
# ์คํ ํ๊ฒฝ์ด ubuntu-latest
runs-on: ubuntu-latest
steps:
# checkout์ ํด์ฃผ๋ ์ก์
์์ค์ฝ๋๋ฅผ ์ฌ์ฉ
- uses: actions/checkout@v2
- name: packages install๐ธ
run: yarn install
- name: gatsby build๐
run: yarn build
env:
# GH_API_KEY์ secret์ ์์ฑํ ๋ ์ค์ ํ ์ด๋ฆ์ผ๋ก ๋ฃ์ด์ผ ํ๋ค
GH_API_KEY: ${{secrets.TOKEN_KEY}}
- name: deploy๐ฐ
uses: maxheld83/ghpages@v0.2.1
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
# ์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง! TOKEN_KEY ๋์ ์์ ์ด ์ค์ ํ ์ด๋ฆ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค
GH_PAT: ${{secrets.TOKEN_KEY}}
BUILD_DIR: 'public/'
์ ์ฝ๋๋ฅผ ์์ฑํ ๋ค์ ๋ธ๋์น์ ํธ์๋ฅผ ํด์ฃผ๋ฉด, repository์ Actionsํญ์ ์ํฌํ๋ก์ฐ๊ฐ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค!
๋ธ๋์น์ push๋ฅผ ํ๋ฉด, ๋ฐ๋ก Github Action์ด ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์๋ ๊ฒ!
๋ง์ฝ ์ ์ผ๋ จ์ ๊ณผ์ ์ ์คํํ๊ณ , ๋ฐฐํฌ๊น์ง ์ฑ๊ณต์ ์ผ๋ก ๋์๋ค๋ฉด ์ด๋ฐ ํ๋ฉด์ด ๋ฐ ๊ฒ์ด๋ค.
์-์ ์ ์ด๋ก๋ถโฆ
๋ธ๋ก๊ทธ๋ฅผ ํ์ธํด๋ณด๋ฉด, ๋งค์ฐ๋งค์ฐ ์ ํฌ์คํ
์ด ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค!
ํํํ..! ์ด์ ๋์ด์ ๊ท์ฐฎ๊ฒ npm run deploy
์ํด๋ ๋๋คโฆ! ํํํ..!
์์ง ์ํฌํ๋ก์ฐ๋ฅผ ๋ฐฑํผ์ผํธ ์ดํดํ์ง๋ ๋ชปํ์ง๋ง, ์ค์ ๋ก ์ด๋ ๊ฒ ๋๋ ค๋ณด๋๊น ๋๋ฌด ํธํ๊ณ โฆ์ง๋ฆฟํดโฆ! ๋ค์์ ํน์๋ ์๋ํํด์ผํ ์ผ์ด ์๋ค๋ฉด ๋ ์ฃผ์ ์์ด GitHub Actions๋ฅผ ์ฌ์ฉํ ๊ฒ ๊ฐ๋ค..! ๋ฌผ๋ก ์ ํจ์ค๋ ๊ผญ ์ฌ์ฉํด๋ณด๋๊ฑธ๋ก >_^