11name : Docker CI/CD
22
33on :
4- push :
5- branches : [ main ]
6- pull_request :
7- branches : [ main ]
8-
4+ push :
5+ branches : [ main ]
6+ pull_request :
7+ branches : [ main ]
8+
99env :
1010 API_IMAGE_NAME : github-api
1111 API_CONTAINER_NAME : github-api
1212 UI_IMAGE_NAME : github-ui
1313 UI_CONTAINER_NAME : github-ui
14+ UI_PORT : 4000:4000
15+ API_PORT : 4001:4001
1416
1517 REPO_NAME : ${{ github.repository }}
1618 REGISTRY : ghcr.io
19+ SSH_HOST : ${{ secrets.SERVER_IP }}
20+ SSH_USER : ${{ secrets.SERVER_USERNAME }}
21+ SSH_KEY : ${{ secrets.SSH_PRIVATE_KEY }}
1722
1823jobs :
1924 build_and_push :
4146 context : .
4247 file : ./API.Dockerfile
4348 push : true
44- tags : ${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.API_IMAGE_NAME }}: ${{ github.sha }}
49+ tags : ${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.API_IMAGE_NAME }}- ${{ github.sha }}
4550 cache-from : type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.API_IMAGE_NAME }}:buildcache
4651 cache-to : type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.API_IMAGE_NAME }}:buildcache,mode=max
4752
5156 context : .
5257 file : ./UI.Dockerfile
5358 push : true
54- tags : ${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.UI_IMAGE_NAME }}: ${{ github.sha }}
59+ tags : ${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.UI_IMAGE_NAME }}- ${{ github.sha }}
5560 cache-from : type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.UI_IMAGE_NAME }}:buildcache
5661 cache-to : type=registry,ref=${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.UI_IMAGE_NAME }}:buildcache,mode=max
57-
62+
63+ deploy :
64+ needs : build_and_push
65+ runs-on : ubuntu-latest
66+ permissions :
67+ contents : read
68+ packages : write
69+ steps :
70+ - name : Executing remote SSH commands to deploy
71+ uses : appleboy/ssh-action@master
72+ with :
73+ host : " ${{ env.SSH_HOST }}"
74+ username : " ${{ env.SSH_USER }}"
75+ key : " ${{ env.SSH_KEY }}"
76+ script : |
77+ echo ${{ secrets.GITHUB_TOKEN }} | docker login -u ${{ github.actor }} --password-stdin ${{ env.REGISTRY }}
78+ docker pull "${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.API_IMAGE_NAME }}-${{ github.sha }}"
79+ docker pull "${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.UI_IMAGE_NAME }}-${{ github.sha }}"
80+ docker stop "${{ env.UI_CONTAINER_NAME }}" || true
81+ docker stop "${{ env.API_CONTAINER_NAME }}" || true
82+ docker rm "${{ env.UI_CONTAINER_NAME }}" || true
83+ docker rm "${{ env.API_CONTAINER_NAME }}" || true
84+ docker run -d --name "${{ env.API_CONTAINER_NAME }}" -p "${{ env.API_PORT }}" "${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.API_IMAGE_NAME }}-${{ github.sha }}"
85+ docker run -d --name "${{ env.UI_CONTAINER_NAME }}" -p "${{ env.UI_PORT }}" "${{ env.REGISTRY }}/${{ env.REPO_NAME}}/${{ env.UI_IMAGE_NAME }}-${{ github.sha }}"
0 commit comments