From 95727193e7d0fc8e05c801d853c5defd475c1135 Mon Sep 17 00:00:00 2001 From: David Ali Date: Mon, 5 Jan 2026 19:01:43 +0100 Subject: [PATCH] add Jenkinsfile --- Jenkinsfile | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index e69de29..f04f5d2 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -0,0 +1,78 @@ +pipeline { + agent any + + environment { + // Tożsamość bota, który będzie widoczny w historii Gita jako autor scalenia + GIT_AUTHOR_NAME = 'Jenkins Bot' + GIT_AUTHOR_EMAIL = 'jenkins@alidavid.hu' + } + + stages { + // ETAP 1: Testy (Gatekeeper) + // Jeśli ten etap nie przejdzie, pipeline się zatrzyma i nic nie trafi na main. + stage('Build & Test (E2E)') { + steps { + script { + echo '--- 1. Start środowiska testowego ---' + + // Sprzątanie (na wypadek, gdyby coś zostało z poprzedniego uruchomienia) + sh 'docker-compose -f docker-compose.test.yml down -v || true' + + // Uruchomienie testów + // --abort-on-container-exit: zamyka kontenery, gdy Cypress skończy + // --exit-code-from cypress: jeśli Cypress zwróci błąd, Jenkins przerwie zadanie + sh 'docker-compose -f docker-compose.test.yml up --build --abort-on-container-exit --exit-code-from cypress' + } + } + } + + // ETAP 2: Automatyczny Merge (Tylko dla gałęzi develop) + stage('Merge Develop -> Main') { + when { + // Uruchom ten krok TYLKO, gdy zmiany są na gałęzi 'develop' + branch 'develop' + } + steps { + // Używamy klucza SSH z Jenkinsa do autoryzacji w Gitea + sshagent(credentials: ['gitea-ssh-key']) { + script { + echo '--- 2. Testy zaliczone. Scalanie do produkcji (main) ---' + + // Konfiguracja Gita wewnątrz runnera + sh "git config user.name '${GIT_AUTHOR_NAME}'" + sh "git config user.email '${GIT_AUTHOR_EMAIL}'" + + // 1. Pobieramy aktualny stan repozytorium + sh 'git fetch origin main' + + // 2. Przełączamy się na main + sh 'git checkout main' + // Upewniamy się, że mamy najnowszą wersję main + sh 'git pull origin main' + + // 3. Scalamy develop do main + // --no-ff tworzy commit scalający (widać historię w grafie) + sh 'git merge develop --no-ff -m "Merge branch develop into main (Jenkins CI)"' + + // 4. Wysyłamy zmiany do Gitea + // StrictHostKeyChecking=no zapobiega pytaniom o akceptację klucza hosta + sh 'GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git push origin main' + + echo '--- SUKCES: Kod został zaktualizowany na gałęzi main ---' + + // Powrót na develop dla porządku + sh 'git checkout develop' + } + } + } + } + } + + post { + always { + // Bez względu na wynik (sukces/błąd), sprzątamy kontenery Dockerowe + echo '--- Sprzątanie po testach ---' + sh 'docker-compose -f docker-compose.test.yml down -v' + } + } +} \ No newline at end of file