feat: 配置cicd & 运行配置调整
This commit is contained in:
98
.gitea/workflows/cicd.yaml
Normal file
98
.gitea/workflows/cicd.yaml
Normal file
@@ -0,0 +1,98 @@
|
||||
name: aiot-platform CI/CD
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
runs-on: xw-runner
|
||||
container:
|
||||
image: catthehacker/ubuntu:act-latest
|
||||
# Runner 可能已默认挂载 docker.sock,如遇权限问题再尝试添加 options: --user root
|
||||
|
||||
steps:
|
||||
# 1. 手动检出代码
|
||||
- name: Checkout (Native)
|
||||
run: |
|
||||
# 清理工作目录
|
||||
ls -A1 | xargs rm -rf
|
||||
|
||||
# 手动拼接 Git URL
|
||||
SERVER_DOMAIN=$(echo "${{ gitea.server_url }}" | sed -E 's|https?://||')
|
||||
PROTO="http"
|
||||
if [[ "${{ gitea.server_url }}" == https* ]]; then
|
||||
PROTO="https"
|
||||
fi
|
||||
GIT_URL="${PROTO}://${{ gitea.actor }}:${{ gitea.token }}@${SERVER_DOMAIN}/${{ gitea.repository }}.git"
|
||||
|
||||
echo "Cloning from ${PROTO}://${SERVER_DOMAIN}/${{ gitea.repository }}.git ..."
|
||||
git clone --depth 1 "$GIT_URL" .
|
||||
git log -1 --format='%h - %s'
|
||||
|
||||
# 2. 准备 Docker 网络 (用于容器间通信)
|
||||
- name: Create Docker Network
|
||||
run: |
|
||||
docker network create aiot-net || true
|
||||
|
||||
# 3. 构建并部署主服务 (Server)
|
||||
- name: Build & Deploy Server
|
||||
id: build-server
|
||||
env:
|
||||
IMAGE_NAME: 'aiot-server'
|
||||
CONTAINER_NAME: aiot-server
|
||||
run: |
|
||||
# --- 构建 ---
|
||||
SHORT_SHA=$(git log -1 --format='%h')
|
||||
FULL_IMAGE_NAME="${IMAGE_NAME}:${SHORT_SHA}"
|
||||
|
||||
echo "Building Server $FULL_IMAGE_NAME..."
|
||||
# 使用默认 Dockerfile
|
||||
docker build -t "$FULL_IMAGE_NAME" -f Dockerfile .
|
||||
docker tag "$FULL_IMAGE_NAME" "${IMAGE_NAME}:latest"
|
||||
|
||||
# --- 部署 ---
|
||||
echo "Deploying Server..."
|
||||
docker stop $CONTAINER_NAME || true
|
||||
docker rm $CONTAINER_NAME || true
|
||||
|
||||
docker run -d \
|
||||
--name $CONTAINER_NAME \
|
||||
--network aiot-net \
|
||||
--restart always \
|
||||
-p 48080:48080 \
|
||||
"${IMAGE_NAME}:latest"
|
||||
|
||||
# 4. 构建并部署 IoT 网关 (Gateway)
|
||||
- name: Build & Deploy Gateway
|
||||
id: build-gateway
|
||||
env:
|
||||
IMAGE_NAME: 'aiot-gateway'
|
||||
CONTAINER_NAME: aiot-gateway
|
||||
run: |
|
||||
# --- 构建 ---
|
||||
SHORT_SHA=$(git log -1 --format='%h')
|
||||
FULL_IMAGE_NAME="${IMAGE_NAME}:${SHORT_SHA}"
|
||||
|
||||
echo "Building Gateway $FULL_IMAGE_NAME..."
|
||||
# 使用 Dockerfile.gateway
|
||||
docker build -t "$FULL_IMAGE_NAME" -f Dockerfile.gateway .
|
||||
docker tag "$FULL_IMAGE_NAME" "${IMAGE_NAME}:latest"
|
||||
|
||||
# --- 部署 ---
|
||||
echo "Deploying Gateway..."
|
||||
docker stop $CONTAINER_NAME || true
|
||||
docker rm $CONTAINER_NAME || true
|
||||
|
||||
# 覆盖 RPC 地址,使其指向 aiot-server 容器
|
||||
# 假设 application.yaml 中配置的是 viewshanghai.iot.gateway.rpc.url
|
||||
|
||||
docker run -d \
|
||||
--name $CONTAINER_NAME \
|
||||
--network aiot-net \
|
||||
--restart always \
|
||||
-p 1883:1883 \
|
||||
-p 8092:8092 \
|
||||
-e VIEWSHANGHAI_IOT_GATEWAY_RPC_URL="http://aiot-server:48080" \
|
||||
"${IMAGE_NAME}:latest"
|
||||
31
Dockerfile
Normal file
31
Dockerfile
Normal file
@@ -0,0 +1,31 @@
|
||||
# Build Stage
|
||||
FROM maven:3.9-eclipse-temurin-17 AS build
|
||||
WORKDIR /app
|
||||
|
||||
# 复制项目源码
|
||||
COPY . .
|
||||
|
||||
# 执行 Maven 构建
|
||||
# -B: Batch mode
|
||||
# clean package: 清理并打包
|
||||
# -DskipTests: 跳过测试
|
||||
# -Dmaven.javadoc.skip=true: 跳过 javadoc 生成
|
||||
RUN mvn -B clean package -DskipTests -Dmaven.javadoc.skip=true
|
||||
|
||||
# Run Stage
|
||||
FROM eclipse-temurin:17-jre
|
||||
WORKDIR /app
|
||||
|
||||
# 设置时区
|
||||
ENV TZ=Asia/Shanghai
|
||||
|
||||
# 从构建阶段复制 jar 包
|
||||
# 注意:根据 pom.xml 配置,viewshanghai-server 的 jar 包生成在 viewshanghai-server/target/ 目录下
|
||||
COPY --from=build /app/viewshanghai-server/target/viewshanghai-server.jar app.jar
|
||||
|
||||
# 暴露端口 (viewshanghai-server 默认端口为 48080)
|
||||
EXPOSE 48080
|
||||
|
||||
# 启动命令
|
||||
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Duser.timezone=Asia/Shanghai", "-jar", "app.jar"]
|
||||
|
||||
35
Dockerfile.gateway
Normal file
35
Dockerfile.gateway
Normal file
@@ -0,0 +1,35 @@
|
||||
# Build Stage
|
||||
FROM maven:3.9-eclipse-temurin-17 AS build
|
||||
WORKDIR /app
|
||||
|
||||
# 复制项目源码
|
||||
COPY . .
|
||||
|
||||
# 执行 Maven 构建
|
||||
# 这里的 install 是为了让 gateway 能引用到本地构建的 core/api 等模块依赖
|
||||
# -pl 指定只构建 gateway 及其依赖
|
||||
# -am (also make dependents) 构建依赖模块
|
||||
RUN mvn -B clean install -DskipTests -Dmaven.javadoc.skip=true
|
||||
|
||||
# Run Stage
|
||||
FROM eclipse-temurin:17-jre
|
||||
WORKDIR /app
|
||||
|
||||
# 设置时区
|
||||
ENV TZ=Asia/Shanghai
|
||||
|
||||
# 复制网关 jar 包
|
||||
# 注意路径:viewshanghai-module-iot/viewshanghai-module-iot-gateway/target/viewshanghai-module-iot-gateway.jar
|
||||
COPY --from=build /app/viewshanghai-module-iot/viewshanghai-module-iot-gateway/target/viewshanghai-module-iot-gateway.jar app.jar
|
||||
|
||||
# 暴露端口
|
||||
# MQTT
|
||||
EXPOSE 1883
|
||||
# HTTP Gateway
|
||||
EXPOSE 8092
|
||||
# TCP Gateway (Optional)
|
||||
EXPOSE 8091
|
||||
|
||||
# 启动命令
|
||||
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Duser.timezone=Asia/Shanghai", "-jar", "app.jar"]
|
||||
|
||||
@@ -47,7 +47,7 @@ spring:
|
||||
primary: master
|
||||
datasource:
|
||||
master:
|
||||
url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
|
||||
url: jdbc:mysql://124.221.55.225:3306/aiot-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例
|
||||
# url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例
|
||||
# url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例
|
||||
# url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例
|
||||
@@ -56,7 +56,7 @@ spring:
|
||||
# url: jdbc:kingbase8://127.0.0.1:54321/test # 人大金仓 KingbaseES 连接的示例
|
||||
# url: jdbc:postgresql://127.0.0.1:5432/postgres # OpenGauss 连接的示例
|
||||
username: root
|
||||
password: 123456
|
||||
password: 65p^VTPi9Qd+
|
||||
# username: sa # SQL Server 连接的示例
|
||||
# password: Viewshanghai@2024 # SQL Server 连接的示例
|
||||
# username: SYSDBA # DM 连接的示例
|
||||
@@ -65,11 +65,11 @@ spring:
|
||||
# password: Viewshanghai@2024 # OpenGauss 连接的示例
|
||||
slave: # 模拟从库,可根据自己需要修改
|
||||
lazy: true # 开启懒加载,保证启动速度
|
||||
url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
|
||||
url: jdbc:mysql://124.221.55.225:3306/aiot-platform?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
|
||||
username: root
|
||||
password: 123456
|
||||
password: 65p^VTPi9Qd+
|
||||
tdengine: # IoT 数据库(需要 IoT 物联网再开启噢!)
|
||||
url: jdbc:TAOS-WS://127.0.0.1:6041/ruoyi_vue_pro
|
||||
url: jdbc:TAOS-WS://124.221.55.225:6041/ruoyi_vue_pro
|
||||
driver-class-name: com.taosdata.jdbc.ws.WebSocketDriver
|
||||
username: root
|
||||
password: taosdata
|
||||
|
||||
Reference in New Issue
Block a user