Commit 72b05934 by 文帅营

ci:添加打docker包

1 parent 108c2c95
...@@ -25,7 +25,6 @@ target/ ...@@ -25,7 +25,6 @@ target/
/dist/ /dist/
/nbdist/ /nbdist/
/.nb-gradle/ /.nb-gradle/
build/
### VS Code ### ### VS Code ###
.vscode/ .vscode/
......
# 基础镜像:Eclipse Temurin JRE 21 (Ubuntu 22.04 jammy)
FROM ${BASE_IMAGES_NAME}
LABEL maintainer="yuanjin@vion-tech.com"
ENV DEBIAN_FRONTEND=noninteractive
# 安装常用运维工具
RUN sed -i "s@http://.*archive.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list && \
sed -i "s@http://.*security.ubuntu.com@http://mirrors.huaweicloud.com@g" /etc/apt/sources.list && \
apt-get update && \
apt-get install -y --no-install-recommends \
curl \
vim \
net-tools \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime && dpkg-reconfigure -f noninteractive tzdata
# 设置工作目录
WORKDIR /app
## 复制平台JAR包
COPY ${SERVICE_JAR_FILE_NAME} /app/
# 容器启动时的默认启动JVM
CMD ["java", "${SERVICE_JAR_RUN_PARAMS}", "-jar", "/app/${SERVICE_JAR_FILE_NAME}", "--spring.profiles.active=pro"]
\ No newline at end of file \ No newline at end of file
#!/bin/bash
export SERVICE_NAME=${SPUG_APP_KEY}
# 健康检查配置
export APP_HEALTH_URL="http://localhost:${SERVICE_SERVER_PORT}/version"
export HEALTH_CHECK_INTERVAL=30
export MAX_HEALTH_FAILURES=3
#!/bin/bash
# 健康检查脚本
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" || exit
source "${SCRIPT_DIR}/config.sh"
LOG_FILE="${SCRIPT_DIR}/../logs/health-check.log"
echo $$ > "${SCRIPT_DIR}/../logs/health-check.pid"
# 记录日志函数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOG_FILE"
}
# 捕捉SIGTERM信号,并优雅退出
term_handler() {
log "Health check stopped by systemd"
rm -f "${SCRIPT_DIR}/../logs/health-check.pid"
exit 0
}
# 注册信号处理器
trap 'term_handler' SIGTERM
log "Health check will started for $APP_HEALTH_URL after 120 seconds"
sleep 120; # 等待120秒服务启动成功后才开始检查
log "Configuration: Interval=${HEALTH_CHECK_INTERVAL}s, MaxFailures=${MAX_HEALTH_FAILURES}"
failure_count=0
# 循环检查
while true; do
# 使用curl检查健康端点
HTTP_RESPONSE=$(curl -s -o /dev/null -w '%{http_code}' --connect-timeout 5 --max-time 10 "$APP_HEALTH_URL" 2>> "$LOG_FILE")
CURL_EXIT_CODE=$?
if [ $CURL_EXIT_CODE -eq 0 ] && [ "$HTTP_RESPONSE" -eq 200 ]; then
# 健康检查成功,重置失败计数器
if [ $failure_count -gt 0 ]; then
log "Health restored after $failure_count failures. Resetting counter."
failure_count=0
else
log "Health check success (Curl: $CURL_EXIT_CODE, HTTP: $HTTP_RESPONSE)."
fi
else
# 健康检查失败
((failure_count++))
log "Health check FAILED (Curl: $CURL_EXIT_CODE, HTTP: $HTTP_RESPONSE). Failure count: $failure_count/$MAX_HEALTH_FAILURES"
# 检查是否达到最大失败次数
if [ $failure_count -ge $MAX_HEALTH_FAILURES ]; then
log "CRITICAL: Maximum failure count ($MAX_HEALTH_FAILURES) reached. Restarting service."
sudo systemctl restart $SERVICE_NAME
sleep 120; # 等待120秒服务启动成功后才继续开始检查
fi
fi
# 使用可中断的sleep
sleep $HEALTH_CHECK_INTERVAL &
wait $!
done
\ No newline at end of file \ No newline at end of file
#!/bin/bash
# 获取脚本所在目录
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" || exit
source "${SCRIPT_DIR}/config.sh"
# 记录日志函数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log "Stopping health check service..."
sudo systemctl stop "health-check-${SERVICE_NAME}"
sudo systemctl disable "health-check-${SERVICE_NAME}"
log "Stopping $SERVICE_NAME service..."
sudo systemctl stop "$SERVICE_NAME"
sudo systemctl disable "$SERVICE_NAME"
# 检查服务停止状态
if systemctl is-active --quiet "$SERVICE_NAME"; then
log "Warning: Service $SERVICE_NAME may still be running"
exit 1
else
log "Service $SERVICE_NAME stopped successfully"
fi
# 检查健康检查服务停止状态
if systemctl is-active --quiet "health-check-${SERVICE_NAME}"; then
log "Warning: Health check service may still be running"
else
log "Health check service stopped successfully"
fi
exit 0
\ No newline at end of file \ No newline at end of file
#!/bin/bash
# 服务启动脚本
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR" || exit
source "${SCRIPT_DIR}/config.sh"
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
}
log "Starting $SERVICE_NAME service..."
# 检查是否已经运行
if systemctl is-active --quiet "$SERVICE_NAME"; then
log "Service $SERVICE_NAME is already running"
exit 0
fi
# 启动主服务
sudo systemctl enable "$SERVICE_NAME"
sudo systemctl start "$SERVICE_NAME"
# 启动健康检查服务
sudo systemctl enable "health-check-${SERVICE_NAME}"
sudo systemctl start "health-check-${SERVICE_NAME}"
# 检查服务启动状态
if systemctl is-active --quiet "$SERVICE_NAME"; then
log "Service $SERVICE_NAME started successfully"
else
log "Failed to start service $SERVICE_NAME"
exit 1
fi
# 检查健康检查服务启动状态
if systemctl is-active --quiet "health-check-${SERVICE_NAME}"; then
log "Health check service started successfully"
else
log "Warning: Failed to start health check service"
fi
log "Service startup process completed"
exit 0
\ No newline at end of file \ No newline at end of file
[Unit]
Description=Health Check for ${SPUG_APP_NAME}
After=network.target
[Service]
Type=simple
User=${CURRENT_USER}
Group=${CURRENT_USER_GROUP}
WorkingDirectory=${SERVICE_RUN_DIR}/bin
ExecStart=${SERVICE_RUN_DIR}/bin/health-check.sh &
StandardOutput=null
StandardError=null
Restart=always
RestartSec=30
StartLimitIntervalSec=0
TimeoutStopSec=60s
[Install]
WantedBy=multi-user.target
\ No newline at end of file \ No newline at end of file
[Unit]
Description=${SPUG_APP_NAME}
After=network.target
[Service]
Type=simple
User=${CURRENT_USER}
Group=${CURRENT_USER_GROUP}
WorkingDirectory=${SERVICE_RUN_DIR}
ExecStart=${_SPUG_GLOBAL_CONFIG_JRE21_EXECUTE_FILE} ${SERVICE_JAR_RUN_PARAMS} -jar ${SERVICE_RUN_DIR}/${SERVICE_JAR_FILE_NAME} --spring.profiles.active=pro
StandardOutput=null
StandardError=null
Restart=always
RestartSec=10
StartLimitIntervalSec=0
TimeoutStopSec=60s
[Install]
WantedBy=multi-user.target
\ No newline at end of file \ No newline at end of file
# other
server.port=${SERVICE_SERVER_PORT}
spring.jackson.time-zone=GMT+8
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
# es
spring.elasticsearch.uris=${_SPUG_SERVICE_ELASTICSEARCH_URIS}
spring.elasticsearch.username=${_SPUG_SERVICE_ELASTICSEARCH_USERNAME}
spring.elasticsearch.password=${_SPUG_SERVICE_ELASTICSEARCH_PASSWORD}
spring.elasticsearch.ioThreadCount=100
spring.elasticsearch.maxConnTotal=200
spring.elasticsearch.maxConnPerRoute=100
spring.elasticsearch.socketTimeout=5000
vion.index.number_of_shards=2
vion.index.number_of_replicas=0
delete.after.days=3
server.tomcat.max-threads=500
vion.index.translog.durability=async
vion.index.translog.sync_interval=30s
vion.index.merge.scheduler.max_thread_count=1
vion.index.refresh_interval=30s
server.tomcat.threads.core=100
server.tomcat.threads.queue-size=100
server.tomcat.min-spare-threads=50
delete.after.days=3
\ No newline at end of file \ No newline at end of file
#!/bin/bash
# 统一打包脚本
echo "开始打包,当前目录:"
pwd
PROJECT_NAME=$(grep -m 1 "<artifactId>" pom.xml | sed -n 's:.*<artifactId>\(.*\)</artifactId>.*:\1:p')
# 制品库路径前缀配置
REPOSITORY_PACKAGES="VVAS-DataCenter/Store"
FINAL_NAME="${PROJECT_NAME}"
# 获取版本号
TIMESTAMP=$(date +%Y%m%d%H%M%S)
if [ -z "${SPUG_GIT_BRANCH}" ]; then
SPUG_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
fi
if [ -z "${SPUG_GIT_COMMIT_ID}" ]; then
SPUG_GIT_COMMIT_ID=$(git rev-parse HEAD 2>/dev/null | cut -c1-8 || echo "unknown")
fi
##### 环境变量替换 ####################
echo "[debug]所有可用变量列表:"
env | grep SPUG
# 简化一些变量的写法
SERVICE_RUN_DIR_KEY=_SPUG_GLOBAL_CONFIG_${SPUG_APP_KEY^^}_RUN_DIR
SERVICE_RUN_DIR=${!SERVICE_RUN_DIR_KEY}
SERVICE_JAR_FILE_NAME_KEY=_SPUG_GLOBAL_CONFIG_${SPUG_APP_KEY^^}_JAR_FILE_NAME
SERVICE_JAR_FILE_NAME=${!SERVICE_JAR_FILE_NAME_KEY}
SERVICE_SERVER_PORT_KEY=_SPUG_GLOBAL_CONFIG_${SPUG_APP_KEY^^}_SERVER_PORT
SERVICE_SERVER_PORT=${!SERVICE_SERVER_PORT_KEY}
SERVICE_JAR_RUN_PARAMS_KEY=_SPUG_GLOBAL_CONFIG_${SPUG_APP_KEY^^}_JAR_RUN_PARAMS
SERVICE_JAR_RUN_PARAMS=${!SERVICE_JAR_RUN_PARAMS_KEY}
BASE_IMAGES_NAME_KEY=_SPUG_GLOBAL_CONFIG_${SPUG_APP_KEY^^}_BASE_IMAGES_NAME
BASE_IMAGES_NAME=${!BASE_IMAGES_NAME_KEY}
replace_vars_in_file() {
local template_file="$1"
local output_file="$2"
local var_pattern='\$\{([^}]+)\}'
local temp_file
if [[ "$template_file" == "$output_file" ]]; then
temp_file="$(mktemp)"
trap 'rm -f "$temp_file"' EXIT
output_file="$temp_file"
fi
# 确保模板文件存在
if [[ ! -f "$template_file" ]]; then
echo "Error: Template file '$template_file' not found" >&2
return 1
fi
# read -r读不到最后一行,需要手动增加一个空行
printf '\n' >>"$template_file"
# 逐行处理模板文件
while IFS= read -r line; do
while [[ "$line" =~ $var_pattern ]]; do
var_spec="${BASH_REMATCH[1]}"
if [[ "$var_spec" =~ ^(.*):(.*)$ ]]; then
var_name="${BASH_REMATCH[1]}"
default_val="${BASH_REMATCH[2]}"
value="${!var_name:-$default_val}"
else
var_name="$var_spec"
value="${!var_name:-""}"
fi
line="${line//\$\{$var_spec\}/$value}"
done
echo "$line"
done <"$template_file" >"$output_file"
sed -i 's/\r$//' $output_file
# 如果是临时文件情况,移动回原位置
if [[ "$template_file" == "$1" && "$output_file" == "$temp_file" ]]; then
mv "$temp_file" "$template_file"
elif [[ "$template_file" != "$2" ]]; then
rm -f "$template_file"
fi
}
##### 环境变量替换 ####################
VERSION="${SPUG_GIT_BRANCH}-${SPUG_GIT_COMMIT_ID:0:6}"
echo "开始打包: ${FINAL_NAME}, 版本号:${VERSION}"
# 清理并创建临时目录
TEMP_DIR="target/temp-packaging"
rm -rf ${TEMP_DIR}
mkdir -p ${TEMP_DIR}
# 1. 执行Maven打包
echo "步骤1: 检查是否已打jar包: target/*.jar "
if ls target/*.jar 1> /dev/null 2>&1; then
echo "已存在JAR包,继续"
else
echo "[error]未找到JAR包,请先手动执行mvn package打包..."
ls -ltr target/
exit 1
fi
# 2. 复制build目录内容到临时目录
echo "步骤2: 复制dockerfile及配置项..."
cp -r build/bin/Dockerfile ${TEMP_DIR}/
cp -r build/config/* ${TEMP_DIR}/
# 3. 复制新生成的jar包到临时目录,并重命名为app.jar
echo "步骤3: 复制JAR文件..."
cp target/*.jar ${TEMP_DIR}/
echo "步骤3.1: 替换变量: Dockerfile 和 application.properties文件 "
#(理论上应该是cd阶段替换的,ci阶段仅保留模板变量,先这样处理)
replace_vars_in_file ${TEMP_DIR}/Dockerfile ${TEMP_DIR}/Dockerfile
replace_vars_in_file ${TEMP_DIR}/application-pro.properties.template ${TEMP_DIR}/application-pro.properties
cat ${TEMP_DIR}/Dockerfile
cat ${TEMP_DIR}/application-pro.properties
# 4. 创建最终的tar.gz包
echo "步骤4: 创建docker容器..."
## docker的tag名字只能小写字符
docker build -t ${FINAL_NAME,,}:${VERSION,,} ${TEMP_DIR}/
docker save -o ${TEMP_DIR}/${FINAL_NAME}.tar ${FINAL_NAME,,}:${VERSION,,}
# 最终的包只留docker镜像+配置文件
rm -fr ${TEMP_DIR}/*.jar
rm -fr ${TEMP_DIR}/Dockerfile
tar -czf target/${FINAL_NAME}-docker.tar.gz -C ${TEMP_DIR} .
# 5. 清理临时文件
rm -rf ${TEMP_DIR}
echo "打包完成: target/${FINAL_NAME}-docker.tar.gz"
# 6. 上传到阿里云OSS
echo "步骤5: 上传到阿里云OSS..."
# 构建OSS路径
OSS_BUCKET="oss://spug-software/vion/$REPOSITORY_PACKAGES/${PROJECT_NAME}-docker/$VERSION.tar.gz"
# 使用ossutil上传文件
echo "正在上传到: $OSS_BUCKET"
if ossutil cp -f target/${FINAL_NAME}-docker.tar.gz $OSS_BUCKET; then
echo "上传成功,可访问地址进行部署发布: xx"
echo "部署版本号:${VERSION}"
else
echo "上传失败,请检查阿里的云存储工具ossUtil是否存在且正常配置."
echo "ossutil安装: https://help.aliyun.com/zh/oss/developer-reference/install-ossutil2?spm=a2c4g.11186623.help-menu-31815.d_1_2_1_0.1108bca1ocMOlp"
echo "ossutil配置:[default]
accessKeyId=LTAI5tNySTQ71SuojBPaem2H
accessKeySecret=U6katIF9LTPS7emIO2pVDNeJLN6MeX
region=cn-beijing"
exit 1
fi
#!/bin/bash
# 统一打包脚本
echo "开始打包,当前目录:"
pwd
PROJECT_NAME=$(grep -m 1 "<artifactId>" pom.xml | sed -n 's:.*<artifactId>\(.*\)</artifactId>.*:\1:p')
# 制品库路径前缀配置
REPOSITORY_PACKAGES="VVAS-DataCenter/Store"
FINAL_NAME="${PROJECT_NAME}"
# 获取版本号
TIMESTAMP=$(date +%Y%m%d%H%M%S)
if [ -z "${SPUG_GIT_BRANCH}" ]; then
SPUG_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")
fi
if [ -z "${SPUG_GIT_COMMIT_ID}" ]; then
SPUG_GIT_COMMIT_ID=$(git rev-parse HEAD 2>/dev/null | cut -c1-8 || echo "unknown")
fi
VERSION="${SPUG_GIT_BRANCH}-${SPUG_GIT_COMMIT_ID:0:6}"
echo "开始打包: ${FINAL_NAME}, 版本号:${VERSION}"
# 清理并创建临时目录
TEMP_DIR="target/temp-packaging"
rm -rf ${TEMP_DIR}
mkdir -p ${TEMP_DIR}
# 1. 执行Maven打包
echo "步骤1: 检查是否已打jar包: target/*.jar "
if ls target/*.jar 1> /dev/null 2>&1; then
echo "已存在JAR包,继续"
else
echo "[error]未找到JAR包,请先手动执行mvn package打包..."
ls -ltr target/
exit 1
fi
# 2. 复制build目录内容到临时目录
echo "步骤2: 复制配置依赖启动脚本..."
cp -r build/* ${TEMP_DIR}/
# 3. 复制新生成的jar包到临时目录,并重命名为app.jar
echo "步骤3: 复制JAR文件..."
cp target/*.jar ${TEMP_DIR}/
# 4. 创建最终的tar.gz包
echo "步骤4: 创建压缩包..."
tar -czf target/${FINAL_NAME}.tar.gz -C ${TEMP_DIR} .
# 5. 清理临时文件
rm -rf ${TEMP_DIR}
echo "打包完成: target/${FINAL_NAME}.tar.gz"
# 6. 上传到阿里云OSS
echo "步骤5: 上传到阿里云OSS..."
# 构建OSS路径
OSS_BUCKET="oss://spug-software/vion/$REPOSITORY_PACKAGES/$PROJECT_NAME/$VERSION.tar.gz"
# 使用ossutil上传文件
echo "正在上传到: $OSS_BUCKET"
if ossutil cp -f target/${FINAL_NAME}.tar.gz $OSS_BUCKET; then
echo "上传成功,可访问地址进行部署发布: xx"
echo "部署版本号:${VERSION}"
else
echo "上传失败,请检查阿里的云存储工具ossUtil是否存在且正常配置."
echo "ossutil安装: https://help.aliyun.com/zh/oss/developer-reference/install-ossutil2?spm=a2c4g.11186623.help-menu-31815.d_1_2_1_0.1108bca1ocMOlp"
echo "ossutil配置:[default]
accessKeyId=LTAI5tNySTQ71SuojBPaem2H
accessKeySecret=U6katIF9LTPS7emIO2pVDNeJLN6MeX
region=cn-beijing"
exit 1
fi
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>com.viontech</groupId>
<artifactId>VVAS-Match</artifactId>
<version>1.0.1-SNAPSHOT</version>
<name>VVAS-Match</name>
<packaging>jar</packaging>
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.8</version> <version>3.4.8</version>
<relativePath /> <!-- lookup parent from repository --> <relativePath /> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.viontech</groupId>
<artifactId>VVAS-Match</artifactId>
<version>1.0.1-SNAPSHOT</version>
<name>VVAS-Match</name>
<packaging>jar</packaging>
<properties> <properties>
<java.version>21</java.version> <java.version>21</java.version>
<logback.version>1.5.15</logback.version> <logback.version>1.5.15</logback.version>
......
Subject: [PATCH] 兼容店员匹配后,不自动加入
---
Index: src/main/java/com/viontech/match/controller/MainController.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/main/java/com/viontech/match/controller/MainController.java b/src/main/java/com/viontech/match/controller/MainController.java
--- a/src/main/java/com/viontech/match/controller/MainController.java (revision f07d6fed8a874a8aa13a8ea9a606000a74b7b41a)
+++ b/src/main/java/com/viontech/match/controller/MainController.java (revision e68fd9e6db2d7e014ba3ded03cb462d325767e92)
@@ -46,7 +46,9 @@
return poolService.queryPool(requestVo);
case MatchPerson:
ResponseVo matchPerson = personService.matchPerson(requestVo);
-
+ if (requestVo.getPersonPoolId().contains("staff") || requestVo.getPersonPoolId().contains("person")) {
+ return matchPerson;
+ }
if (matchPerson.getMatchBodies() != null && matchPerson.getMatchBodies().size() > 0) {
requestVo.getPerson().setPersonId(matchPerson.getMatchBodies().get(0).getPersonId());
} else if(matchPerson.getMatchPersons() != null && matchPerson.getMatchPersons().size() > 0) {
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!