Release: Merge develop to main

This commit is contained in:
Jenkins Bot
2026-01-05 21:18:05 +00:00

99
Jenkinsfile vendored
View File

@@ -51,57 +51,64 @@ pipeline {
} }
// ========================================================= // =========================================================
// ETAP 2: MAIN (Weryfikacja wersji i Publikacja) // ETAP 2: MAIN (Weryfikacja wersji i Publikacja w Dockerze)
// ========================================================= // =========================================================
stage('CD: Publish to NPM (Main)') { stage('CD: Publish to NPM (Main)') {
when { when {
branch 'main' branch 'main'
} }
steps { steps {
withCredentials([string(credentialsId: 'npm-token', variable: 'NPM_TOKEN')]) { withCredentials([string(credentialsId: 'npm-token', variable: 'NPM_TOKEN')]) {
script { script {
echo '--- [MAIN] Start procedury publikacji ---' echo '--- [MAIN] Start procedury publikacji ---'
// 1. Pobierz wersję lokalną (tę, którą wpisałeś ręcznie) // 1. Pobierz wersję używając grep i cut (działa bez Node.js na hoście)
def localVersion = sh(script: "node -p \"require('./package.json').version\"", returnStdout: true).trim() // Szuka linii "version": "x.x.x", wycina 4. pole (wersję)
echo "Lokana wersja w package.json: ${localVersion}" def localVersion = sh(script: "grep '\"version\":' package.json | cut -d\\\" -f4", returnStdout: true).trim()
echo "Lokalna wersja w package.json: ${localVersion}"
// 2. Sprawdź wersję w NPM // 2. Przygotuj środowisko w kontenerze
def versionExists = false // Tworzymy plik .npmrc lokalnie
try { sh 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc'
// Sprawdzamy czy ta konkretna wersja już jest
// Jeśli pakiet nie istnieje w ogóle, komenda zwróci błąd, więc łapiemy w catch // WAŻNE: Przebudowujemy obraz 'app', aby wciągnął .npmrc i aktualny kod do środka
def npmCheck = sh(script: "npm view wc-timer@${localVersion} version", returnStatus: true) // (Rozwiązuje to problem montowania plików w Docker-outside-of-Docker)
if (npmCheck == 0) { sh 'docker compose -f docker-compose.test.yml build app'
versionExists = true
// 3. Sprawdź wersję w NPM (używając kontenera z Node)
def versionExists = false
try {
// Uruchamiamy npm view wewnątrz kontenera
// Jeśli wersja nie istnieje, npm zwróci błąd (exit 1), który złapiemy
sh "docker compose -f docker-compose.test.yml run --rm app npm view wc-timer@${localVersion} version"
versionExists = true
} catch (err) {
versionExists = false
}
// 4. Decyzja
if (versionExists) {
echo "❌ BŁĄD: Wersja ${localVersion} jest już opublikowana w NPM!"
error("Przerwano publikację: Wersja ${localVersion} już istnieje.")
} else {
echo "🚀 Wersja ${localVersion} jest nowa. Publikuję z kontenera..."
// Publikacja z wewnątrz kontenera
sh 'docker compose -f docker-compose.test.yml run --rm app npm publish --access public'
echo "✅ SUKCES: Wersja ${localVersion} została opublikowana."
}
} }
} catch (err) { }
versionExists = false }
} post {
always {
// 3. Decyzja: Publikuj albo Giń echo '--- [MAIN] Sprzątanie ---'
if (versionExists) { sh 'rm -f .npmrc'
echo "❌ BŁĄD: Wersja ${localVersion} jest już opublikowana w NPM!" // Czyścimy też obrazy dockerowe po publikacji
echo "💡 ROZWIĄZANIE: Zmień wersję w package.json na branchu develop i wypchnij ponownie." sh 'docker compose -f docker-compose.test.yml down -v --rmi local'
// To polecenie sprawi, że Build zaświeci się na CZERWONO (Failure)
error("Przerwano publikację: Wersja ${localVersion} już istnieje.")
} else {
echo "🚀 Wersja ${localVersion} jest nowa. Publikuję..."
sh 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc'
sh 'npm publish --access public'
echo "✅ SUKCES: Wersja ${localVersion} została opublikowana."
}
} }
} }
} }
post {
always {
sh 'rm -f .npmrc'
}
}
}
} }
} }