Service
home
WOW Onboarding
home
๐Ÿงพ

CI / CD

, level) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "<frozen importlib._bootstrap>", line 1387, in _gcd_import File "<frozen importlib._bootstrap>", line 1360, in _find_and_load File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked ModuleNotFoundError: No module named 'corsheaders'

ํ”„๋ก ํŠธ

Todo: ์ฃผํฌ์˜ ๋ฐฐํฌ๊ฐ€ ์ž˜๋˜์–ด์žˆ๋‹ค๋ฅผ ๋ณด์—ฌ์ค„ ์˜ˆ์ • @์ด์ฃผํฌ
โ€ข
๋ฐฐํฌ๊ฐ€ url ๋‘ ๊ฐœ
โ—ฆ
develop ๋ธŒ๋žœ์น˜- https://mu-go-you-develope.vercel.app
โ—ฆ
main ๋ธŒ๋žœ์น˜- https://mu-go-you.vercel.app

ํ”„๋ก ํŠธ Github actions

๋ฐฑ์—”๋“œ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

๋ฐ‘์— lint check ์ง„ํ–‰ํ•˜๋ฉด์„œ $ pre-commit install ์‹คํ–‰ ์ดํ›„์—
$ pre-commit install --hook-type commit-msg ํ•œ๋ฒˆ ํ•ด์ฃผ์„ธ์š”.
import re import sys # ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํ˜•์‹์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. COMMIT_MSG_REGEX = r"^(feat|fix|docs|style|refactor|test|chore):\s.+" def validate_commit_message(commit_msg_file): with open(commit_msg_file, "r") as file: commit_msg = file.read().strip() if not re.match(COMMIT_MSG_REGEX, commit_msg): print("Error: Invalid commit message format.") print("Commit message should start with one of the following types:") print("feat, fix, docs, style, refactor, test, chore") print('Example: "feat: add new user login feature"') sys.exit(1) if __name__ == "__main__": validate_commit_message(sys.argv[1])
Python
๋ณต์‚ฌ

BE CD

โ€ข
AWS
aws ๋ฐฐํฌ: http://43.203.225.31
/auth/register
/auth/login
์ˆ˜๋™ ๋ฐฐํฌ ๋ฐฉ๋ฒ•
1.
์„œ๋ฒ„ ์ ‘์†
$ ssh ubuntu@43.203.225.31
2.
ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
$ cd ~/MGU-Yulliy-server
3.
๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์—…๋ฐ์ดํŠธ
$ git pull origin develop
4.
๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
$ source venv/bin/activate
5.
ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ โ†’ requirements.txt ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ ๋œ ๊ฒฝ์šฐ
$ pip install -r requirements.txt
6.
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ์šฉ
$ python manage.py migrate
7.
์ •์  ํŒŒ์ผ ์ˆ˜์ง‘(ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋งŒ)
$ python manage.py collectstatic --noinput
8.
gunicorn ์žฌ์‹œ์ž‘
sudo pkill -f gunicorn โ†’ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ข…
$ sudo systemctl restart gunicorn
9.
nginx ์žฌ์‹œ์ž‘
$ sudo systemctl restart nginx

Docker Desktop ๋‹ค์šด๋กœ๋“œ

ubuntu ํ™˜๊ฒฝ์ด๋ผ๋ฉด settings์—์„œ ๋ฐ‘์— ์˜ต์…˜๋“ค ํ™œ์„ฑํ™”ํ•ด์•ผ ์ž˜ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹น
์—๋Ÿฌ

ํŒจํ‚ค์ง€ ์„ค์น˜

1.
Docker ์„ค์น˜๋ฅผ ์œ„ํ•œ ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt-get install docker-ce docker-ce-cli containerd.io sudo apt-get update sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release docker-buildx-plugin docker-compose-plugin
JavaScript
๋ณต์‚ฌ
2.
Docker ๊ณต์‹ GPG ํ‚ค ์ถ”๊ฐ€
sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
JavaScript
๋ณต์‚ฌ
3.
Docker ์ €์žฅ์†Œ ์„ค์ •
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
JavaScript
๋ณต์‚ฌ
4.
ํŒจํ‚ค์ง€ ๋ชฉ๋ก ์—…๋ฐ์ดํŠธ
sudo apt-get update
5.
Docker ํŒจํ‚ค์ง€ ์„ค์น˜
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
JavaScript
๋ณต์‚ฌ
sudo docker run hello-world ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ
์ด๋ ‡๊ฒŒ ๋œจ๋ฉด ๋ฉ๋‹ˆ๋‹น

Docker Build Image & push

1.
docker login
2.
docker build -t <image_name> .
3.
docker run -d -p 80:8000 <image_name>
4.
docker tag my_local_image your_username/your_repo:latest
5.
docker push your_username/your_repo:latest
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey]

๋ฐฑ์—”๋“œ lint check

์ ์šฉ๋˜์–ด ์žˆ๋Š” ํ›…

โ€ข
trailing-whitespace : ๋ถˆํ•„์š”ํ•œ ํ›„ํ–‰ ๊ณต๋ฐฑ ์ œ๊ฑฐ
โ€ข
end-of-file-fixer : ํŒŒ์ผ ๋์— ๊ฐœํ–‰ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋˜๋„๋ก ํ•จ
โ€ข
check-yaml : yaml ํŒŒ์ผ ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ
โ€ข
check-added-large-files : ๋„ˆ๋ฌด ํฐ ํŒŒ์ผ์ด ์ปค๋ฐ‹๋˜์ง€ ์•Š๋„๋ก ๋ฐฉ์ง€
โ€ข
black : ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ Black ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ์— ๋งž๊ฒŒ ์ž๋™์œผ๋กœ ํฌ๋งท โ†’ ์ž๋™ ์ˆ˜์ •
โ€ข
flake8 : ํŒŒ์ด์ฌ ์ฝ”๋“œ๊ฐ€ PEP8 ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ๋ฅผ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ โ†’ ์ˆ˜๋™ ์ˆ˜์ •
ํ„ฐ๋ฏธ๋„์—์„œ ์ปค๋ฐ‹ ์‹œ flake8 ์—์„œ failed โ†’ ์ˆ˜๋™ ์ˆ˜์ • ํ›„ ๋‹ค์‹œ add, commit
๋‚˜๋จธ์ง€์—์„œ failed โ†’ ์ž๋™ ์ˆ˜์ • ๋์œผ๋ฏ€๋กœ ๋ฐ”๋กœ ๋‹ค์‹œ add, commit

์ดˆ๊ธฐ ์„ค์ •

# pre-commit ์„ค์น˜
$ pip install pre-commit
# .git/hooks์— pre-commit ํ›… ์„ค์น˜
$ pre-commit install
# pre-commit ํ›… ์‹คํ–‰ ํ…Œ์ŠคํŠธ (๋ชจ๋“  ํŒŒ์ผ)
$ pre-commit run --all-files

Github Actions workflow

๋กœ์ปฌ pre-commit

โ€ข
์ฝ”๋“œ๊ฐ€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ํ‘ธ์‹œ๋˜๊ธฐ ์ „์— ์˜ค๋ฅ˜๋ฅผ ์žก๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ
โ€ข
๋กœ์ปฌ์—์„œ ์ปค๋ฐ‹์„ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰

Github Actions workflow

โ€ข
์ฝ”๋“œ๊ฐ€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ํ’€๋ฆฌํ€˜์ŠคํŠธ ์ƒ์„ฑ๋  ๋•Œ ์‹คํ–‰
โ€ข
๋ชจ๋“  ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋™์ผํ•œ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋„๋ก (์ตœ์ข… ๊ฒ€์‚ฌ ๋А๋‚Œ)