Files
test/Jenkinsfile.dev139
2026-04-08 21:26:18 +08:00

156 lines
5.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
pipeline {
agent any
environment {
// 项目信息
PROJECT_NAME = 'DCS 画布编辑器'
APP_NAME = 'cslab-dcs-web'
BUILD_DIR = 'apps/web/dist'
// 部署目标 - 139测试环境 (内网 139)
SSH_SERVER = 'ssh-test-139'
DEPLOY_HOST = '192.168.1.139'
REMOTE_DIR = '/root/jenkins-dir'
DEPLOY_BASE = '/root/chemlab/www/chemlab'
DEPLOY_DIR = "${DEPLOY_BASE}/${APP_NAME}"
// 企业微信 Webhook从 Jenkins 凭据读取)
WEBHOOK_URL = credentials('webhook-url')
// Node 版本(需在 Jenkins 全局工具配置中添加同名 NodeJS 安装)
NODE_HOME = tool(name: 'NodeJS-22', type: 'nodejs')
PATH = "${NODE_HOME}/bin:${env.PATH}"
}
options {
timeout(time: 15, unit: 'MINUTES')
disableConcurrentBuilds()
buildDiscarder(logRotator(numToKeepStr: '10'))
}
stages {
stage('环境检查') {
steps {
echo "📋 项目: ${PROJECT_NAME}"
echo "🌿 分支: ${env.BRANCH_NAME ?: env.GIT_BRANCH ?: 'unknown'}"
echo "🔧 环境: 139测试 (${DEPLOY_HOST})"
sh '''
echo "Node 版本: $(node -v)"
echo "pnpm 版本: $(pnpm -v)"
'''
}
}
stage('安装依赖') {
steps {
echo '📦 安装项目依赖...'
sh 'ELECTRON_SKIP_BINARY_DOWNLOAD=1 pnpm install'
}
}
stage('构建') {
steps {
echo '🔨 构建139测试环境版本...'
sh 'pnpm build:web'
}
}
stage('部署') {
steps {
echo "🚀 部署到139测试环境: ${DEPLOY_HOST}"
sshPublisher(
publishers: [
sshPublisherDesc(
configName: SSH_SERVER,
transfers: [
sshTransfer(
sourceFiles: "${BUILD_DIR}/**",
removePrefix: BUILD_DIR,
remoteDirectory: APP_NAME,
execCommand: """
TS=\$(date +%Y%m%d%H%M%S)
# 备份旧版本
if [ -d "${DEPLOY_DIR}" ]; then
mv "${DEPLOY_DIR}" "${DEPLOY_DIR}.backup.\$TS"
fi
mkdir -p "${DEPLOY_BASE}"
# 移动到部署目录
mv "${REMOTE_DIR}/${APP_NAME}" "${DEPLOY_DIR}"
# 设置权限
chmod -R 755 "${DEPLOY_DIR}"
# 清理超过 7 天的旧备份
find "${DEPLOY_BASE}" -maxdepth 1 -name "${APP_NAME}.backup.*" -mtime +7 -exec rm -rf {} +
"""
)
]
)
]
)
}
}
}
post {
success {
echo '✅ 139测试环境部署成功'
script {
def branch = env.BRANCH_NAME ?: env.GIT_BRANCH ?: 'unknown'
def timestamp = new Date().format('yyyy-MM-dd HH:mm:ss', TimeZone.getTimeZone('Asia/Shanghai'))
def content = """## 🚀 DCS 画布编辑器 自动部署通知<font color=\\"warning\\"> 139测试环境</font>
**部署时间**: ${timestamp}
**部署项目**: **${PROJECT_NAME}**
**分支**: ${branch}
**构建编号**: #${env.BUILD_NUMBER}
> Jenkins 自动构建部署完成"""
sh """
curl -s -X POST \
-H 'Content-Type: application/json' \
-d '{"msgtype":"markdown","markdown":{"content":"${content}"}}' \
'${WEBHOOK_URL}' || true
"""
}
}
failure {
echo '❌ 139测试环境部署失败'
script {
def branch = env.BRANCH_NAME ?: env.GIT_BRANCH ?: 'unknown'
def timestamp = new Date().format('yyyy-MM-dd HH:mm:ss', TimeZone.getTimeZone('Asia/Shanghai'))
def content = """## ❌ DCS 画布编辑器 部署失败通知<font color=\\"warning\\"> 139测试环境</font>
**时间**: ${timestamp}
**项目**: **${PROJECT_NAME}**
**分支**: ${branch}
**构建编号**: [#${env.BUILD_NUMBER}](${env.BUILD_URL})
> 请检查 Jenkins 构建日志"""
sh """
curl -s -X POST \
-H 'Content-Type: application/json' \
-d '{"msgtype":"markdown","markdown":{"content":"${content}"}}' \
'${WEBHOOK_URL}' || true
"""
}
}
always {
// 清理构建产物
sh "rm -rf ${BUILD_DIR}"
}
}
}