From 28ff25b6b1ec2a2d42ee54898a83eeab7ee7c13b Mon Sep 17 00:00:00 2001 From: lzh Date: Wed, 29 Apr 2026 11:16:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20video-server=20=E4=BB=85=E5=9C=A8=20?= =?UTF-8?q?release/next=20=E6=9E=84=E5=BB=BA=EF=BC=8Cmaster=20=E4=B8=8D?= =?UTF-8?q?=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:CORE_SERVICES 包含 video-server,master 构建时尝试构建 但代码只在 release/next,会导致 master 构建失败 修复: - 引入 ACTIVE_SERVICES 根据分支动态设置服务列表 - master: 不含 video-server - release/next: 含 video-server - detectServicesToBuild 使用 ACTIVE_SERVICES 代替 CORE_SERVICES Co-Authored-By: Claude Opus 4.7 --- Jenkinsfile | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 43c0f555..447ca2fe 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -75,25 +75,30 @@ pipeline { echo "Workspace: ${env.WORKSPACE}" echo "Start Time: ${new Date()}" echo "==========================================" - - // 根据分支选择部署目标 + + // 根据分支选择部署目标和服务列表 if (env.BRANCH_NAME == 'release/next') { env.DEPLOY_HOST = env.RELEASE_DEPLOY_HOST env.DEPLOY_PATH = env.RELEASE_DEPLOY_PATH env.COMPOSE_FILE = 'docker-compose.release.yml' env.CONTAINER_NAME_SUFFIX = '-release' + // Release 分支包含 video-server + env.ACTIVE_SERVICES = 'viewsh-gateway,viewsh-module-system-server,viewsh-module-infra-server,viewsh-module-iot-server,viewsh-module-iot-gateway,viewsh-module-ops-server,viewsh-module-video-server' echo "📦 Deploy target: RELEASE (${env.DEPLOY_HOST}) using ${env.COMPOSE_FILE}" } else if (env.BRANCH_NAME == 'master') { env.DEPLOY_HOST = env.PROD_DEPLOY_HOST env.DEPLOY_PATH = env.PROD_DEPLOY_PATH env.COMPOSE_FILE = 'docker-compose.core.yml' env.CONTAINER_NAME_SUFFIX = '' + // Master 分支不包含 video-server(代码未同步) + env.ACTIVE_SERVICES = 'viewsh-gateway,viewsh-module-system-server,viewsh-module-infra-server,viewsh-module-iot-server,viewsh-module-iot-gateway,viewsh-module-ops-server' echo "📦 Deploy target: PRODUCTION (${env.DEPLOY_HOST}) using ${env.COMPOSE_FILE}" } else { // 防呆:未知分支不允许部署,避免 BRANCH_NAME 缺失时误伤 env.DEPLOY_HOST = '' env.COMPOSE_FILE = '' env.CONTAINER_NAME_SUFFIX = '' + env.ACTIVE_SERVICES = env.CORE_SERVICES // 其他分支用默认列表 echo "⚠️ Unknown branch '${env.BRANCH_NAME}' — build only, no deploy" } @@ -580,8 +585,11 @@ def checkIfDepsChanged(List changedFiles) { // 检测需要构建的服务 def detectServicesToBuild(List changedFiles) { + // 使用分支对应的服务列表(master 不含 video-server) + def activeServices = env.ACTIVE_SERVICES ?: env.CORE_SERVICES + if (changedFiles.contains('all')) { - return env.CORE_SERVICES + return activeServices } def triggerAllFiles = ['pom.xml', 'viewsh-framework', 'viewsh-dependencies', 'Jenkinsfile', 'docker/'] @@ -590,11 +598,11 @@ def detectServicesToBuild(List changedFiles) { changedFile.startsWith(triggerFile) || changedFile == triggerFile } }) { - return env.CORE_SERVICES + return activeServices } def changedServices = [] - def allServices = env.CORE_SERVICES.split(',') + def allServices = activeServices.split(',') allServices.each { service -> def modulePath = getModulePathForService(service) @@ -605,7 +613,7 @@ def detectServicesToBuild(List changedFiles) { } } - return changedServices.isEmpty() ? env.CORE_SERVICES : changedServices.join(',') + return changedServices.isEmpty() ? activeServices : changedServices.join(',') } // 检查依赖镜像是否存在