1+ name : CI-CD
2+
3+ on :
4+ push :
5+ branches :
6+ - main
7+
8+ jobs :
9+ build-and-test :
10+ runs-on : ubuntu-latest
11+
12+ services :
13+ mysql :
14+ image : mysql:8
15+ env :
16+ MYSQL_ROOT_PASSWORD : root
17+ MYSQL_DATABASE : real_ticket
18+ ports :
19+ - 3306:3306
20+ redis :
21+ image : redis:latest
22+ ports :
23+ - 6379:6379
24+
25+ steps :
26+ - name : Checkout code
27+ uses : actions/checkout@v3
28+
29+ - name : Set up Node.js
30+ uses : actions/setup-node@v3
31+ with :
32+ node-version : 20
33+ cache : ' npm'
34+
35+ - name : Build Docker image for backend
36+ run : |
37+ docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO_BACKEND }} ./back
38+ - name : Build Docker image for frontend
39+ run : |
40+ docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO_FRONTEND }} ./front
41+
42+ - name : Run backend container
43+ run : |
44+ docker run -d --name backend-container -p ${{ secrets.BACKEND_SERVER_PORT }}:${{ secrets.BACKEND_SERVER_PORT }} ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO_BACKEND }}
45+ - name : Run frontend container
46+ run : |
47+ docker run -d --name frontend-container -p ${{ secrets.FRONT_SERVER_PORT }}:${{ secrets.FRONT_SERVER_PORT }} ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO_FRONTEND }}
48+
49+ - name : Log in to Docker Hub
50+ uses : docker/login-action@v2
51+ with :
52+ username : ${{ secrets.DOCKER_USERNAME }}
53+ password : ${{ secrets.DOCKER_PASSWORD }}
54+
55+ - name : Push backend image to Docker Hub
56+ run : |
57+ docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO_BACKEND }}
58+ - name : Push front image to Docker Hub
59+ run : |
60+ docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_REPO_FRONTEND }}
61+
62+ deploy :
63+ runs-on : ubuntu-latest
64+ needs : build-and-test
65+
66+ steps :
67+ - name : Set up sshpass
68+ run : |
69+ sudo apt update
70+ sudo apt install -y sshpass
71+
72+ - name : Access Backend server and deploy
73+ run : |
74+ sshpass -p "${{ secrets.PUBLIC_SERVER_PASSWORD }}" ssh -o StrictHostKeyChecking=no root@${{ secrets.PUBLIC_SERVER_IP }} \
75+ "sshpass -p '${{ secrets.BACKEND_SERVER_PASSWORD }}' ssh -o StrictHostKeyChecking=no root@${{ secrets.BACKEND_SERVER_IP }} \
76+ './nest/start.sh; exit'"
77+
78+ - name : Access Frontend server and deploy
79+ run : |
80+ sshpass -p "${{ secrets.PUBLIC_SERVER_PASSWORD }}" ssh -o StrictHostKeyChecking=no root@${{ secrets.PUBLIC_SERVER_IP }} \
81+ "sshpass -p '${{ secrets.FRONT_SERVER_PASSWORD }}' ssh -o StrictHostKeyChecking=no root@${{ secrets.FRONT_SERVER_IP }} \
82+ './front/start.sh'"
0 commit comments