Compare commits
2 Commits
c81d2d94be
...
6d399d0605
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6d399d0605 | ||
|
|
1c6d791ee2 |
90
Jenkinsfile
vendored
90
Jenkinsfile
vendored
@@ -7,53 +7,101 @@ pipeline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
stage('Build & Test (E2E)') {
|
// =========================================================
|
||||||
|
// ETAP 1: DEVELOP (Testy i Merge)
|
||||||
|
// =========================================================
|
||||||
|
stage('CI: Test & Merge (Develop)') {
|
||||||
when {
|
when {
|
||||||
branch 'develop'
|
branch 'develop'
|
||||||
}
|
}
|
||||||
steps {
|
steps {
|
||||||
|
// 1. Uruchomienie Testów
|
||||||
script {
|
script {
|
||||||
echo '--- 1. Start środowiska testowego (pomijane na main) ---'
|
echo '--- [DEVELOP] 1. Uruchamianie testów E2E ---'
|
||||||
sh 'docker compose -f docker-compose.test.yml down -v || true'
|
sh 'docker compose -f docker-compose.test.yml down -v || true'
|
||||||
sh 'docker compose -f docker-compose.test.yml up --build --abort-on-container-exit --exit-code-from cypress'
|
sh 'docker compose -f docker-compose.test.yml up --build --abort-on-container-exit --exit-code-from cypress'
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stage('Merge Develop -> Main') {
|
// 2. Scalanie (Bez zmiany wersji!)
|
||||||
when {
|
|
||||||
branch 'develop'
|
|
||||||
}
|
|
||||||
steps {
|
|
||||||
sshagent(credentials: ['gitea-ssh-key']) {
|
sshagent(credentials: ['gitea-ssh-key']) {
|
||||||
script {
|
script {
|
||||||
echo '--- 2. Testy zaliczone. Scalanie do produkcji ---'
|
echo '--- [DEVELOP] 2. Testy OK. Scalanie do Main ---'
|
||||||
|
|
||||||
sh "git config user.name '${GIT_AUTHOR_NAME}'"
|
sh "git config user.name '${GIT_AUTHOR_NAME}'"
|
||||||
sh "git config user.email '${GIT_AUTHOR_EMAIL}'"
|
sh "git config user.email '${GIT_AUTHOR_EMAIL}'"
|
||||||
|
|
||||||
|
// Pobieramy main, scalamy i wysyłamy
|
||||||
sh 'git fetch origin main'
|
sh 'git fetch origin main'
|
||||||
sh 'git fetch origin develop'
|
|
||||||
|
|
||||||
sh 'git checkout main'
|
sh 'git checkout main'
|
||||||
sh 'git pull origin main'
|
sh 'git pull origin main'
|
||||||
sh 'git merge origin/develop --no-ff -m "Merge branch develop into main (Jenkins CI)"'
|
|
||||||
|
|
||||||
|
sh 'git merge origin/develop --no-ff -m "Release: Merge develop to main"'
|
||||||
|
|
||||||
|
// To uruchomi pipeline na branchu MAIN
|
||||||
sh 'GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git push origin main'
|
sh 'GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git push origin main'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
post {
|
||||||
|
always {
|
||||||
|
echo '--- [DEVELOP] Sprzątanie ---'
|
||||||
|
sh 'docker compose -f docker-compose.test.yml down -v'
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tutaj w przyszłości będzie ETAP 3: Publish to NPM
|
// =========================================================
|
||||||
// On będzie miał warunek: when { branch 'main' }
|
// ETAP 2: MAIN (Weryfikacja wersji i Publikacja)
|
||||||
}
|
// =========================================================
|
||||||
|
stage('CD: Publish to NPM (Main)') {
|
||||||
|
when {
|
||||||
|
branch 'main'
|
||||||
|
}
|
||||||
|
steps {
|
||||||
|
withCredentials([string(credentialsId: 'npm-token', variable: 'NPM_TOKEN')]) {
|
||||||
|
script {
|
||||||
|
echo '--- [MAIN] Start procedury publikacji ---'
|
||||||
|
|
||||||
post {
|
// 1. Pobierz wersję lokalną (tę, którą wpisałeś ręcznie)
|
||||||
always {
|
def localVersion = sh(script: "node -p \"require('./package.json').version\"", returnStdout: true).trim()
|
||||||
// Sprzątanie wykonujemy tylko, jeśli testy w ogóle ruszyły
|
echo "Lokana wersja w package.json: ${localVersion}"
|
||||||
// Ale komenda down jest bezpieczna nawet jak nic nie działało
|
|
||||||
sh 'docker compose -f docker-compose.test.yml down -v'
|
// 2. Sprawdź wersję w NPM
|
||||||
|
def versionExists = false
|
||||||
|
try {
|
||||||
|
// 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
|
||||||
|
def npmCheck = sh(script: "npm view wc-timer@${localVersion} version", returnStatus: true)
|
||||||
|
if (npmCheck == 0) {
|
||||||
|
versionExists = true
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
versionExists = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. Decyzja: Publikuj albo Giń
|
||||||
|
if (versionExists) {
|
||||||
|
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.")
|
||||||
|
} 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'
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user