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