# ============================================================ # INSIGHT MVP - Deploy Pipeline # ============================================================ # Baut Docker-Images, pusht sie in die Forgejo Registry # und deployed auf den insight-dev-01 Server. # # Wird nur bei Push auf 'main' oder 'develop' ausgefuehrt. # ============================================================ name: Deploy on: push: branches: [main, develop] jobs: # -------------------------------------------------------- # Docker Images bauen und in Registry pushen # -------------------------------------------------------- build-and-push: name: Build & Push Images runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Determine Tag id: tag run: | if [ "${{ github.ref_name }}" = "main" ]; then echo "tag=latest" >> $GITHUB_OUTPUT else echo "tag=develop" >> $GITHUB_OUTPUT fi - name: Login to Container Registry run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | \ docker login git.xinion.lan -u ${{ secrets.REGISTRY_USER }} --password-stdin # Core-Service Image - name: Build Core-Service run: | docker build \ -t git.xinion.lan/gitadmin/insight-core:${{ steps.tag.outputs.tag }} \ -f packages/core-service/Dockerfile \ --target production \ packages/core-service - name: Push Core-Service run: docker push git.xinion.lan/gitadmin/insight-core:${{ steps.tag.outputs.tag }} # Frontend Image - name: Build Frontend run: | docker build \ -t git.xinion.lan/gitadmin/insight-frontend:${{ steps.tag.outputs.tag }} \ -f packages/frontend/Dockerfile \ --target production \ packages/frontend - name: Push Frontend run: docker push git.xinion.lan/gitadmin/insight-frontend:${{ steps.tag.outputs.tag }} # -------------------------------------------------------- # Auf Server deployen # -------------------------------------------------------- deploy: name: Deploy to Server runs-on: ubuntu-latest needs: build-and-push steps: - name: Deploy via SSH run: | # SSH-Key vorbereiten mkdir -p ~/.ssh echo "${{ secrets.SSH_DEPLOY_KEY }}" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -H ${{ secrets.DEPLOY_HOST }} >> ~/.ssh/known_hosts # Deploy-Befehle auf dem Server ausfuehren ssh -i ~/.ssh/deploy_key ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} << 'DEPLOY' cd ~/insight # Registry Login echo "${{ secrets.REGISTRY_PASSWORD }}" | \ docker login git.xinion.lan -u ${{ secrets.REGISTRY_USER }} --password-stdin # Neue Images pullen docker compose pull core frontend # Services mit neuem Image starten docker compose up -d core frontend # Health-Check warten sleep 10 curl -f http://localhost:3000/health || echo "WARNUNG: Health-Check fehlgeschlagen" # Alte Images aufraeumen docker image prune -f DEPLOY - name: Verify Deployment run: | ssh -i ~/.ssh/deploy_key ${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }} \ "docker compose ps && echo '--- Deployment erfolgreich ---'"