Jenkins 增加 Node 运行时自检与回退

This commit is contained in:
2026-03-03 15:04:59 +08:00
parent cf7a7bd2e0
commit 17cf80bed3
Vendored
+50 -21
View File
@@ -2,9 +2,7 @@ pipeline {
agent any
environment {
APP_NAME = 'no-whatever'
AMAP_KEY = credentials('amap-api-key')
DEEPSEEK_KEY = credentials('deepseek-api-key')
APP_NAME = 'no-whatever'
}
triggers {
@@ -18,6 +16,24 @@ pipeline {
}
}
stage('Node Runtime') {
steps {
script {
if (sh(returnStatus: true, script: 'command -v npm >/dev/null 2>&1') != 0) {
echo "System npm not found, trying Jenkins NodeJS tool 'node20'"
try {
def nodeHome = tool name: 'node20', type: 'jenkins.plugins.nodejs.tools.NodeJSInstallation'
env.PATH = "${nodeHome}/bin:${env.PATH}"
} catch (err) {
error "npm not found and Jenkins NodeJS tool 'node20' is unavailable. Please install NodeJS plugin and configure tool name 'node20'. Root cause: ${err}"
}
}
}
sh 'node -v'
sh 'npm -v'
}
}
stage('Install Dependencies') {
steps {
sh 'npm ci'
@@ -42,32 +58,46 @@ pipeline {
}
sh 'npm run test:e2e'
}
post {
always {
archiveArtifacts artifacts: 'playwright-report/**,test-results/**', allowEmptyArchive: true
}
}
}
stage('Build Docker Image') {
steps {
sh "docker build --build-arg NEXT_PUBLIC_AMAP_API_KEY=${AMAP_KEY} -t ${APP_NAME}:${BUILD_NUMBER} -t ${APP_NAME}:latest ."
withCredentials([
string(credentialsId: 'amap-api-key', variable: 'AMAP_KEY')
]) {
sh "docker build --build-arg NEXT_PUBLIC_AMAP_API_KEY=${AMAP_KEY} -t ${APP_NAME}:${BUILD_NUMBER} -t ${APP_NAME}:latest ."
}
}
}
stage('Deploy') {
steps {
sh """
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
mkdir -p /data/${APP_NAME}
chown 1001:1001 /data/${APP_NAME}
docker run -d \
--name ${APP_NAME} \
--network nginx \
-p 3721:3721 \
-v /data/${APP_NAME}:/app/data \
-e DATABASE_URL=file:/app/data/prod.db \
-e AMAP_API_KEY=${AMAP_KEY} \
-e DEEPSEEK_API_KEY=${DEEPSEEK_KEY} \
--restart unless-stopped \
${APP_NAME}:latest
"""
withCredentials([
string(credentialsId: 'amap-api-key', variable: 'AMAP_KEY'),
string(credentialsId: 'deepseek-api-key', variable: 'DEEPSEEK_KEY')
]) {
sh """
docker stop ${APP_NAME} || true
docker rm ${APP_NAME} || true
mkdir -p /data/${APP_NAME}
chown 1001:1001 /data/${APP_NAME}
docker run -d \
--name ${APP_NAME} \
--network nginx \
-p 3721:3721 \
-v /data/${APP_NAME}:/app/data \
-e DATABASE_URL=file:/app/data/prod.db \
-e AMAP_API_KEY=${AMAP_KEY} \
-e DEEPSEEK_API_KEY=${DEEPSEEK_KEY} \
--restart unless-stopped \
${APP_NAME}:latest
"""
}
}
}
}
@@ -78,7 +108,6 @@ pipeline {
}
failure {
echo "Build #${BUILD_NUMBER} failed"
archiveArtifacts artifacts: 'playwright-report/**,test-results/**', allowEmptyArchive: true
}
}
}