diff --git a/Jenkinsfile b/Jenkinsfile index 922432e..72a5d63 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,76 +1,102 @@ pipeline { -// agent { -// // dockerfile true -// } - + agent any tools { - nodejs "nodejs" - maven "mvn" + jdk 'jdk-21' + maven 'mvn' } - environment { - DOCKER_IMAGE_NAME = "paypoint-backend" - DOCKER_REGISTRY = "veenm" // Optioneel als je Docker image naar Docker Hub wilt pushen - TRUENAS_HOST = "192.168.2.31:9000" // IP-adres van TrueNAS - TRUENAS_SSH_USER = "jenkins" // Gebruiker voor SSH - TRUENAS_SSH_KEY = credentials('ssh-true-nas') // Voeg een SSH-sleutel toe in Jenkins credentials + 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') { + stage('Checkout Code') { steps { - git 'https://git.melvanveen.nl/veenm/paypoint-backend.git' // Vervang door jouw repository URL + checkout scm } } - stage('Build Quarkus') { + stage('Build Quarkus Project') { steps { script { - // Installeer de Angular dependencies en bouw de app - sh './mvnw package' + // Bouw het Quarkus-project (assumeert Maven als build tool) + sh './mvnw clean package -DskipTests' } } } -// stage('Build Docker Image') { -// steps { -// script { -// // Bouw het Docker image -// sh 'systemctl start docker' -// sh 'docker build -t weetikveel .' -// } -// } -// } + stage('Build Docker Image') { + steps { + script { -// stage('Deploy to TrueNAS') { -// steps { -// script { -// // SSH naar TrueNAS en stop de oude container (indien nodig) -// sh """ -// ssh -i $TRUENAS_SSH_KEY $TRUENAS_SSH_USER@$TRUENAS_HOST 'docker stop $DOCKER_IMAGE_NAME || true && docker rm $DOCKER_IMAGE_NAME || true' -// """ -// // Push het Docker image naar TrueNAS (optioneel als je een registry gebruikt) -// sh 'docker tag $DOCKER_IMAGE_NAME $TRUENAS_HOST/$DOCKER_IMAGE_NAME' -// sh 'docker push $TRUENAS_HOST/$DOCKER_IMAGE_NAME' // Alleen als je Docker Hub gebruikt, of een lokaal registry. -// -// // Deploy het Docker image naar TrueNAS via SSH -// sh """ -// ssh -i $TRUENAS_SSH_KEY $TRUENAS_SSH_USER@$TRUENAS_HOST ' -// docker pull $TRUENAS_HOST/$DOCKER_IMAGE_NAME && -// docker run -d -p 80:80 --name $DOCKER_IMAGE_NAME $TRUENAS_HOST/$DOCKER_IMAGE_NAME -// ' -// """ -// } -// } -// } + // 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 { - success { - echo "Deployment succesvol!" - } - failure { - echo "Er is een fout opgetreden tijdens de deployment." + always { + script { + echo "Pipeline execution completed." + } } } -} +} \ No newline at end of file