81 lines
3.2 KiB
YAML
81 lines
3.2 KiB
YAML
name: Build, Push and Deploy
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
|
|
jobs:
|
|
build-and-deploy:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout Code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Login to Container Registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ vars.REGISTRY_URL }}
|
|
username: ${{ secrets.CI_GITEA_USER }}
|
|
password: ${{ secrets.CI_GITEA_TOKEN }}
|
|
|
|
- name: Extract metadata for Docker
|
|
id: meta
|
|
run: |
|
|
echo "image_tag=${{ vars.REGISTRY_URL }}/${{ vars.NAMESPACE }}/${{ vars.REPO_NAME }}:${{ github.sha }}" >> $GITHUB_OUTPUT
|
|
echo "image_latest=${{ vars.REGISTRY_URL }}/${{ vars.NAMESPACE }}/${{ vars.REPO_NAME }}:latest" >> $GITHUB_OUTPUT
|
|
|
|
- name: Build and Push Docker Image
|
|
uses: docker/build-push-action@v5
|
|
with:
|
|
context: .
|
|
file: ./docker/Dockerfile
|
|
push: true
|
|
tags: |
|
|
${{ steps.meta.outputs.image_tag }}
|
|
${{ steps.meta.outputs.image_latest }}
|
|
|
|
- name: Deploy to Remote Server
|
|
uses: appleboy/ssh-action@v1.0.3
|
|
with:
|
|
host: ${{ secrets.SSH_HOST }}
|
|
username: ${{ secrets.SSH_USERNAME }}
|
|
key: ${{ secrets.SSH_PRIVATE_KEY }}
|
|
port: ${{ secrets.SSH_PORT }}
|
|
script: |
|
|
# Login to Container Registry
|
|
echo "${{ secrets.CI_GITEA_TOKEN }}" | docker login ${{ vars.REGISTRY_URL }} -u ${{ secrets.CI_GITEA_USER }} --password-stdin
|
|
|
|
# Pull new image
|
|
docker pull ${{ vars.REGISTRY_URL }}/${{ vars.NAMESPACE }}/${{ vars.REPO_NAME }}:${{ github.sha }}
|
|
|
|
# Stop and remove old container
|
|
docker stop skamp-app || true
|
|
docker rm skamp-app || true
|
|
|
|
# Start new container with environment variables
|
|
docker run -d \
|
|
--name skamp-app \
|
|
--restart unless-stopped \
|
|
-p ${{ secrets.APP_PORT }}:8080 \
|
|
-e SPRING_PROFILES_ACTIVE=${{ secrets.SPRING_PROFILES_ACTIVE }} \
|
|
-e SPRING_DATASOURCE_URL=jdbc:postgresql://${{ secrets.POSTGRES_HOST }}:${{ secrets.POSTGRES_PORT }}/${{ secrets.POSTGRES_DB }} \
|
|
-e SPRING_DATASOURCE_USERNAME=${{ secrets.POSTGRES_USER }} \
|
|
-e SPRING_DATASOURCE_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} \
|
|
-e SPRING_JPA_HIBERNATE_DDL_AUTO=${{ secrets.HIBERNATE_DDL_AUTO }} \
|
|
-e SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI=${{ secrets.KEYCLOAK_ISSUER_URI }} \
|
|
-e CORS_ALLOWED_ORIGINS=${{ secrets.CORS_ALLOWED_ORIGINS }} \
|
|
-e S3_ACCESS_KEY=${{ secrets.MINIO_ACCESS_KEY }} \
|
|
-e S3_SECRET_KEY=${{ secrets.MINIO_SECRET_KEY }} \
|
|
-e S3_ENDPOINT=${{ secrets.MINIO_ENDPOINT }} \
|
|
-e SERVER_PORT=8080 \
|
|
-e JAVA_OPTS="${{ secrets.JAVA_OPTS }}" \
|
|
${{ vars.REGISTRY_URL }}/${{ vars.NAMESPACE }}/${{ vars.REPO_NAME }}:${{ github.sha }}
|
|
|
|
# Clean up old images
|
|
docker image prune -af --filter "until=168h"
|
|
|
|
# Show running container
|
|
docker ps --filter name=skamp-app
|