97 lines
4.1 KiB
Groovy
97 lines
4.1 KiB
Groovy
pipeline {
|
||
// 可以在这里指定运行的节点,any 表示任何可用的 Jenkins 节点
|
||
agent any
|
||
|
||
environment {
|
||
// 定义镜像名称和标签
|
||
DOCKER_REGISTRY = '' // 如果有私有仓库,填在这里,如 'registry.cn-hangzhou.aliyuncs.com/my-ns/'
|
||
FRONTEND_IMAGE_NAME = 'writeoff-frontend'
|
||
BACKEND_IMAGE_NAME = 'writeoff-backend'
|
||
IMAGE_TAG = "${env.BUILD_NUMBER}" // 或者用 git commit hash
|
||
|
||
// 部署的目标服务器目录
|
||
DEPLOY_DIR = '/opt/writeoff'
|
||
}
|
||
|
||
stages {
|
||
// ---------------------------------------------------------
|
||
// 后端构建阶段
|
||
// ---------------------------------------------------------
|
||
stage('Build Backend') {
|
||
when {
|
||
// 仅当 backend 目录下的文件或 Dockerfile 发生变化时执行
|
||
changeset "backend/**"
|
||
}
|
||
steps {
|
||
echo "=============================="
|
||
echo "🚀 检测到后端代码变更,开始构建后端镜像..."
|
||
echo "=============================="
|
||
dir('backend') {
|
||
// 使用 Docker 构建后端镜像
|
||
sh "docker build -t ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG} ."
|
||
sh "docker tag ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG} ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:latest"
|
||
|
||
// 如果有私有仓库,可以在这里 push
|
||
// sh "docker push ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:${IMAGE_TAG}"
|
||
// sh "docker push ${DOCKER_REGISTRY}${BACKEND_IMAGE_NAME}:latest"
|
||
}
|
||
}
|
||
}
|
||
|
||
// ---------------------------------------------------------
|
||
// 前端构建与部署阶段 (方案1: 直接打包并复制静态文件)
|
||
// ---------------------------------------------------------
|
||
stage('Build & Deploy Frontend') {
|
||
when {
|
||
// 仅当 frontend 目录下的文件发生变化时执行
|
||
changeset "frontend/**"
|
||
}
|
||
steps {
|
||
echo "=============================="
|
||
echo "🚀 检测到前端代码变更,开始构建前端..."
|
||
echo "=============================="
|
||
dir('frontend') {
|
||
// 使用 npm 安装依赖并构建
|
||
sh "npm install"
|
||
sh "npm run build"
|
||
|
||
// 将打包好的静态文件复制到目标服务器的 Nginx 目录
|
||
// TODO: 请将 root@your-server:/usr/share/nginx/html/ 替换为实际部署路径
|
||
echo "📦 部署前端静态文件(dist)到 Nginx 目录..."
|
||
sh "scp -r dist/* root@your-server:/usr/share/nginx/html/"
|
||
}
|
||
}
|
||
}
|
||
|
||
// ---------------------------------------------------------
|
||
// 部署阶段 (使用 Docker Compose)
|
||
// ---------------------------------------------------------
|
||
stage('Deploy') {
|
||
steps {
|
||
echo "=============================="
|
||
echo "📦 开始部署项目..."
|
||
echo "=============================="
|
||
|
||
// 这里假设您是在 Jenkins 本机运行 docker-compose,或者通过 SSH 连到目标服务器执行
|
||
// 示例中我们直接通过 docker-compose up -d 更新服务
|
||
sh "docker-compose up -d"
|
||
|
||
// 清理悬空镜像(可选项,防止磁盘占用过大)
|
||
sh "docker image prune -f"
|
||
}
|
||
}
|
||
}
|
||
|
||
// ---------------------------------------------------------
|
||
// 构建后处理
|
||
// ---------------------------------------------------------
|
||
post {
|
||
success {
|
||
echo "✅ 构建和部署成功!"
|
||
}
|
||
failure {
|
||
echo "❌ 构建或部署失败,请检查 Jenkins 日志。"
|
||
}
|
||
}
|
||
}
|