diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 000000000..95c9a79d1 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,127 @@ +pipeline { + agent any + + // 定义环境变量 + environment { + // 你的 Git 仓库地址 + GIT_URL = 'ssh://git@192.168.10.10:2222/root/ruoyi-cloud.git' + // 你的 Docker 镜像仓库地址 (可以是阿里云、Harbor 或本地 IP) + REGISTRY_URL = '192.168.10.10:5000' + // 项目名称前缀 + APP_PREFIX = 'ruoyi' + } + + tools { + // 确保在 Jenkins "全局工具配置" 中配置了名为 'jdk17' 和 'maven3' 的工具 + jdk 'jdk17' + maven 'maven3' + } + + stages { + // --- 阶段 1: 拉取代码 --- + stage('Checkout') { + steps { + echo '🚀 正在拉取 RuoYi-Cloud 代码...' + // 使用 SSH 凭据拉取,ID 需与你在 Jenkins 凭据管理中设置的一致 + git branch: 'master', url: "${GIT_URL}", credentialsId: 'git-ssh-cred' + } + } + + // --- 阶段 2: Maven 编译打包 --- + stage('Maven Build') { + steps { + echo '🔨 正在编译所有模块...' + // 跳过测试,清理并打包 + sh 'mvn clean package -DskipTests -Dmaven.test.skip=true' + } + } + + // --- 阶段 3: 构建 Docker 镜像 --- + stage('Build Docker Images') { + parallel { + // 并行构建网关服务 + stage('Build Gateway') { + steps { + script { + buildDockerImage('ruoyi-gateway', 'ruoyi-gateway/target/ruoyi-gateway.jar') + } + } + } + // 并行构建认证服务 + stage('Build Auth') { + steps { + script { + buildDockerImage('ruoyi-auth', 'ruoyi-auth/target/ruoyi-auth.jar') + } + } + } + // 并行构建系统服务 + stage('Build System') { + steps { + script { + buildDockerImage('ruoyi-system', 'ruoyi-modules/ruoyi-system/target/ruoyi-system.jar') + } + } + } + // 如果有文件、定时任务等其他模块,可以继续添加 stage... + } + } + + // --- 阶段 4: 部署容器 --- + stage('Deploy Containers') { + steps { + echo '🚢 正在部署容器...' + script { + // 部署网关 + deployContainer('ruoyi-gateway', 8080, 8080) + // 部署认证 + deployContainer('ruoyi-auth', 9200, 9200) + // 部署系统 + deployContainer('ruoyi-system', 9201, 9201) + } + } + } + } + + post { + success { + echo '🎉 RuoYi-Cloud 全部服务构建部署成功!' + } + failure { + echo '❌ 构建失败,请检查日志。' + } + } +} + +// --- 自定义函数:构建镜像 --- +def buildDockerImage(String imageName, String jarPath) { + echo "正在构建镜像: ${imageName}..." + // 检查 Jar 包是否存在 + if (fileExists(jarPath)) { + // 使用 Dockerfile 构建 + // 注意:这里假设你有一个通用的 Dockerfile,或者我们在脚本里动态生成 + // 为了简化,我们使用 docker build 的 --build-arg 或者直接在 Dockerfile 中指定 + // 这里推荐使用通用的 Dockerfile 放在根目录 + sh """ + docker build -t ${REGISTRY_URL}/${APP_PREFIX}/${imageName}:latest \ + --build-arg JAR_FILE=${jarPath} \ + -f Dockerfile.microservice . + """ + } else { + error "找不到 Jar 包: ${jarPath}" + } +} + +// --- 自定义函数:部署容器 --- +def deployContainer(String imageName, int hostPort, int containerPort) { + echo "正在部署: ${imageName} 到端口 ${hostPort}..." + sh """ + docker stop ${imageName} || true + docker rm ${imageName} || true + docker run -d --name ${imageName} \ + -p ${hostPort}:${containerPort} \ + -e SPRING_PROFILES_ACTIVE=dev \ + --restart=always \ + ${REGISTRY_URL}/${APP_PREFIX}/${imageName}:latest + """ +} \ No newline at end of file