์ด์ ์ ํฌ๋ํ์คํฌ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ํ ์ ์ฅ์๋ฅผ forkํด์์ ๊ฐ์ธ ๋ ํฌ์์ AWS Amplify๋ก ๋ฐฐํฌํ๋๋ฐ, ๋ณ๊ฒฝ ์ฌํญ์ ์์ชฝ์ ๋ค push ํด์ค์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ ๋๊ผ๋ ๊ฒฝํ์ด ์์์ต๋๋ค.
Amplify๋ก ์งํํ์ ๋ ๋ค์๋ ๊ฒ Next.js๋ก ๋ฐฐํฌ๋ฅผ ํ๋ค๊ณ ํ๋ฉด vercel์ด ๊ฐ์ ํ์ฌ๋ผ์ ์ฐ๋์ด ์ฝ๊ณ CICD๋ฅผ ์ ๊ตฌ์ถํด๋ฌ์ ๋ง์ด ์ฌ์ฉํ๋ค๋ ๋ง์ ๋ค์ ์ ์ด ์์์ต๋๋ค.
์น์๋ฒ ๊ตฌ์ถ์ ์ด๋ ค์์ ๋๋ผ๊ณ ์๋ ๋ Vercel๋ก ์ด๋ ต์ง ์๊ฒ ํ๋ฉด ์๋๋? ์ถ์ด์ ํด๋ณด์๋๋ฐ, ์์ ์ ๋๋ด๊ณ ์ฐพ์๋ณด๋๊น Vercel์ ์น์๋ฒ๋ก ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ฅํ ์๋ ์์ง๋ง Vercel์ ์๋ฒ๋ฆฌ์ค ํ๊ณ์ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ง ๋ชปํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๊ณ , ์ดํ AWS EC2์ Nginx๋ฅผ ์ฌ์ฉํด์ ์น์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉํฅ์ผ๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์๋ ํ ์ ์ฅ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ๋ฌด๋ฃ๋ก Vercel์ ์ด์ฉํด์ ํธ์คํ ์ ํ๋ ค๋ฉด ๊ฐ์ธ ์ ์ฅ์๋ฅผ Vercel์ ๋ถ์ฌ ์ฌ์ฉํด์ผํ๊ณ ์ด๋ฅผ ์ํด ํ ์ ์ฅ์ ๋ฟ๋ง ์๋๋ผ ๊ฐ์ธ ์ ์ฅ์์๋ ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฉ๋์ด์ผ ํ์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ์ต๋๋ค.
- CI: husky > pre-commit > npx lint-staged
- CD: github action
vercel์ ์ฌ์ฉํ๋ฉด CICD๊ฐ ํ์ํ๊ฐ? ๋ผ๊ณ ์๊ฐํ ์ ์์ง๋ง, type ์๋ฌ๋ eslint error์ ๊ด๋ จํด ์ปค๋ฐํ ๋๋ถํฐ ์ฒดํฌํด์ ๋ณ๊ฒฝ์ฌํญ์ ๋ํ ๋ฌธ์ ๋ฅผ ๋ฐ๋ก ํ์ธํ๊ณ , ๊ณ ์น ์ ์๋๋ก husky์ lint-staged๋ฅผ ์ค์ ํด ์ปค๋ฐ์ ์๋ํ ๋๋ง๋ค ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๋๋ก ํ์ต๋๋ค.
์ด ํ๋ก์ ํธ์๋ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ์์์ eslint์ prettier ์ค์ ๋ง ํด๋์์ต๋๋ค.
"lint-staged": {
"*.{js,jsx}": [
"npx prettier --write",
"npx eslint --fix"
]
}
๊ทธ๋ฆฌ๊ณ ๊ฐ๋จํ CD๋ฅผ ์ํด ์ ์ฅ์๊ฐ ๋๊ธฐํ ๊ณผ์ ์ ๊ฑฐ์น๋๋ก ํ์ต๋๋ค.
์ ์ฒด์ ์ธ ๊ณผ์ ์ ๋ค์ ์์๋ฅผ ๋ฐ๋์ต๋๋ค.
- organization repo์ root ์์น์ build.sh ํ์ผ์ ๋ง๋ ๋ค
- ๊ฐ์ธ ๋ ํฌ๋ฅผ ์๋ก ๋ง๋ ๋ค.
- Vercel์ ๊ฐ์ธ ๋ ํฌ๋ฅผ ์ฐ๋์ํค๋ฉด์ .env๋ฅผ ์ค์ ํด์ค๋ค.
- Github Settings > Developer Settings -> Personal access tokens -> Tokens -> Generate new token์ผ๋ก ๋ค์ด๊ฐ์ ghp_๋ก ์์ํ๋ secret ํค๋ฅผ ๋ฐ๊ธ๋ฐ๋๋ค.
- organization repo์ ๊ฐ์ธ ๋ ํฌ ๊ฐ๊ฐ Settings > Secrets and variables -> Actions -> Repository secrets ์ GIT_EMAIL, AUTO_ACTIONS ์ด๋ฆ์ผ๋ก ๊ฐ๊ฐ ์ํฌ๋ฆฟ ํค๋ฅผ ๋ง๋ ๋ค.
- organization repo์ Actions๋ก ๋ค์ด๊ฐ์ new workflow๋ฅผ ์์ฑํ๊ณ ํ์ํ ๋ด์ฉ์ ์์ฑํ๋ค.
1. ํ ๋ ํฌ์ root์ build.sh ํ์ผ์ ๋ง๋ค๊ณ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๊ณ push
#!/bin/sh
cd ../
mkdir output
cp -R ./ํ ๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ/* ./output
cp -R ./output ./ํ ๋ ํฌ์งํ ๋ฆฌ ์ด๋ฆ/
2. Personal Access Tokens ๋ฐ๊ธ๋ฐ๊ธฐ
Settings > Developer Settings > Personal access tokens > Tokens > Generate new token์ ํตํด ghp_๋ก ์์ํ๋ secret ํค๋ฅผ ๋ฐ๊ธ๋ฐ์์ต๋๋ค.
3. ๊ฐ Repository secrets์ ๋ด github email๊ณผ personal access token์ ๊ฐ์ผ๋ก ์ํฌ๋ฆฟ ํค๋ฅผ ๋ฑ๋กํ๊ธฐ
GIT_EMAIL์ ๊นํ ์ด๋ฉ์ผ, AUTO_ACTIONS์ ์ด์ ์ ๋ฐ๊ธ ๋ฐ์ ghp_๋ก ์์ํ๋ personal access Token์ ๋ฑ๋กํ๊ณ organization repo๋ forked๋ ๋ ํฌ ์์ชฝ ๋ชจ๋ ๋ฑ๋กํด์ผ ํ์ต๋๋ค.
4. Organization repo > Actions > set up a workflow yourself -> ๋ก .yml ์์ฑ
๋ด์ฉ์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋กฌํํธ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ง๊ธ ์ง์ํ์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ๋งํฌ๋ ์๋ ๋จ๊ฒผ์ต๋๋ค
https://cpina.github.io/push-to-another-repository-docs/generic-example.html
// .github/workflows/mfc_cicd.yml
name: git push into another repo
on:
push:
branches: [develop]
jobs:
build:
runs-on: ubuntu-latest
container: pandoc/latex
steps:
- uses: actions/checkout@v2
- name: Install mustache (to update the date)
run: apk add ruby && gem install mustache
- name: creates output
run: sh ./build.sh
- name: Pushes to another repository
id: push_directory
uses: cpina/github-action-push-to-another-repository@main
env:
API_TOKEN_GITHUB: ${{ secrets.AUTO_ACTIONS }}
with:
source-directory: "output"
destination-github-username: "jieunwang0"
destination-repository-name: "mfc-front"
user-email: ${{ secrets.GIT_EMAIL }}
commit-message: ${{ github.event.commits[0].message }}
target-branch: develop
- name: Test get variable exported by push-to-another-repository
run: echo $DESTINATION_CLONED_DIRECTORY
์ด๋ ๊ฒ ํ๊ณ ์ดํ ์ปค๋ฐ ๋ด์ญ๋ค์ pushํ๋ฉด organization repo์์ ์๋์ผ๋ก ๊ฐ์ธ ๋ ํฌ๋ก push ๋๋์ง ํ์ธํ ์ ์๋ค.
์ด๋ ๊ฒ ํด์ ๋ก์ปฌ ์ ์ฅ์์ ์ปค๋ฐํ ๋ husky๋ก prettier ์ค์ ๊ณผ eslint๋ฅผ ์ฒดํฌํด์ ์ปค๋ฐํ ์ ์๋๋ก ํ๊ณ , ํ ์๊ฒฉ ์ ์ฅ์๋ก pushํ๋ฉด ๊ฐ์ธ ์ ์ฅ์๋ก ๋๊ธฐํ ๋๋๋ก ๋์ด์์ต๋๋ค.