This commit is contained in:
zydi 2025-12-19 08:37:49 +00:00
parent 8ce26cf89f
commit 5c0bbd4b1a
2 changed files with 115 additions and 4 deletions

View File

@ -5,23 +5,44 @@
## 可直接复制使用的模板 ## 可直接复制使用的模板
- **构建镜像工作流模板**`build-images.yml` - **构建镜像工作流模板**`build-images.yml`
- 作用:用于在 `<分支>` 分支上构建 Docker 镜像。 - 作用:用于在 `<自定义分支>` 分支上构建 Docker 镜像。
- 触发条件: - 触发条件:
- 推送到 `<分支>` 分支,并且改动包含 `Dockerfile*`、`requirements.txt` 或 `.gitea/workflows/build-images.yml` - 推送到 `<自定义分支>` 分支,并且改动包含 `Dockerfile*`、`requirements.txt` 或 `.gitea/workflows/build-images.yml`
- 手动触发 (`workflow_dispatch`) - 手动触发 (`workflow_dispatch`)
- 使用方式: - 使用方式:
1. 复制该文件到目标项目的 `.gitea/workflows/build-images.yml`(或对应 CI 目录)。 1. 复制该文件到目标项目的 `.gitea/workflows/build-images.yml`(或对应 CI 目录)。
2. 根据项目实际情况修改其中的 `<image_name>`、`<version>` 以及 `Dockerfile` 路径等参数。 2. 根据项目实际情况修改其中的 `<image_name>`、`<version>` 以及 `Dockerfile` 路径等参数。
- **Docker 部署工作流模板**`deploy-docker.yml` - **Docker 部署工作流模板**`deploy-docker.yml`
- 作用:在 `<分支>` 分支上,通过 `docker compose` 部署服务。 - 作用:在 `<自定义分支>` 分支上,通过 `docker compose` 部署服务。
- 触发条件: - 触发条件:
- 推送到 `<分支>` 分支 - 推送到 `<自定义分支>` 分支
- 手动触发 (`workflow_dispatch`) - 手动触发 (`workflow_dispatch`)
- 使用方式: - 使用方式:
1. 复制该文件到目标项目的 `.gitea/workflows/deploy-docker.yml`(或对应 CI 目录)。 1. 复制该文件到目标项目的 `.gitea/workflows/deploy-docker.yml`(或对应 CI 目录)。
2. 确认项目根目录存在 `docker-compose.yml`,并根据需要调整步骤中的命令。 2. 确认项目根目录存在 `docker-compose.yml`,并根据需要调整步骤中的命令。
- **API 健康检查工作流模板**`e2e-tests.yml`
- 作用:对后端各 API 服务的 `/health` 接口进行健康检查,可支持**多个 IP / 域名**(多个环境)。不再检查前端页面。
- 触发条件:
- 推送到 `<自定义分支>`(或你自定义的)分支
- 手动触发 (`workflow_dispatch`)
- 使用方式:
1. 复制该文件到目标项目的 `.gitea/workflows/e2e-tests.yml`(或对应 CI 目录)。
2. 根据实际环境修改 `jobs.e2e.strategy.matrix.target` 中的配置即可复用,例如:
```yaml
strategy:
fail-fast: false
matrix:
target:
- name: env-local
base_url: http://127.0.0.1
- name: env-remote
base_url: http://10.0.0.1
```
3. 如果你的服务端口与模板中的默认值不同,可在 `services` 变量里调整 `name:port` 列表,例如:`auth:5710`、`project:5711` 等。
4. 如需调整重试次数、间隔时间或检查路径,可在对应 `curl` 循环处按需修改脚本逻辑。
## 其他文件/目录 ## 其他文件/目录
`actions/`、`docs/` 等其他文件或目录仅作内部使用或扩展示例,对实际在项目中使用上述两个模板不是必需的,你可以忽略它们。 `actions/`、`docs/` 等其他文件或目录仅作内部使用或扩展示例,对实际在项目中使用上述两个模板不是必需的,你可以忽略它们。

90
e2e-tests.yml Normal file
View File

@ -0,0 +1,90 @@
name: End-to-End Tests
on:
# 默认触发条件,可以在复制到具体仓库后按需调整
push:
branches:
- offline
workflow_dispatch:
jobs:
e2e:
runs-on: ubuntu-latest
strategy:
# 多个 IP / 域名 组合时,互不影响
fail-fast: false
matrix:
# 在这里配置要检查的环境,只需要改 base_url 即可复用
target:
- name: offline-145 # 仅用于日志标识
base_url: http://127.0.0.1
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: offline
fetch-depth: 0
- name: Check API services (${{ matrix.target.name }})
env:
BASE_URL: ${{ matrix.target.base_url }}
run: |
echo "当前检查环境:${BASE_URL}"
echo "====== 开始检查各 API 服务 /health ======"
services="\
service-name:5710 \
service-name:5711 \
"
failed_services=""
api_failed=0
for item in $services; do
name="${item%%:*}"
port="${item##*:}"
echo ""
echo "------ 检查服务 ${name} (端口 ${port}) /health ------"
success=0
for i in {1..10}; do
if curl -fsS "${BASE_URL}:${port}/health" > /dev/null; then
success=1
break
fi
echo "第 ${i} 次重试,等待 5 秒..."
sleep 5
done
if [ "${success}" -ne 1 ]; then
echo "✗ 服务 ${name} /health 检查失败"
failed_services="${failed_services} ${name}:${port}"
else
echo "✓ 服务 ${name} /health 正常"
fi
done
if [ -n "${failed_services}" ]; then
echo ""
echo "✗ 以下服务健康检查失败:"
for s in ${failed_services}; do
echo " - ${s}"
done
api_failed=1
else
echo ""
echo "====== 所有 API 服务健康检查通过 ======"
fi
if [ "${api_failed}" -ne 0 ]; then
echo ""
echo "✗ API /health 检查存在失败,详见上方日志"
exit 1
fi
echo ""
echo "✓ 所有 API /health 检查通过"