Dockerfile
에서 .env와 .json 파일을 COPY해주는 부분이 추가됨에 따라
기존에 Github Actions에서 도커 이미지를 빌드할 때 에러가 발생하여 CD
스크립트를 수정해야 했습니다.
(
깃헙컨테이너 저장소에 push하기 위해서
)
.env
와 .json
의 파일들은 credential한 것이기 때문에 스크립트에 명시 하거나 레포지토리에 commit 하면 안되기 때문에
레포지토리의 secret
에 저장해서 꺼내 써야합니다.
- name: Generate Environment Variables File for Production
run: |
echo "TEST=$TEST" >> .env
env:
TEST: ${{ secrets.TEST }}
- name: create-json
id: create-json
uses: jsdaniell/create-json@1.1.2
with:
name: "test.json"
json: ${{ secrets.JSON }}
env의 경우 각 환경변수 마다 github actions 컨테이너에서 .env
에 주입해야하지만 json는 레파지토리의 secret
에 json 자체를 저장해서 꺼내 쓸 수 있습니다.
prisma schema와 migrations가 들어있는 prisma
폴더의 경우 src 폴더와 같은 위치에 있기 때문에 수정사항이 생길 때 마다 db에 반영 해주기 위해 ec2
에 전송을 해줍니다.
- name: Upload prisma to ec2
uses: garygrossgarten/github-action-scp@release
with:
local: ./prisma
remote: /home/ubuntu/volunteer-server/prisma/
host: ${{ secrets.HOST }}
username: ${{ secrets.SSH_USER }}
privateKey: ${{ secrets.SSH_KEY }}
recursive: true
새로 배포된 migrations를 prod db에 반영하기 위해
ec2 스크립트 실행에
npx prisma migrate deploy
를 추가해줍니다.
- name: Update ec2
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /home/ubuntu/volunteer-server
export NVM_DIR=~/.nvm
source ~/.nvm/nvm.sh
npx prisma migrate deploy
npm ci
pm2 kill
nf -e .env run npm run pm2
다시 생각해보니 cd에 .env
를 불러왔기 때문에
ec2에 prisma
폴더를 전송 후 서버에서 직접 migrate을 실행하는 것 보다는
github actions에서 migrate을 실행해주는게 좋아 보입니다.
- name: Migrate for Production
run: |
npx prisma migrate deploy