pipeline { agent any tools { jdk 'jdk-21' maven 'mvn' } environment { SSH_CREDENTIALS_ID = 'ssh-true-nas' // ID van de SSH-sleutel in Jenkins TRUENAS_HOST = '192.168.2.31' // IP-adres of hostname van TrueNAS SSH_USER = 'jenkins' // SSH-gebruiker voor TrueNAS IMAGE_REPO = 'veenm' // Naam van de Docker-image IMAGE_NAME = 'paypoint-backend' // Naam van de Docker-image IMAGE_TAG = 'latest' MAILER_FROM= credentials('MAILER_FROM') MAILER_HOST= credentials('MAILER_HOST') MAILER_PORT= credentials('MAILER_PORT') MAILER_USERNAME= credentials('MAILER_USERNAME') MAILER_PASSWORD= credentials('MAILER_PASSWORD') DB_HOST= credentials('DB_HOST') DB_PORT= credentials('DB_PORT') DB_USERNAME= credentials('DB_USERNAME') DB_PASSWORD= credentials('DB_PASSWORD') CORS_ORIGINS= credentials('CORS_ORIGINS') } stages { stage('Checkout Code') { steps { checkout scm } } stage('Build Quarkus Project') { steps { script { // Bouw het Quarkus-project (assumeert Maven als build tool) sh './mvnw clean package -DskipTests' } } } stage('Build Docker Image') { steps { script { // Maak een Docker-image gebaseerd op de Dockerfile sh 'ls src/main' sh """ docker build -t ${IMAGE_REPO}/${IMAGE_NAME}:${IMAGE_TAG} -f src/main/resources/Dockerfile.jvm --platform linux/amd64 . """ } } } stage('Push Docker Image') { steps { script { // Push de Docker-image naar een Docker Registry sh """ docker push ${IMAGE_REPO}/${IMAGE_NAME}:${IMAGE_TAG} """ } } } stage('Deploy Docker Image to TrueNAS') { steps { script { // Verbind via SSH met TrueNAS en voer Docker-installatiecommando's uit sshagent([SSH_CREDENTIALS_ID]) { sh """ ssh -o StrictHostKeyChecking=no ${SSH_USER}@${TRUENAS_HOST} << EOF sudo docker stop ${IMAGE_NAME} || true sudo docker rm ${IMAGE_NAME} || true sudo docker pull ${IMAGE_REPO}/${IMAGE_NAME}:${IMAGE_TAG} || echo "Local image will be used" sudo docker run -d --name ${IMAGE_NAME} -p 8080:8080 -e MAILER_FROM=$env.MAILER_FROM \ -e MAILER_HOST='$env.MAILER_HOST' \ -e MAILER_PORT='$env.MAILER_PORT' \ -e MAILER_USERNAME='$env.MAILER_USERNAME' \ -e MAILER_PASSWORD='$env.MAILER_PASSWORD' \ -e DB_HOST='$env.DB_HOST' \ -e DB_PORT='$env.DB_PORT' \ -e DB_USERNAME='$env.DB_USERNAME' \ -e DB_PASSWORD='$env.DB_PASSWORD' \ ${IMAGE_REPO}/${IMAGE_NAME}:${IMAGE_TAG} """ } } } } } post { always { script { echo "Pipeline execution completed." } } } }