Compare commits
2 Commits
6d399d0605
...
10a56bfdee
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10a56bfdee | ||
|
|
3ed9fe10b9 |
41
Jenkinsfile
vendored
41
Jenkinsfile
vendored
@@ -51,7 +51,7 @@ 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 {
|
||||||
@@ -62,35 +62,39 @@ pipeline {
|
|||||||
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
|
||||||
|
// Tworzymy plik .npmrc lokalnie
|
||||||
|
sh 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc'
|
||||||
|
|
||||||
|
// WAŻNE: Przebudowujemy obraz 'app', aby wciągnął .npmrc i aktualny kod do środka
|
||||||
|
// (Rozwiązuje to problem montowania plików w Docker-outside-of-Docker)
|
||||||
|
sh 'docker compose -f docker-compose.test.yml build app'
|
||||||
|
|
||||||
|
// 3. Sprawdź wersję w NPM (używając kontenera z Node)
|
||||||
def versionExists = false
|
def versionExists = false
|
||||||
try {
|
try {
|
||||||
// Sprawdzamy czy ta konkretna wersja już jest
|
// Uruchamiamy npm view wewnątrz kontenera
|
||||||
// Jeśli pakiet nie istnieje w ogóle, komenda zwróci błąd, więc łapiemy w catch
|
// Jeśli wersja nie istnieje, npm zwróci błąd (exit 1), który złapiemy
|
||||||
def npmCheck = sh(script: "npm view wc-timer@${localVersion} version", returnStatus: true)
|
sh "docker compose -f docker-compose.test.yml run --rm app npm view wc-timer@${localVersion} version"
|
||||||
if (npmCheck == 0) {
|
|
||||||
versionExists = true
|
versionExists = true
|
||||||
}
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
versionExists = false
|
versionExists = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Decyzja: Publikuj albo Giń
|
// 4. Decyzja
|
||||||
if (versionExists) {
|
if (versionExists) {
|
||||||
echo "❌ BŁĄD: Wersja ${localVersion} jest już opublikowana w NPM!"
|
echo "❌ BŁĄD: Wersja ${localVersion} jest już opublikowana w NPM!"
|
||||||
echo "💡 ROZWIĄZANIE: Zmień wersję w package.json na branchu develop i wypchnij ponownie."
|
|
||||||
|
|
||||||
// To polecenie sprawi, że Build zaświeci się na CZERWONO (Failure)
|
|
||||||
error("Przerwano publikację: Wersja ${localVersion} już istnieje.")
|
error("Przerwano publikację: Wersja ${localVersion} już istnieje.")
|
||||||
} else {
|
} else {
|
||||||
echo "🚀 Wersja ${localVersion} jest nowa. Publikuję..."
|
echo "🚀 Wersja ${localVersion} jest nowa. Publikuję z kontenera..."
|
||||||
|
|
||||||
sh 'echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc'
|
// Publikacja z wewnątrz kontenera
|
||||||
sh 'npm publish --access public'
|
sh 'docker compose -f docker-compose.test.yml run --rm app npm publish --access public'
|
||||||
|
|
||||||
echo "✅ SUKCES: Wersja ${localVersion} została opublikowana."
|
echo "✅ SUKCES: Wersja ${localVersion} została opublikowana."
|
||||||
}
|
}
|
||||||
@@ -99,7 +103,10 @@ pipeline {
|
|||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always {
|
||||||
|
echo '--- [MAIN] Sprzątanie ---'
|
||||||
sh 'rm -f .npmrc'
|
sh 'rm -f .npmrc'
|
||||||
|
// Czyścimy też obrazy dockerowe po publikacji
|
||||||
|
sh 'docker compose -f docker-compose.test.yml down -v --rmi local'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user