pipeline { agent any tools { jdk 'jdk-21' maven 'mvn 3.9.9' } 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_NAME = 'veenm/jobfindr' // Naam van de Docker-image IMAGE_TAG = 'latest' // Docker-tag } 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' sh """ docker build -t ${IMAGE_NAME}:${IMAGE_TAG} . """ } } } stage('Push Docker Image (Optional)') { when { expression { return env.DOCKER_REGISTRY != null && env.DOCKER_REGISTRY.trim() != '' } } steps { script { // Push de Docker-image naar een Docker Registry sh """ docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${env.DOCKER_REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG} docker push ${env.DOCKER_REGISTRY}/${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 docker stop ${IMAGE_NAME} || true docker rm ${IMAGE_NAME} || true docker pull ${IMAGE_NAME}:${IMAGE_TAG} || echo "Local image will be used" docker run -d --name ${IMAGE_NAME} -p 8080:8080 ${IMAGE_NAME}:${IMAGE_TAG} EOF """ } } } } } post { always { script { echo "Pipeline execution completed." } } } }