Skip to content

💚 add persistent volume to BE #44

💚 add persistent volume to BE

💚 add persistent volume to BE #44

name: BSN Backend API Pipeline
on:
push:
branches:
- ci/pipeline
paths:
- book-network/**
- docker/backend/**
- 'docker-compose.yml'
- .github/workflows/*-backend.yml
jobs:
compile:
runs-on: self-hosted
name: Compile project
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'
- name: Running Unit Tests
run: |
cd book-network
./mvnw clean compile
unit-tests:
runs-on: self-hosted
name: Unit tests
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'
- name: Running Unit Tests
run: |
cd book-network
./mvnw clean test
build:
runs-on: self-hosted
name: Build backend
needs: [compile, unit-tests]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'
- name: Compile project
run: |
cd book-network
./mvnw clean compile
build-image:
name: Build Docker image
runs-on: self-hosted
needs: [build]
steps:
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'corretto'
- name: Extract project version
id: extract_version
run: |
cd book-network
echo "VERSION=$(./mvnw -q -Dexec.executable='echo' -Dexec.args='${project.version}' --non-recursive exec:exec)" >> $GITHUB_OUTPUT
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build & Push to DockerHub
uses: docker/build-push-action@v5
with:
context: book-network
file: docker/backend/Dockerfile
push: true
platforms: linux/amd64
tags: ${{ secrets.DOCKERHUB_USERNAME }}/bsn-api:${{ steps.extract_version.outputs.VERSION }},${{ secrets.DOCKERHUB_USERNAME }}/bsn-api:latest
build-args: |
PROFILE=dev
APP_VERSION=${{ steps.extract_version.outputs.VERSION }}
deploy:
name: Deploy Backend
runs-on: self-hosted
needs: [build-image]
steps:
- name: Create deployment folder
run: ssh ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_IP }} "mkdir -p ci-cd"
- name: Copy docker-compose file
run: scp -oStrictHostKeyChecking=no docker-compose.yml ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_IP }}:ci-cd/docker-compose.yml
- name: Set ENV variable and deploy
run: |
ssh ${{ secrets.VPS_USERNAME }}@${{ secrets.VPS_IP }} <<EOF
export EMAIL_HOST_NAME=${{ secrets.EMAIL_HOST_NAME }}
export EMAIL_USER_NAME=${{ secrets.EMAIL_USER_NAME }}
export EMAIL_PASSWORD=${{ secrets.EMAIL_PASSWORD }}
cd ci-cd
docker compose -f docker-compose.yml pull -q
docker compose -f docker-compose.yml up -d
EOF
# health-check:
# name: API Health Check
# runs-on: self-hosted
# needs: [deploy]
# steps:
# - name: Check the docker container health status
# run: |
# if ! docker ps -a | grep bsn-api; then
# echo "Container is not running"
# exit 1
# fi