From e9cd71029d900e47727be7208f6863af4fdf1896 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=8D=E7=BC=96=E8=AF=91=E5=B7=A5=E4=BD=9C=E5=8C=BA?= Date: Fri, 1 May 2026 19:41:18 +0800 Subject: [PATCH] feat: add test env infra compose, config templates, build/prepare scripts Former-commit-id: 70b7cd14e81c8f43300638dcd5f9859115e1959a --- scripts/test-env/build-elevator-v2.sh | 33 ++++++++ .../config/service-templates/alarm.properties | 41 ++++++++++ .../component-org.properties | 11 +++ .../service-templates/crk-std.properties | 54 ++++++++++++ .../service-templates/elevator-v2.properties | 48 +++++++++++ .../service-templates/ninca-common.properties | 11 +++ scripts/test-env/docker-compose.infra.yml | 65 +++++++++++++++ scripts/test-env/prepare-services.sh | 82 +++++++++++++++++++ 8 files changed, 345 insertions(+) create mode 100755 scripts/test-env/build-elevator-v2.sh create mode 100644 scripts/test-env/config/service-templates/alarm.properties create mode 100644 scripts/test-env/config/service-templates/component-org.properties create mode 100644 scripts/test-env/config/service-templates/crk-std.properties create mode 100644 scripts/test-env/config/service-templates/elevator-v2.properties create mode 100644 scripts/test-env/config/service-templates/ninca-common.properties create mode 100644 scripts/test-env/docker-compose.infra.yml create mode 100755 scripts/test-env/prepare-services.sh diff --git a/scripts/test-env/build-elevator-v2.sh b/scripts/test-env/build-elevator-v2.sh new file mode 100755 index 00000000..0549f96c --- /dev/null +++ b/scripts/test-env/build-elevator-v2.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# build-elevator-v2.sh — 编译 cw-elevator-application V2 +source "$(dirname "${BASH_SOURCE[0]}")/config/env.sh" + +log_info "Building V2 elevator application..." + +cd "$REPO_ROOT/maven-cw-elevator-application" + +export JAVA_HOME +export PATH="$JAVA_HOME/bin:$PATH" + +log_info "JDK: $($JAVA -version 2>&1 | head -1)" + +# Build (skip tests) +$MVN clean install $MVN_OPTS 2>&1 | tail -5 + +if [[ ${PIPESTATUS[0]} -eq 0 ]]; then + log_ok "V2 elevator build SUCCESS" +else + log_error "V2 elevator build FAILED — check logs" + exit 1 +fi + +# Sync JAR to deploy/ +if [[ -f "cw-elevator-application-starter/target/cw-elevator-application-2.0.7.jar" ]]; then + cp cw-elevator-application-starter/target/cw-elevator-application-2.0.7.jar \ + deploy/v2-maven/cw-elevator-application-2.0.7.jar + log_ok "JAR synced to deploy/v2-maven/" +else + # Fallback: use sync-jars.sh + cd deploy && bash sync-jars.sh + log_ok "JAR synced via sync-jars.sh" +fi diff --git a/scripts/test-env/config/service-templates/alarm.properties b/scripts/test-env/config/service-templates/alarm.properties new file mode 100644 index 00000000..d6f175b9 --- /dev/null +++ b/scripts/test-env/config/service-templates/alarm.properties @@ -0,0 +1,41 @@ +# Alarm app test config +spring.application.name=ninca-qk-alarm-app +server.port=__ALARM_PORT__ +spring.main.allow-bean-definition-overriding=true + +# Consul +spring.cloud.consul.host=__CONSUL_HOST__ +spring.cloud.consul.port=__CONSUL_PORT__ +spring.cloud.consul.discovery.register=true +spring.cloud.consul.discovery.ip-address=127.0.0.1 + +# MySQL +spring.datasource.url=jdbc:mysql://__MYSQL_HOST__:__MYSQL_PORT__/alarm_deploy?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai +spring.datasource.username=root +spring.datasource.password=123456 + +# Redis +spring.redis.host=__REDIS_HOST__ +spring.redis.port=6379 +spring.redis.password=__REDIS_PASS__ +spring.redis.database=7 + +# Kafka +kafka.producer.bootstrap-servers=__KAFKA_HOST__:__KAFKA_PORT__ +kafka.consumer.bootstrap-servers=__KAFKA_HOST__:__KAFKA_PORT__ +spring.kafka.bootstrap-servers=__KAFKA_HOST__:__KAFKA_PORT__ +spring.kafka.consumer.group-id=alarm_test + +# Feign names +cloudwalk.alarm-app.feign.name.cwos-portal=cwos-portal +cloudwalk.alarm-app.feign.name.component-organization=ninca-common-component-organization +cloudwalk.alarm-app.feign.name.ninca-common=ninca-common + +# Management +management.port=__ALARM_MGMT_PORT__ +management.context-path=/actuator +management.security.enabled=false + +# Disable non-essential features for test +swagger.enable=false +sendRecord.boolean=false diff --git a/scripts/test-env/config/service-templates/component-org.properties b/scripts/test-env/config/service-templates/component-org.properties new file mode 100644 index 00000000..0ddca622 --- /dev/null +++ b/scripts/test-env/config/service-templates/component-org.properties @@ -0,0 +1,11 @@ +server.port=__COMPONENT_ORG_PORT__ +spring.application.name=ninca-common-component-organization +spring.datasource.url=jdbc:mysql://__MYSQL_HOST__:__MYSQL_PORT__/component-organization?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai +spring.datasource.username=root +spring.datasource.password=123456 +spring.cloud.consul.host=__CONSUL_HOST__ +spring.cloud.consul.port=__CONSUL_PORT__ +spring.cloud.consul.discovery.register=true +spring.redis.host=__REDIS_HOST__ +spring.redis.port=6379 +spring.redis.password=__REDIS_PASS__ diff --git a/scripts/test-env/config/service-templates/crk-std.properties b/scripts/test-env/config/service-templates/crk-std.properties new file mode 100644 index 00000000..733d013a --- /dev/null +++ b/scripts/test-env/config/service-templates/crk-std.properties @@ -0,0 +1,54 @@ +# CRK-std test config +spring.application.name=ninca-crk-std +server.port=__CRK_PORT__ +spring.profiles.active=smart-attendance,visitor-management,access-control,conference-attendance + +# Consul +spring.cloud.consul.host=__CONSUL_HOST__ +spring.cloud.consul.port=__CONSUL_PORT__ +spring.cloud.consul.discovery.register=true +spring.cloud.consul.discovery.ip-address=127.0.0.1 + +# MySQL +spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://__MYSQL_HOST__:__MYSQL_PORT__/ninca_crk_std?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true +spring.shardingsphere.datasource.ds0.username=root +spring.shardingsphere.datasource.ds0.password=123456 + +# Redis +spring.redis.host=__REDIS_HOST__ +spring.redis.port=6379 +spring.redis.password=__REDIS_PASS__ +spring.redis.database=5 + +# Kafka +kafka.producer.bootstrap-servers=__KAFKA_HOST__:__KAFKA_PORT__ +kafka.consumer.bootstrap-servers=__KAFKA_HOST__:__KAFKA_PORT__ +spring.kafka.bootstrap-servers=__KAFKA_HOST__:__KAFKA_PORT__ +spring.kafka.consumer.group-id=crk_std_test +cloudwalk.event.bootstrap-servers=__KAFKA_HOST__:__KAFKA_PORT__ +cloudwalk.event.group-id=crk_std + +# Feign service names +feign.device.name=cwos-portal +feign.resource.name=cwos-portal +feign.cwos-portal.name=cwos-portal +feign.portal.name=cwos-portal +feign.component-organization.name=ninca-common-component-organization +feign.davinci-portal.name=cwos-portal +feign.ninca-common.name=ninca-common +feign.elevator.name=elevator-app + +# Quartz +quartz.driver=com.mysql.jdbc.Driver +quartz.url=jdbc:mysql://__MYSQL_HOST__:__MYSQL_PORT__/ninca_crk_std?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true +quartz.user=root +quartz.password=123456 + +# Management +management.port=__CRK_MGMT_PORT__ +management.context-path=/actuator +management.security.enabled=false + +xinhewan.businessid=2524639890ba4f2cba9ba1a4eeaa4015 +push.method=1 +sendRecord.boolean=false diff --git a/scripts/test-env/config/service-templates/elevator-v2.properties b/scripts/test-env/config/service-templates/elevator-v2.properties new file mode 100644 index 00000000..84c40034 --- /dev/null +++ b/scripts/test-env/config/service-templates/elevator-v2.properties @@ -0,0 +1,48 @@ +# V2 elevator test config — auto-generated from template +# Variables: __MYSQL_HOST__ __MYSQL_PORT__ __REDIS_HOST__ __REDIS_PASS__ +# __CONSUL_HOST__ __CONSUL_PORT__ __KAFKA_HOST__ __KAFKA_PORT__ +# __CRK_HOST__ __CRK_PORT__ +server.port=18081 +spring.application.name=elevator-app +spring.profiles.active=access-control + +# Consul +spring.cloud.consul.host=__CONSUL_HOST__ +spring.cloud.consul.port=__CONSUL_PORT__ +spring.cloud.consul.enabled=true +spring.cloud.consul.discovery.register=true +spring.cloud.consul.discovery.enabled=false + +# MySQL (ShardingSphere) +spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://__MYSQL_HOST__:__MYSQL_PORT__/cw-elevator-application?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true +spring.shardingsphere.datasource.ds0.username=root +spring.shardingsphere.datasource.ds0.password=123456 + +# Redis +spring.redis.host=__REDIS_HOST__ +spring.redis.port=6379 +spring.redis.password=__REDIS_PASS__ +spring.redis.database=5 + +# Kafka +cloudwalk.event.bootstrap-servers=__KAFKA_HOST__:__KAFKA_PORT__ +cloudwalk.event.group-id=cw-elevator-application-test + +# Feign targets +feign.device.name=cwos-portal +feign.cwos-portal.name=cwos-portal +feign.ninca-crk-std.name=ninca-crk-std +ninca-crk-std.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList +ninca-crk-std.ribbon.listOfServers=__CRK_HOST__:__CRK_PORT__ +ninca-crk-std.ip=__CRK_HOST__:__CRK_PORT__ + +# Other +feign.hystrix.enable=true +feign.okhttp.enable=true +ribbon.ReadTimeout=10000 +ribbon.ConnectTimeout=10000 +elevator.application.key=xinghewan +elevator.application.time=600 +elevator.application.keyA=5B7DEF88FF04 +floor.building.id=605560539791228928 +sendRecord.boolean=false diff --git a/scripts/test-env/config/service-templates/ninca-common.properties b/scripts/test-env/config/service-templates/ninca-common.properties new file mode 100644 index 00000000..f8b563a9 --- /dev/null +++ b/scripts/test-env/config/service-templates/ninca-common.properties @@ -0,0 +1,11 @@ +server.port=__NINCA_COMMON_PORT__ +spring.application.name=ninca-common +spring.datasource.url=jdbc:mysql://__MYSQL_HOST__:__MYSQL_PORT__/ninca_common?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai +spring.datasource.username=root +spring.datasource.password=123456 +spring.cloud.consul.host=__CONSUL_HOST__ +spring.cloud.consul.port=__CONSUL_PORT__ +spring.cloud.consul.discovery.register=true +spring.redis.host=__REDIS_HOST__ +spring.redis.port=6379 +spring.redis.password=__REDIS_PASS__ diff --git a/scripts/test-env/docker-compose.infra.yml b/scripts/test-env/docker-compose.infra.yml new file mode 100644 index 00000000..9e6a409e --- /dev/null +++ b/scripts/test-env/docker-compose.infra.yml @@ -0,0 +1,65 @@ +version: '3.8' + +services: + consul: + image: hashicorp/consul:1.22 + container_name: v2test-consul + restart: unless-stopped + ports: + - "8500:8500" + command: > + agent -server -bootstrap-expect=1 -ui + -client=0.0.0.0 -bind=0.0.0.0 + -data-dir=/consul/data + volumes: + - consul-data:/consul/data + + redis: + image: redis:7-alpine + container_name: v2test-redis + restart: unless-stopped + ports: + - "6379:6379" + command: redis-server --requirepass "1qaz!QAZ" + + zookeeper: + image: bitnami/zookeeper:3.9 + container_name: v2test-zookeeper + restart: unless-stopped + ports: + - "2181:2181" + environment: + ALLOW_ANONYMOUS_LOGIN: "yes" + + kafka: + image: bitnami/kafka:3.6 + container_name: v2test-kafka + restart: unless-stopped + ports: + - "9092:9092" + environment: + KAFKA_CFG_NODE_ID: 1 + KAFKA_CFG_PROCESS_ROLES: "broker,controller" + KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: "1@localhost:9093" + KAFKA_CFG_LISTENERS: "PLAINTEXT://:9092,CONTROLLER://:9093" + KAFKA_CFG_ADVERTISED_LISTENERS: "PLAINTEXT://localhost:9092" + KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" + KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: "PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT" + KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: "true" + depends_on: + - zookeeper + + nginx: + image: nginx:alpine + container_name: v2test-nginx + restart: unless-stopped + ports: + - "8090:80" + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: + - ../../frontend:/data/cwos/frontend:ro + - ../../nginx.frontend-local.conf:/etc/nginx/conf.d/default.conf:ro + +volumes: + consul-data: diff --git a/scripts/test-env/prepare-services.sh b/scripts/test-env/prepare-services.sh new file mode 100755 index 00000000..a3870143 --- /dev/null +++ b/scripts/test-env/prepare-services.sh @@ -0,0 +1,82 @@ +#!/bin/bash +# prepare-services.sh — 解压 tar.gz + 从模板生成配置 +source "$(dirname "${BASH_SOURCE[0]}")/config/env.sh" + +log_info "Phase 4: Service preparation" +mkdir -p "$SERVICE_DIR" "$LOG_DIR" + +# Tarballs to extract +TARBALLS=( + "$STAR_CENTER/ninca_common_01-ninca_common_backend.tar.gz:ninca-common" + "$STAR_CENTER/ninca_common_component_organization_01-ninca_common_component_organization.tar.gz:component-org" + "$STAR_CENTER/ninca_common_snap_app_01-ninca_common_snap_app.tar.gz:snap-app" + "$STAR_CENTER/ninca_common_vehicle_app_01-ninca_common_vehicle_app.tar.gz:vehicle-app" + "$STAR_CENTER/ninca_common_monitor_app_01-ninca_common_monitor_app.tar.gz:monitor-app" + "$STAR_CENTER/ninca-person-file-app-V2.9.2_20210216.tar.gz:person-file" +) + +for item in "${TARBALLS[@]}"; do + tarball="${item%%:*}" + svc_name="${item##*:}" + svc_dir="$SERVICE_DIR/$svc_name" + + if [[ -d "$svc_dir" ]]; then + log_info "Already extracted: $svc_name — skipping" + continue + fi + + log_info "Extracting $tarball → $svc_dir ..." + mkdir -p "$svc_dir" + tar -xzf "$tarball" -C "$svc_dir" --strip-components=1 + log_ok " $svc_name extracted" +done + +render_template() { + local template="$1" + local output="$2" + sed \ + -e "s|__MYSQL_HOST__|$MYSQL_HOST|g" \ + -e "s|__MYSQL_PORT__|$MYSQL_PORT|g" \ + -e "s|__REDIS_HOST__|$REDIS_HOST|g" \ + -e "s|__REDIS_PASS__|$REDIS_PASS|g" \ + -e "s|__CONSUL_HOST__|$CONSUL_HOST|g" \ + -e "s|__CONSUL_PORT__|$CONSUL_PORT|g" \ + -e "s|__KAFKA_HOST__|$KAFKA_HOST|g" \ + -e "s|__KAFKA_PORT__|$KAFKA_PORT|g" \ + -e "s|__CRK_HOST__|127.0.0.1|g" \ + -e "s|__CRK_PORT__|$PORT_CRK_STD|g" \ + -e "s|__CRK_MGMT_PORT__|$PORT_CRK_MGMT|g" \ + -e "s|__ALARM_PORT__|$PORT_ALARM|g" \ + -e "s|__ALARM_MGMT_PORT__|$PORT_ALARM_MGMT|g" \ + -e "s|__NINCA_COMMON_PORT__|$PORT_NINCA_COMMON|g" \ + -e "s|__COMPONENT_ORG_PORT__|$PORT_COMPONENT_ORG|g" \ + "$template" > "$output" +} + +# Generate configs for each service +render_template "$TEST_ENV_DIR/config/service-templates/elevator-v2.properties" \ + "$REPO_ROOT/maven-cw-elevator-application/deploy/v2-maven/application-test.properties" +log_ok " elevator-v2 config generated" + +render_template "$TEST_ENV_DIR/config/service-templates/crk-std.properties" \ + "$STAR_CENTER/ninca_crk_std_01-ninca_crk_std_backend/application-test.properties" +log_ok " crk-std config generated" + +render_template "$TEST_ENV_DIR/config/service-templates/alarm.properties" \ + "$STAR_CENTER/ninca_qk_alarm_app_01-ninca_qk_alarm_app/application-test.properties" +log_ok " alarm config generated" + +# Generate configs for extracted tarball services +if [[ -d "$SERVICE_DIR/ninca-common" ]]; then + render_template "$TEST_ENV_DIR/config/service-templates/ninca-common.properties" \ + "$SERVICE_DIR/ninca-common/application-test.properties" + log_ok " ninca-common config generated" +fi + +if [[ -d "$SERVICE_DIR/component-org" ]]; then + render_template "$TEST_ENV_DIR/config/service-templates/component-org.properties" \ + "$SERVICE_DIR/component-org/application-test.properties" + log_ok " component-org config generated" +fi + +log_info "Service preparation complete"