feat: 迁移CI/CD从Woodpecker到Jenkins
- 添加Jenkinsfile替代Woodpecker配置 - 使用Shell模式直接在宿主机执行构建 - 移除Woodpecker CI配置文件 - 保留所有CI/CD功能:代码检查、测试、构建、部署
This commit is contained in:
Vendored
+179
@@ -0,0 +1,179 @@
|
||||
pipeline {
|
||||
agent {
|
||||
label 'master'
|
||||
}
|
||||
|
||||
environment {
|
||||
NODE_ENV = 'production'
|
||||
NEXT_TELEMETRY_DISABLED = '1'
|
||||
npm_config_registry = 'https://registry.npmmirror.com'
|
||||
PROJECT_DIR = '/home/novalon/docker-app/novalon-website'
|
||||
DEPLOY_DIR = '/home/novalon/docker-app/novalon-website'
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
echo '=== Checking out code from Gitea ==='
|
||||
checkout scm
|
||||
sh '''
|
||||
echo "Current branch: ${BRANCH_NAME}"
|
||||
echo "Commit: ${GIT_COMMIT}"
|
||||
echo "Workspace: ${WORKSPACE}"
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
stage('Install Dependencies') {
|
||||
steps {
|
||||
echo '=== Installing dependencies ==='
|
||||
sh '''
|
||||
cd ${PROJECT_DIR}
|
||||
npm ci --cache /tmp/npm-cache --prefer-offline --legacy-peer-deps || npm ci --cache /tmp/npm-cache --legacy-peer-deps
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
stage('Code Quality Check') {
|
||||
parallel {
|
||||
stage('Lint') {
|
||||
steps {
|
||||
echo '=== Running linting ==='
|
||||
sh '''
|
||||
cd ${PROJECT_DIR}
|
||||
npm run lint
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
stage('Type Check') {
|
||||
steps {
|
||||
echo '=== Running type check ==='
|
||||
sh '''
|
||||
cd ${PROJECT_DIR}
|
||||
npm run type-check
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
stage('Security Scan') {
|
||||
steps {
|
||||
echo '=== Running security scan ==='
|
||||
sh '''
|
||||
cd ${PROJECT_DIR}
|
||||
npm audit --audit-level=high --omit=dev || true
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('Unit Tests') {
|
||||
when {
|
||||
branch 'dev'
|
||||
}
|
||||
steps {
|
||||
echo '=== Running unit tests ==='
|
||||
sh '''
|
||||
cd ${PROJECT_DIR}
|
||||
npm run test:unit -- --coverage --coverageReporters=text-summary --forceExit || true
|
||||
echo "Unit tests completed."
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
stage('E2E Tests') {
|
||||
when {
|
||||
branch 'dev'
|
||||
}
|
||||
steps {
|
||||
echo '=== Running E2E tests ==='
|
||||
sh '''
|
||||
cd ${PROJECT_DIR}
|
||||
npm run build
|
||||
npx playwright install chromium --with-deps || true
|
||||
npm run test:e2e || true
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
stage('Build and Deploy') {
|
||||
when {
|
||||
anyOf {
|
||||
branch 'release'
|
||||
branch pattern: 'release/**', comparator: 'GLOB'
|
||||
}
|
||||
}
|
||||
steps {
|
||||
echo '=== Building and deploying to production ==='
|
||||
sh '''
|
||||
echo "Current container info:"
|
||||
echo "Hostname: $(hostname)"
|
||||
echo "IP: $(hostname -i)"
|
||||
echo ""
|
||||
|
||||
cd ${PROJECT_DIR}
|
||||
echo "Building production artifacts..."
|
||||
npm run build
|
||||
|
||||
echo "Build completed"
|
||||
ls -la dist/
|
||||
|
||||
echo "Deploying to production..."
|
||||
chmod +x scripts/sync-to-production.sh
|
||||
./scripts/sync-to-production.sh
|
||||
|
||||
echo "Restarting production services..."
|
||||
cd ${DEPLOY_DIR}
|
||||
test -f docker-compose.server.yml && mv docker-compose.server.yml docker-compose.yml
|
||||
chmod +x scripts/deploy-production.sh
|
||||
./scripts/deploy-production.sh
|
||||
|
||||
echo "Production deployment completed"
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
stage('Archive to Main') {
|
||||
when {
|
||||
anyOf {
|
||||
branch 'release'
|
||||
branch pattern: 'release/**', comparator: 'GLOB'
|
||||
}
|
||||
}
|
||||
steps {
|
||||
echo '=== Archiving to main branch ==='
|
||||
sh '''
|
||||
cd ${PROJECT_DIR}
|
||||
chmod +x scripts/archive-to-main.sh
|
||||
./scripts/archive-to-main.sh
|
||||
'''
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
post {
|
||||
success {
|
||||
echo '=== Build succeeded! ==='
|
||||
script {
|
||||
if (env.BRANCH_NAME.startsWith('release')) {
|
||||
echo 'Sending success notification to WeChat...'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
failure {
|
||||
echo '=== Build failed! ==='
|
||||
script {
|
||||
if (env.BRANCH_NAME.startsWith('release')) {
|
||||
echo 'Sending failure notification to WeChat...'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
always {
|
||||
echo '=== Cleaning up workspace ==='
|
||||
cleanWs()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user