From d36e480413622792c2684c142726274ab1857f4e Mon Sep 17 00:00:00 2001 From: ouyangxq <775153912@qq.com> Date: Thu, 20 Aug 2026 10:17:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Jenkinsfile.service | 13 ++++++-- deploy/scripts/deploy-development-service.sh | 34 ++++++++++++++++++++ 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile.service b/Jenkinsfile.service index 438112a60..db2c1e1f9 100644 --- a/Jenkinsfile.service +++ b/Jenkinsfile.service @@ -20,7 +20,10 @@ def serviceJars = [ pipeline { // 每个 Jenkins 子 Job 使用自己的 workspace,因此不同服务可以并行执行 mvn clean。 - agent any + // 开发环境利用开发服务器的计算资源;测试及其他环境继续留在原 master 节点。 + agent { + label "${params.ENVIRONMENT == 'development' ? 'java-dev' : 'master'}" + } tools { maven 'maven-3.8.8' @@ -162,8 +165,12 @@ pipeline { steps { script { String credentialId = "firstleg-${params.ENVIRONMENT}-env" - withCredentials([file(credentialsId: credentialId, variable: 'DEPLOY_ENV_FILE')]) { - sh "sh deploy/scripts/deploy-services.sh '${params.ENVIRONMENT}' '${env.RESOLVED_IMAGE_REPOSITORY}' '${env.RESOLVED_IMAGE_TAG}' '${env.RESOLVED_SERVICE}' \"\$DEPLOY_ENV_FILE\"" + boolean localDevelopmentDeploy = params.ENVIRONMENT == 'development' && + env.NODE_LABELS?.tokenize()?.contains('java-dev') + withEnv(["DEVELOPMENT_DEPLOY_LOCAL=${localDevelopmentDeploy}"]) { + withCredentials([file(credentialsId: credentialId, variable: 'DEPLOY_ENV_FILE')]) { + sh "sh deploy/scripts/deploy-services.sh '${params.ENVIRONMENT}' '${env.RESOLVED_IMAGE_REPOSITORY}' '${env.RESOLVED_IMAGE_TAG}' '${env.RESOLVED_SERVICE}' \"\$DEPLOY_ENV_FILE\"" + } } } } diff --git a/deploy/scripts/deploy-development-service.sh b/deploy/scripts/deploy-development-service.sh index 6819b9113..10c33440a 100644 --- a/deploy/scripts/deploy-development-service.sh +++ b/deploy/scripts/deploy-development-service.sh @@ -44,6 +44,40 @@ for service in $SERVICES; do esac done +if [ "${DEVELOPMENT_DEPLOY_LOCAL:-false}" = "true" ]; then + echo "开发镜像已在开发节点本机构建,直接部署: $SERVICE_CSV" + install -d -m 750 "$REMOTE_DIR" + + SUFFIX="${IMAGE_TAG}.$$.${SERVICE_CSV}" + LOCAL_ENV_TMP="$REMOTE_DIR/.env.$SUFFIX.tmp" + LOCAL_COMPOSE_TMP="$REMOTE_DIR/docker-compose.yml.$SUFFIX.tmp" + install -m 600 "$ENV_FILE" "$LOCAL_ENV_TMP" + install -m 644 "$COMPOSE_FILE" "$LOCAL_COMPOSE_TMP" + mv -f "$LOCAL_ENV_TMP" "$REMOTE_DIR/.env" + mv -f "$LOCAL_COMPOSE_TMP" "$REMOTE_DIR/docker-compose.yml" + + for service in $SERVICES; do + docker image inspect "$IMAGE_REPOSITORY/$service:$IMAGE_TAG" >/dev/null + done + + cd "$REMOTE_DIR" + export DEPLOY_ENV=development + export IMAGE_REPOSITORY IMAGE_TAG + + docker compose \ + --project-name firstleg-development \ + --env-file .env \ + -f docker-compose.yml \ + up -d --remove-orphans --pull never $SERVICES + + docker compose \ + --project-name firstleg-development \ + --env-file .env \ + -f docker-compose.yml \ + ps $SERVICES + exit 0 +fi + run_ssh() { ssh -i "$SSH_KEY" \ -o BatchMode=yes \