Compare commits

...

35 Commits

Author SHA1 Message Date
Shuai 37ae0740a9 更新 前后端/触发.txt
Build & Deploy Full Stack / build-and-deploy (push) Successful in 1m23s
2026-06-21 03:11:25 +08:00
Shuai 374fc651df 1 2026-06-21 03:10:32 +08:00
Shuai 96ca27dd62 更新 .gitea/workflows/test.yml 2026-06-21 03:06:07 +08:00
Shuai eee177db3a 更新 前后端/触发.txt
Test CI / test (push) Successful in 5s
2026-06-21 03:05:13 +08:00
Shuai 4eff5b38ea 修改
Test CI / test (push) Successful in 8s
2026-06-21 03:03:04 +08:00
Shuai 14fb14616c hh
Build & Deploy Full Stack / build-and-deploy (push) Failing after 6s
Test CI / test (push) Successful in 5s
2026-06-21 02:50:46 +08:00
Shuai 1a656c5160 Merge branch 'main' of https://gitea.shuai.uno/Shuai/CI-CD
Test CI / test (push) Successful in 5s
2026-06-21 02:49:20 +08:00
Shuai 7b4c7a2153 跑个完整 2026-06-21 02:48:59 +08:00
Shuai 4aad204326 更新 .gitea/workflows/test.yml
Test CI / test (push) Successful in 6s
2026-06-21 02:41:24 +08:00
Shuai f6e23bdfb7 添加 .gitea/workflows/test.yml
Test / build-and-deploy (push) Successful in 4s
2026-06-21 02:20:38 +08:00
Shuai 476e38c637 更新 .gitea/workflows/deploy-java.yml 2026-06-21 02:17:23 +08:00
Shuai 05d3d3f9a5 更新 .gitea/workflows/deploy-java.yml
Build & Deploy Spring Boot / build-and-deploy (push) Successful in 34s
2026-06-21 01:56:11 +08:00
Shuai 7c31f1a685 1
Build & Deploy Spring Boot / build-and-deploy (push) Failing after 1m6s
2026-06-21 01:50:00 +08:00
Shuai 5d141e856f 完成 2026-06-21 01:49:16 +08:00
Shuai ba44d5731f 调整
Build & Deploy Spring Boot / build-and-deploy (push) Failing after 44s
2026-06-21 01:44:33 +08:00
Shuai 33b8b18a4d 设置Java脚本
Build & Deploy Spring Boot / build-and-deploy (push) Failing after 1m9s
2026-06-21 01:40:01 +08:00
Shuai dc6d528ee9 12
Build & Deploy Spring Boot / build-and-deploy (push) Failing after 4m52s
2026-06-21 01:25:40 +08:00
Shuai 87408b0698 修改脚本 2026-06-21 01:22:31 +08:00
Shuai eac52188c9 后端测试
Build & Deploy Spring Boot / build-and-deploy (push) Failing after 6m35s
2026-06-21 00:57:17 +08:00
Shuai bb63532da3 测试
Build & Deploy Vue Frontend / build-and-deploy (push) Successful in 58s
2026-06-21 00:38:06 +08:00
Shuai 2bf7a4db0c npm
Build & Deploy Vue Frontend / build-and-deploy (push) Successful in 2m18s
2026-06-21 00:31:07 +08:00
Shuai 66d2348bcc 同步
Deploy Static Frontend / deploy (push) Successful in 6s
2026-06-21 00:25:27 +08:00
Shuai d4140f0a60 改一下镜像 2026-06-21 00:24:11 +08:00
Shuai 2b80f036f6 2
Deploy Static Frontend / deploy (push) Failing after 6s
2026-06-21 00:11:25 +08:00
Shuai 24ef6a5111 1 2026-06-21 00:10:15 +08:00
Shuai 2200394782 修改rsync
Deploy Static Frontend / deploy (push) Successful in 7s
2026-06-21 00:00:31 +08:00
Shuai 31e13a9d56 修改用户
Deploy Static Frontend / deploy (push) Failing after 12s
2026-06-20 22:34:27 +08:00
Shuai 433fc8c059 修改构建位置
Deploy Static Frontend / deploy (push) Failing after 7s
2026-06-20 22:32:48 +08:00
Shuai 515ab08a85 Merge branch 'main' of https://gitea.shuai.uno/Shuai/CI-CD 2026-06-20 22:18:52 +08:00
Shuai 01e714d05d 更新 前端/.gitea/workflows/deploy.yml 2026-06-20 22:13:22 +08:00
Shuai f274e91edf 123 2026-06-20 22:01:46 +08:00
Shuai 02c4f5d939 测试 2026-06-20 21:59:21 +08:00
Shuai 82974e568c 提交 2026-06-20 21:54:12 +08:00
Shuai 44dada4273 修改生效路径 2026-06-20 21:49:49 +08:00
Shuai 314fd70e33 test 2026-06-20 21:45:05 +08:00
20 changed files with 1795 additions and 53 deletions
+96
View File
@@ -0,0 +1,96 @@
name: Build & Deploy Full Stack
on:
push:
branches:
- main
# 🌟 优化:精准监听前端或后端目录的变动(修复了原先不匹配的“前后端/**”)
paths:
- 前后端/**
jobs:
build-and-deploy:
# 🌟 优化:切换为你刚构建好的纯国内环境镜像,天然享受极速
runs-on: ci-base-cn
steps:
- name: Checkout
uses: http://192.168.31.185:3002/actions/checkout@v4
# ===================== 1. 编译阶段 (并行/顺次执行) =====================
- name: Build Vue Frontend
run: |
cd 前端_npm
# 🌟 优化:镜像内已固化阿里源,直接无感安装构建
npm ci
npm run build
- name: Build Spring Boot Backend
run: |
cd 后端_java
# 🌟 优化:删掉了大段 cat << 'EOF' > settings.xml,一行命令直接起飞
mvn package -DskipTests
# ===================== 2. 统一准备 SSH 秘钥 =====================
- name: Setup SSH Key
run: |
mkdir -p ~/.ssh
chmod 700 ~/.ssh
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
# ===================== 3. 部署前端 =====================
- name: Deploy Frontend
run: |
set -e
SERVER_HOST="${{ secrets.SSH_HOST }}"
SERVER_USER="${{ secrets.SSH_USER }}"
SERVER_PORT="${{ secrets.SSH_PORT }}"
TARGET_DIR="${{ secrets.VUE_TARGET_DIR }}"
: ${SERVER_HOST:="192.168.31.185"}
: ${SERVER_USER:="deploy"}
: ${SERVER_PORT:="2222"}
: ${TARGET_DIR:="/data/apps/ci-cd/frontend_npm"}
echo "Deploying frontend to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
# 确保远程目录存在
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" "${SERVER_USER}@${SERVER_HOST}" "mkdir -p ${TARGET_DIR}"
# 同步前端静态资源(--delete 确保清除服务器旧的废弃代码)
rsync -rvz --delete \
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
前端_npm/dist/ \
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/"
# ===================== 4. 部署后端 =====================
- name: Deploy Backend
run: |
set -e
SERVER_HOST="${{ secrets.SSH_HOST }}"
SERVER_USER="${{ secrets.SSH_USER }}"
SERVER_PORT="${{ secrets.SSH_PORT }}"
TARGET_DIR="${{ secrets.BACKEND_TARGET_DIR }}"
: ${SERVER_HOST:="192.168.31.185"}
: ${SERVER_USER:="deploy"}
: ${SERVER_PORT:="2222"}
: ${TARGET_DIR:="/data/apps/ci-cd/backend"}
echo "Deploying backend to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
# 🌟 优化:合并连接,一次性创建目录并清理旧 Jar
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" "${SERVER_USER}@${SERVER_HOST}" "mkdir -p ${TARGET_DIR} && rm -f ${TARGET_DIR}/app.jar"
# 传输后端新包
rsync -rvz \
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
后端_java/target/*.jar \
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/app.jar"
# 🌟 优化:调用稳如泰山的 Heredoc (<< 'EOF') 结构重启服务,顶格编写 EOF 消除警告
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" "${SERVER_USER}@${SERVER_HOST}" /bin/bash << 'EOF'
cd /data/apps/ci-cd/backend || exit 1
pkill -u "$USER" -f 'app.jar' 2>/dev/null || true
sleep 1
nohup java -jar app.jar > app.log 2>&1 < /dev/null &
echo "Service restart instruction submitted successfully."
+100
View File
@@ -0,0 +1,100 @@
name: Build & Deploy Spring Boot
on:
push:
branches:
- main
paths:
- 后端_java/**
jobs:
build-and-deploy:
runs-on: ci-base
steps:
- name: Checkout
uses: http://192.168.31.185:3002/actions/checkout@v4
- name: Environment Info
run: |
java -version
mvn -version
- name: Maven Package
run: |
# 1. 动态注入阿里云镜像,加快依赖下载速度
mkdir -p ~/.m2
cat << 'EOF' > ~/.m2/settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
EOF
# 2. 编译打包
cd 后端_java
mvn package -DskipTests
- name: Deploy & Restart
run: |
set -e
SERVER_HOST="${{ secrets.SSH_HOST }}"
SERVER_USER="${{ secrets.SSH_USER }}"
SERVER_PORT="${{ secrets.SSH_PORT }}"
TARGET_DIR="${{ secrets.BACKEND_TARGET_DIR }}"
: ${SERVER_HOST:="192.168.31.185"}
: ${SERVER_USER:="deploy"}
: ${SERVER_PORT:="2222"}
: ${TARGET_DIR:="/data/apps/ci-cd/backend"}
echo "Deploy to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
mkdir -p ~/.ssh
chmod 700 ~/.ssh
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
# 🌟 优化 1:这一次 SSH 连接,把 mkdir、清理旧包 联合执行
echo "Preparing directory and cleaning old files..."
ssh -o StrictHostKeyChecking=accept-new \
-i ~/.ssh/id_ed25519 \
-p "${SERVER_PORT}" \
"${SERVER_USER}@${SERVER_HOST}" \
"mkdir -p ${TARGET_DIR} && rm -f ${TARGET_DIR}/app.jar"
# 2. 同步新 Jar 包
echo "Syncing jar file via rsync..."
rsync -rvz \
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
后端_java/target/*.jar \
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/app.jar"
# 🌟 优化 2:最后的重启会话,强制通过 bash 解释器执行,并加入绝对安全的自退机制
echo "Starting remote service..."
ssh -o StrictHostKeyChecking=accept-new \
-i ~/.ssh/id_ed25519 \
-p "${SERVER_PORT}" \
"${SERVER_USER}@${SERVER_HOST}" /bin/bash << 'EOF'
# 1. 严格切入目标目录
cd /data/apps/ci-cd/backend || exit 1
# 2. 精准杀进程,防止 -f 模糊匹配扩大化导致自杀
pkill -u "$USER" -f 'app.jar' 2>/dev/null || true
sleep 1
# 3. 强制在标准环境下后台启动
nohup java -jar app.jar > app.log 2>&1 < /dev/null &
# 4. 打印后立刻成功断开
echo "Service restart instruction submitted successfully."
+50
View File
@@ -0,0 +1,50 @@
# ==========================================
# 纯 HTML 前端 — rsync 增量部署
# ==========================================
name: Deploy Static Frontend
on:
push:
branches:
- main
paths:
- 前端/**
jobs:
deploy:
runs-on: ci-base
steps:
- name: Checkout
uses: http://192.168.31.185:3002/actions/checkout@v4
- name: Deploy via rsync
run: |
set -e
SERVER_HOST="${{ secrets.SSH_HOST }}"
SERVER_USER="${{ secrets.SSH_USER }}"
SERVER_PORT="${{ secrets.SSH_PORT }}"
TARGET_DIR="${{ secrets.TARGET_DIR }}"
: ${SERVER_HOST:="192.168.31.185"}
: ${SERVER_USER:="deploy"}
: ${SERVER_PORT:="2222"}
: ${TARGET_DIR:="/data/apps/ci-cd/frontend"}
echo "🌐 部署至 ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR} (端口: ${SERVER_PORT})"
mkdir -p ~/.ssh && chmod 700 ~/.ssh
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" \
"${SERVER_USER}@${SERVER_HOST}" "mkdir -p ${TARGET_DIR}"
echo "🚀 增量同步 前端/ ..."
rsync -rvz --delete \
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
前端/ \
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/"
echo "✨ 部署成功!"
+62
View File
@@ -0,0 +1,62 @@
name: Build & Deploy Vue Frontend
on:
push:
branches:
- main
paths:
- 前端_npm/**
jobs:
build-and-deploy:
runs-on: ci-base
steps:
- name: Checkout
uses: http://192.168.31.185:3002/actions/checkout@v4
- name: Environment Info
run: |
node -v
npm -v
- name: Install & Build
run: |
cd 前端_npm
npm ci
npm run build
- name: Deploy via rsync
run: |
set -e
SERVER_HOST="${{ secrets.SSH_HOST }}"
SERVER_USER="${{ secrets.SSH_USER }}"
SERVER_PORT="${{ secrets.SSH_PORT }}"
TARGET_DIR="${{ secrets.VUE_TARGET_DIR }}"
: ${SERVER_HOST:="192.168.31.185"}
: ${SERVER_USER:="deploy"}
: ${SERVER_PORT:="2222"}
: ${TARGET_DIR:="/data/apps/ci-cd/frontend_npm"}
echo "Deploy to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
mkdir -p ~/.ssh
chmod 700 ~/.ssh
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh -o StrictHostKeyChecking=accept-new \
-i ~/.ssh/id_ed25519 \
-p "${SERVER_PORT}" \
"${SERVER_USER}@${SERVER_HOST}" \
"mkdir -p ${TARGET_DIR}"
rsync -rvz --delete \
-e "ssh -o StrictHostKeyChecking=accept-new -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
前端_npm/dist/ \
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/"
echo "Deploy success"
+23
View File
@@ -0,0 +1,23 @@
name: Test CI
on:
push:
branches:
- main1
jobs:
test:
runs-on: ci-base-cn
steps:
- uses: http://192.168.31.185:3002/actions/checkout@v4
- name: Environment
run: |
java -version
mvn -version
node -v
npm -v
git --version
rsync --version
docker --version
+1
View File
@@ -0,0 +1 @@
124assfdsf
-52
View File
@@ -1,52 +0,0 @@
name: Deploy Static Frontend
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ci-base
steps:
- name: Checkout code
uses: http://192.168.31.185:3002/actions/checkout@v4
- name: Deploy via RSYNC
run: |
set -e
SERVER_HOST="${{ secrets.SSH_HOST }}"
SERVER_USER="${{ secrets.SSH_USER }}"
SERVER_PORT="${{ secrets.SSH_PORT }}"
TARGET_DIR="${{ secrets.TARGET_DIR }}"
: ${SERVER_HOST:="192.168.31.185"}
: ${SERVER_USER:="shuai"}
: ${SERVER_PORT:="2222"}
: ${TARGET_DIR:="/data/apps/ci-cd/frontend"}
echo "Deploy to ${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}"
mkdir -p ~/.ssh
chmod 700 ~/.ssh
printf '%s\n' "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -p "${SERVER_PORT}" -H "${SERVER_HOST}" >> ~/.ssh/known_hosts
ssh -i ~/.ssh/id_ed25519 -p "${SERVER_PORT}" \
"${SERVER_USER}@${SERVER_HOST}" \
"mkdir -p ${TARGET_DIR}"
rsync -avz --delete \
-e "ssh -i ~/.ssh/id_ed25519 -p ${SERVER_PORT}" \
--exclude ".git" \
--exclude ".gitea" \
./ \
"${SERVER_USER}@${SERVER_HOST}:${TARGET_DIR}/"
echo "Deploy success"
+1 -1
View File
@@ -316,4 +316,4 @@ overlay.addEventListener('click', () => {
});
</script>
</body>
</html>
</html>
+3
View File
@@ -0,0 +1,3 @@
node_modules/
dist/
.vite/
+12
View File
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vue App</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>
+1327
View File
File diff suppressed because it is too large Load Diff
+18
View File
@@ -0,0 +1,18 @@
{
"name": "vue-frontend",
"private": true,
"version": "1.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"vue": "^3.5.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.1.0",
"vite": "^6.0.0"
}
}
+14
View File
@@ -0,0 +1,14 @@
<template>
<div class="app">
<h1>{{ message }}</h1>
</div>
</template>
<script setup>
import { ref } from 'vue'
const message = ref('Hello from Vue 3! 再次测试')
</script>
<style>
.app { text-align: center; margin-top: 100px; font-family: Arial, sans-serif; }
</style>
+4
View File
@@ -0,0 +1,4 @@
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')
+10
View File
@@ -0,0 +1,10 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
plugins: [vue()],
server: {
host: '0.0.0.0',
port: 5173
}
})
+5
View File
@@ -0,0 +1,5 @@
target/
*.jar
*.class
.idea/
*.iml
+39
View File
@@ -0,0 +1,39 @@
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.0</version>
<relativePath/>
</parent>
<groupId>com.app</groupId>
<artifactId>backend</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,11 @@
package com.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@@ -0,0 +1,13 @@
package com.app.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/api/hello")
public String hello() {
return "Hello from Spring Boot! ";
}
}
@@ -0,0 +1,6 @@
server:
port: 8990
spring:
application:
name: backend