GithubAction์ ์ด์ฉํ CD (feat: appleboy/ssh-actions@master)
CD๋ฅผ ํ๋ฉด ๋ณดํต codeploy๋ฅผ ์ด์ฉํด ๋ง์ด ํ๋ ๊ฒ ๊ฐ๋๋ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ ์ญ์ ๊ธฐ๋กํด๋ณด๊ณ ์ ํ๋ค. ์๋ฒ์ ssh๋ก ์ ์ํ์ฌ ์ง์ ๋ ๋ช ๋ น์ด๋ฅผ ์ฐ์ํด์ ์คํํด์ฃผ๋ ์์ ์ ์๋ํ ํ๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋กํ ๊ธ์ด๋ค. ์ด ๋ฐฉ๋ฒ์ ์์ ํ๊ณ ๊ณต์์ ์ธ ๋ฐฉ๋ฒ์ด๋ผ๊ธฐ ๋ณด๋ค๋ ์ผ๋งค ๋๋์ด ๊ฐํ์ง๋ง ์ผ๋จ ๋์๊ฐ๋๋ก ํ๋ ๋ฐ์ ๊ด์ฌ์ด ์๋ ์ฌ๋์ ์ํด ๊ทธ ๋ฐฉ๋ฒ์ ๊ธฐ๋กํด๋ณด๊ณ ์ ํ๋ค.
์ฌ์ ์๊ตฌ ์ฌํญ
EC2 ๋ฐ ๋ฐฐํฌํ ์ฝ๋
EC2 password๋ก ์ ์ํ๋ ์ค์
์ํฉ
๋์ ๊ฒฝ์ฐ ์๋ฒ์ ์ ์ํด์ ์คํ๋์ด์ผ ํ๋ ๋ช ๋ น์ด๋ ์๋์ ๊ฐ๋ค.
pm2 kill
rm -rf dist //ํ์
์คํฌ๋ฆฝํธ ๋น๋ ํ์ผ ์ญ์
git pull origin main //์ดํ ๋น๋ฐ๋ฒํธ ์
๋ ฅ
yarn run buildOnly //ํ์
์คํฌ๋ฆฝํธ ํ์ผ ๋น๋
pm2 start dist
์ต์ข ์ ์ผ๋ก ์์ฑ๋ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค. ๊นํ ์ก์ ์๋ ์๋ฒ์ ssh์ ์์ ํ๋ ๊ฒ์ ๋๋ workflow๊ฐ ์๋ค. ์ด๊ฒ์ ์ด์ฉํด์ ์๋ฒ์ ์ ์ํ ๋ค, ์ ๋ช ๋ น์ด๋ค์ ์ฐจ๋ก๋ก ์คํํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๊ธฐ ์ํด 3๊ฐ์ง ๋จ๊ณ๋ก ๋๋์ด ์งํํ ๊ฒ์ด๋ค.
- appleboy/ssh-action@master๋ฅผ ์ด์ฉํด ์๋ฒ ์ ์
- git credential๋ฅผ ์ด์ฉํด ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ๊ณผ์ ์คํต
- ์์ ์ ํ์๋ ๋ช ๋ น์ด ์คํ
appleboy/ssh-action@master๋ฅผ ์ด์ฉํด ์๋ฒ ์ ์
๋จผ์ ์๋ฒ์ ์ ์ํด๋ณด๋๋ก ํ์. ์์ธํ ์ต์ ์ ์๋ ๋งํฌ์์ ํ์ธํ ์ ์๋ค.
https://github.com/appleboy/ssh-action
๋จผ์ ์์ ์ ๊นํ ๋ ํฌ์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์์ .github/workflowsํด๋ ์์ yamlํ์ผ์ ํ๋ ์์ฑํ๋๋ก ํ์. ์ด๋ฆ์ ๋ง์๋๋ก ํด๋ ๋๋ค. ๋๋ deploy.yamlํ์ผ์ ๋ง๋ค์๋ค.
name: deploy
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
AUTO_DEPLOY:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 //point 1
- name: Run scripts in server
uses: appleboy/ssh-action@master. //point 2
with:
password: ${{ secrets.PASSWORD }}
host: ${{ secrets.HOST }}
username: ${{ secrets.USER_NAME }}
port: 22
script: |
//์๋ฒ์ ์ ์ํ ๋ค ์คํํ ๋ช
๋ น์ด๋ค
์ ํ์ผ์์ password, host, username์ ๊นํ ๋ ํฌ์ ํ๊ฒฝ๋ณ์๋ก ๋ฏธ๋ฆฌ ๋ฑ๋กํด๋์ด์ผ ํ๋ค. password๋ ์๋ ๊ธ์ ์ฐธ๊ณ ํด์ password๋ก ์๋ฒ์ ์ ์ํ๋ ์ค์ ์ ํด์ผํ๋ค.
AWS EC2 ๋น๋ฐ๋ฒํธ๋ก ์ ์ํ๊ธฐ
๋น๋ฐ๋ฒํธ๋ก ์ ๊ทผํ๋ ์ค์ ์ ํ๋ค๋ฉด ์๋ ๊ฐ๋ค์ ํ๊ฒฝ๋ณ์๋ก ๋ฑ๋กํด์ฃผ๋๋ก ํ์.
password : ์์์ ์ค์ ํ ๋น๋ฐ๋ฒํธ
host : public IPv4 DNS๊ฐ (AWS console์์ ํ์ธ ๊ฐ๋ฅ)
username : home/000์ ๋ค์ด๊ฐ๋ ์ ์ . ์ผ๋ฐ์ ์ผ๋ก ubuntu์ด๋ ๋๋ ec2-user์์. ec2์ ์ํด์ ํด๋ ์ด๋ฆ์ ํ์ธํด ์ ์ ์์
๊ฐ๋ค์ ํ๊ฒฝ๋ณ์๋ก ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
Github action ํ๊ฒฝ ๋ณ์ ๋ฑ๋ก
์ด์ ๋ค์ ๋จ๊ณ์์๋ ๊นํ๋ธ์์ ํด๋ก ์ ๋ฐ์ ๋ ๋ง๋ค ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ ๊ณผ์ ์ ์๋ตํด๋ณด๋๋ก ํ์.
๋น๋ฐ๋ฒํธ ์ ๋ ฅ ๊ณผ์ ์คํต
2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. ์ ์ด์ ec2์์ ๊ฐ์ ํด๋ก ๋ฐ์ ๋ ssh๋ก ํด๋ก ๋ฐ์๋ ๋๊ณ git credentials๋ฅผ ์ด์ฉํด๋ ๋๋ค. ์ฌ๊ธฐ์๋ git credentials๋ฅผ ์ด์ฉํ ๊ฒ์ด๋ค. ๋ฐฉ๋ฒ์ ๊ฐ๋จํ๋ค. ec2์ ์ ์ํ ๋ค ์๋ ๋ช ๋ น์ด๋ฅผ ์คํ์ํค๋ฉด ๋๋ค.
git config --global credential.helper store
์ด๋ ๊ฒ ํ ๋ค ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํด์ฃผ๋ฉด ๊ทธ ๊ฐ์ด ์ ์ฅ๋์ด ๋ค์๋ถํฐ๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์ง ์๋๋ค.
๋ช ๋ น์ด ์ ๋ ฅ
์ด์ ์๋ฒ์ ์ ์ํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ํํด์ผ ํ ์ฝ๋๋ค์ ์ ๋ ฅํด์ฃผ๋ฉด ๋์ด ๋๋ค. ์ ์ฒด deploy.yaml์ ์๋์ ๊ฐ๋ค.
name: deploy
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
AUTO_DEPLOY:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2 //point 1
- name: Run scripts in server
uses: appleboy/ssh-action@master. //point 2
with:
password: ${{ secrets.PASSWORD }}
host: ${{ secrets.HOST }}
username: ${{ secrets.USER_NAME }}
port: 22
script: |
pm2 kill
rm -rf dist //ํ์
์คํฌ๋ฆฝํธ ๋น๋ ํ์ผ ์ญ์
git pull origin main //git credentials์ ์ํด ๋น๋ฐ๋ฒํธ ์
๋ ฅ ๊ณผ์ ์คํต
yarn run buildOnly //ํ์
์คํฌ๋ฆฝํธ ํ์ผ ๋น๋
pm2 start dist