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' } } }