润色脚本格式,添加了install.sh脚本判断网络类型的功能
This commit is contained in:
@@ -14,9 +14,13 @@ jobs:
|
||||
- name: build Devstar Image
|
||||
run: |
|
||||
make devstar
|
||||
- name: Install Network Tools
|
||||
run: |
|
||||
echo "正在安装 ip 命令..."
|
||||
sudo apt-get update && sudo apt-get install -y iproute2
|
||||
- name: start DevStar Container
|
||||
run: |
|
||||
# 启动容器
|
||||
# 启动容器,这里的话需要预先的创建宿主机的对应文件夹
|
||||
LOGS=$(public/assets/install.sh start \
|
||||
--port=8082 \
|
||||
--ssh-port=2224 \
|
||||
@@ -30,7 +34,7 @@ jobs:
|
||||
make e2e-test TARGET_URL="$TARGET_URL"
|
||||
env:
|
||||
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
|
||||
- name: 4. Upload E2E Test Report
|
||||
- name: Upload E2E Test Report
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
|
||||
@@ -110,7 +110,20 @@ function start {
|
||||
mkdir -p $DATA_DIR
|
||||
sudo chown 1000:1000 $DATA_DIR
|
||||
sudo chmod 666 /var/run/docker.sock
|
||||
DOMAIN_NAME=$(hostname -I | awk '{print $1}')
|
||||
DOMAIN_NAME=$(ip route get 1 2>/dev/null | awk '{print $7; exit}')
|
||||
|
||||
if [[ -f "/.dockerenv" ]]; then
|
||||
if [[ -S "/var/run/docker.sock" ]] && command -v docker >/dev/null 2>&1; then
|
||||
if docker info 2>/dev/null | grep -q "Storage Driver: vfs"; then
|
||||
# DinD 环境 - 保持原来的容器IP
|
||||
: # 什么也不做,使用初始值
|
||||
else
|
||||
# DooD 环境 - 获取宿主机IP
|
||||
DOMAIN_NAME=$(ip route | grep default | awk '{print $3}' 2>/dev/null)
|
||||
fi
|
||||
fi
|
||||
# 普通容器环境保持原来的容器IP
|
||||
fi
|
||||
if [ ! -f "${DATA_DIR}/app.ini" ]; then
|
||||
echo "DOMAIN_NAME=$DOMAIN_NAME"
|
||||
else
|
||||
|
||||
@@ -3,40 +3,59 @@
|
||||
# 它会处理所有清理、权限、拉取和执行工作
|
||||
# 任何命令失败立即退出
|
||||
set -e
|
||||
|
||||
#基础配置与路径定义
|
||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||
PROJECT_ROOT=$( cd -- "$SCRIPT_DIR/../.." &> /dev/null && pwd )
|
||||
export CURRENT_UID=$(id -u)
|
||||
export CURRENT_GID=$(id -g)
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
echo "===== [1/3] 清理旧的测试环境... ====="
|
||||
|
||||
# 如果容器已存在,强制删除
|
||||
if [ "$(docker ps -aq -f name=e2e-test-runner-container)" ]; then
|
||||
docker rm -f e2e-test-runner-container
|
||||
fi
|
||||
|
||||
# 清理悬空镜像
|
||||
docker image prune -f
|
||||
|
||||
# 清理旧报告和数据,重建目录结构
|
||||
rm -rf ./tests/e2e/reports ./tests/e2e/test-data
|
||||
mkdir -p ./tests/e2e/reports/html ./tests/e2e/test-data/devstar_data
|
||||
chmod -R 777 ./tests/e2e/reports
|
||||
|
||||
#这里添加的代码是因为需要执行npm install,我们以当前用户启动测试容器,避免root权限冲突,所以先预构建文件夹,也作为缓存,缓存npm install.
|
||||
mkdir -p ./tests/e2e/node_modules
|
||||
chmod 777 ./tests/e2e/node_modules
|
||||
LOCK_FILE="./tests/e2e/package-lock.json"
|
||||
|
||||
# 确保 lock 文件存在且可写
|
||||
if [ ! -f "$LOCK_FILE" ]; then
|
||||
echo "{}" > "$LOCK_FILE"
|
||||
fi
|
||||
chmod 666 "$LOCK_FILE"
|
||||
|
||||
echo "===== [2/3] 准备环境变量... ====="
|
||||
|
||||
export DEVSTAR_URL=$TARGET_URL
|
||||
export E2E_MODE="url"
|
||||
|
||||
if [ -n "$CI" ] || [ "$CI" = "true" ]; then
|
||||
echo " [CI环境] 检测到 CI 环境,跳过 curl 安装状态检查..."
|
||||
export E2E_SKIP_INSTALL="false"
|
||||
else
|
||||
echo " 正在检查安装状态..."
|
||||
|
||||
PATH_TO_CHECK="/user/login"
|
||||
EXPECTED_CODE_IF_INSTALLED="200"
|
||||
PROBE_URL="${TARGET_URL}${PATH_TO_CHECK}"
|
||||
|
||||
# 使用 curl 获取 HTTP 状态码
|
||||
HTTP_CODE=$(curl -L -s -o /dev/null -w "%{http_code}" "$PROBE_URL")
|
||||
|
||||
if [ "$HTTP_CODE" -eq "$EXPECTED_CODE_IF_INSTALLED" ]; then
|
||||
echo " 探测结果: 目标已安装 (在 ${PROBE_URL} 收到 HTTP ${HTTP_CODE})."
|
||||
export E2E_SKIP_INSTALL="true"
|
||||
@@ -66,10 +85,14 @@ docker run -d --rm --init --ipc=host \
|
||||
mcr.microsoft.com/playwright:v1.53.2-jammy \
|
||||
tail -f /dev/null
|
||||
echo "容器已启动,正在使用 docker cp 注入代码..."
|
||||
|
||||
# 注入代码文件
|
||||
docker cp "$(pwd)/tests/e2e/package.json" e2e-test-runner-container:/app/package.json
|
||||
docker cp "$(pwd)/playwright.config.ts" e2e-test-runner-container:/app/playwright.config.ts
|
||||
docker cp "$(pwd)/tests/e2e/global-setup.ts" e2e-test-runner-container:/app/global-setup.ts
|
||||
docker cp "$(pwd)/tests/e2e/specs" e2e-test-runner-container:/app/specs
|
||||
|
||||
# 在容器内执行安装与测试
|
||||
docker exec e2e-test-runner-container bash -c "
|
||||
# 确保 node_modules 目录存在
|
||||
mkdir -p /app/node_modules
|
||||
@@ -82,7 +105,11 @@ docker exec e2e-test-runner-container bash -c "
|
||||
"
|
||||
EXIT_CODE=$?
|
||||
set -e
|
||||
|
||||
# 导出测试报告
|
||||
docker cp e2e-test-runner-container:/app/playwright-report/. tests/e2e/reports/html-report/
|
||||
|
||||
# 清理测试容器
|
||||
docker rm -f e2e-test-runner-container
|
||||
echo "========================================"
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
@@ -91,13 +118,9 @@ else
|
||||
echo "测试执行失败!"
|
||||
fi
|
||||
echo "========================================"
|
||||
|
||||
REPORT_DIR="./tests/e2e/reports/"
|
||||
if [ -f "$REPORT_DIR" ]; then
|
||||
echo "HTML 报告已生成: $REPORT_DIR"
|
||||
else
|
||||
echo "未检测到HTML报告 "
|
||||
echo "可能是测试运行中途崩溃,或者未生成报告。"
|
||||
echo "请检查日志或目录: $REPORT_DIR"
|
||||
fi
|
||||
echo "HTML 报告已生成: $REPORT_DIR"
|
||||
|
||||
echo ""
|
||||
exit $EXIT_CODE
|
||||
Reference in New Issue
Block a user