Skip to content

Merge pull request #52 from JSJ-Organization/ci-cd/integrate #2

Merge pull request #52 from JSJ-Organization/ci-cd/integrate

Merge pull request #52 from JSJ-Organization/ci-cd/integrate #2

Workflow file for this run

name: Build, Push, and Deploy Docker images
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build_and_push:
name: Build and Push Docker images
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Set version to current date
id: get_version
run: |
VERSION=$(date +'%Y%m%d%H%M%S')
echo "VERSION=${VERSION}" >> $GITHUB_ENV
- name: Build, tag, and push backend image
run: |
IMAGE_TAG=${{ env.VERSION }}
docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.REPO_NAME }}-backend:$IMAGE_TAG ./backend
echo "Pushing backend image to Docker Hub..."
docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.REPO_NAME }}-backend:$IMAGE_TAG
echo "::set-output name=backend_image::${{ secrets.DOCKER_USERNAME }}/${{ secrets.REPO_NAME }}-backend:$IMAGE_TAG"
- name: Build, tag, and push frontend image
run: |
IMAGE_TAG=${{ env.VERSION }}
docker build -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.REPO_NAME }}-frontend:$IMAGE_TAG ./frontend
echo "Pushing frontend image to Docker Hub..."
docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.REPO_NAME }}-frontend:$IMAGE_TAG
echo "::set-output name=frontend_image::${{ secrets.DOCKER_USERNAME }}/${{ secrets.REPO_NAME }}-frontend:$IMAGE_TAG"
deploy:
name: Deploy to personal server
runs-on: ubuntu-latest
needs: build_and_push
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Setup SSH
uses: webfactory/ssh-agent@v0.5.3
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Create .env file
run: |
echo "BACKEND_PORT=${{ secrets.BACKEND_PORT }}" >> .env
echo "FRONTEND_PORT=${{ secrets.FRONTEND_PORT }}" >> .env
echo "POSTGIS_PORT=${{ secrets.POSTGIS_PORT }}" >> .env
echo "PGADMIN_PORT=${{ secrets.PGADMIN_PORT }}" >> .env
echo "GEOSERVER_PORT=${{ secrets.GEOSERVER_PORT }}" >> .env
echo "POSTGRES_USER=${{ secrets.POSTGRES_USER }}" >> .env
echo "POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }}" >> .env
echo "POSTGRES_DB=${{ secrets.POSTGRES_DB }}" >> .env
echo "POSTGRES_HOST=${{ secrets.POSTGRES_HOST }}" >> .env
echo "PGADMIN_DEFAULT_EMAIL=${{ secrets.PGADMIN_DEFAULT_EMAIL }}" >> .env
echo "PGADMIN_DEFAULT_PASSWORD=${{ secrets.PGADMIN_DEFAULT_PASSWORD }}" >> .env
echo "GEOSERVER_ADMIN_PASSWORD=${{ secrets.GEOSERVER_ADMIN_PASSWORD }}" >> .env
echo "VWORLD_KEY=${{ secrets.VWORLD_KEY }}" >> .env
echo "FRCN_RENT_INFO_KEY=${{ secrets.FRCN_RENT_INFO_KEY }}" >> .env
echo "VITE_BACKEND_URL=${{ secrets.VITE_BACKEND_URL }}" >> .env
echo "VITE_GEOSERVER_URL=${{ secrets.VITE_GEOSERVER_URL }}" >> .env
echo "VITE_PGADMIN_URL=${{ secrets.VITE_PGADMIN_URL }}" >> .env
echo "VERSION=${{ env.VERSION }}" >> .env
- name: Copy files via SSH
run: |
scp -o StrictHostKeyChecking=no docker-compose.yml .env ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_HOST }}:/home/${{ secrets.SSH_USERNAME }}/
- name: Deploy via SSH
run: |
ssh -o StrictHostKeyChecking=no ${{ secrets.SSH_USERNAME }}@${{ secrets.SSH_HOST }} << 'EOF'
cd /home/${{ secrets.SSH_USERNAME }}
docker-compose pull
docker-compose up -d
EOF