1+ name : Github Actions CI/CD
2+
3+ on :
4+ push :
5+ branches : [ main ]
6+ pull_request :
7+ branches : [ main ]
8+
9+ env :
10+ API_CONTAINER_NAME : dotnet-api
11+ UI_CONTAINER_NAME : dotnet-ui
12+ DOCKERHUB_USERNAME : ${{ secrets.DOCKERHUB_USERNAME }}
13+ DOCKERHUB_TOKEN : ${{ secrets.DOCKERHUB_TOKEN }}
14+ SSH_HOST : ${{ secrets.SERVER_IP }}
15+ SSH_USER : ${{ secrets.SERVER_USERNAME }}
16+ SSH_KEY : ${{ secrets.SSH_PRIVATE_KEY }}
17+ UI_PORT : 4000:4000
18+ API_PORT : 4001:4001
19+
20+ jobs :
21+ build_and_push :
22+ runs-on : ubuntu-latest
23+
24+ steps :
25+ - name : Checkout code
26+ uses : actions/checkout@v3
27+
28+ - name : Set up Docker Buildx
29+ uses : docker/setup-buildx-action@v3
30+
31+ - name : Log in to DockerHub
32+ uses : docker/login-action@v3
33+ with :
34+ username : ${{ env.DOCKERHUB_USERNAME }}
35+ password : ${{ env.DOCKERHUB_TOKEN }}
36+
37+ - name : Build and push API Docker image
38+ uses : docker/build-push-action@v5
39+ with :
40+ context : .
41+ file : ./API.Dockerfile
42+ push : true
43+ tags : ${{ env.DOCKERHUB_USERNAME }}/${{ env.API_CONTAINER_NAME }}:${{ github.sha }}
44+ - name : Build and push UI Docker image
45+ uses : docker/build-push-action@v5
46+ with :
47+ context : .
48+ file : ./UI.Dockerfile
49+ push : true
50+ tags : ${{ env.DOCKERHUB_USERNAME }}/${{ env.UI_CONTAINER_NAME }}:${{ github.sha }}
51+
52+ deploy :
53+ needs : build_and_push
54+ runs-on : ubuntu-latest
55+
56+ steps :
57+ - name : Executing remote SSH commands to deploy
58+ uses : appleboy/ssh-action@master
59+ with :
60+ host : ${{ env.SSH_HOST }}
61+ username : ${{ env.SSH_USER }}
62+ key : ${{ env.SSH_KEY }}
63+ script : |
64+ docker login -u ${{ env.DOCKERHUB_USERNAME }} -p ${{ env.DOCKERHUB_TOKEN }}
65+ docker pull ${{ env.DOCKERHUB_USERNAME }}/${{ env.API_CONTAINER_NAME }}:${{ github.sha }}
66+ docker pull ${{ env.DOCKERHUB_USERNAME }}/${{ env.UI_CONTAINER_NAME }}:${{ github.sha }}
67+ docker stop ${{ env.API_CONTAINER_NAME }} || true
68+ docker stop ${{ env.UI_CONTAINER_NAME }} || true
69+ docker rm ${{ env.API_CONTAINER_NAME }} || true
70+ docker rm ${{ env.UI_CONTAINER_NAME }} || true
71+ docker run -d --name ${{ env.API_CONTAINER_NAME }} -p ${{ env.API_PORT }} ${{ env.DOCKERHUB_USERNAME }}/${{ env.API_CONTAINER_NAME }}:${{ github.sha }}
72+ docker run -d --name ${{ env.UI_CONTAINER_NAME }} -p ${{ env.UI_PORT }} ${{ env.DOCKERHUB_USERNAME }}/${{ env.UI_CONTAINER_NAME }}:${{ github.sha }}
0 commit comments