增加了可选的容器网络模式,修改ci脚本尝试修复devstar启动失败的问题

This commit is contained in:
jiaojm
2025-11-19 20:13:48 +08:00
repo.diff.parent 3d678a982b
repo.diff.commit b80c358fda
repo.diff.stats_desc%!(EXTRA int=3, int=54, int=11)

repo.diff.view_file

@@ -10,9 +10,13 @@ jobs:
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Make Devstar
run : |
make devstar
- name: 1.5 Clean Up Old Data & Containers
run: |
echo "🧹 正在清理旧环境..."
# 2. 【关键】强制删除旧的数据目录
# 必须用 sudo因为里面可能有 root 创建的“顽固”文件
sudo rm -rf ~/devstar_dat
- name: 2. Deploy DevStar Container
run: |
@@ -25,18 +29,56 @@ jobs:
mkdir -p tests/e2e/reports/
sudo chmod -R 777 tests/e2e/reports/
- name: 2.8. Wait for DevStar to be Ready
- name: 2.8. Get IP & Wait for DevStar (Health Check)
run: |
echo "===== 2.8. 正在等待 DevStar (Gitea) 启动... ====="
echo "强制等待 60 秒..."
sleep 40
echo "等待完成,假设 DevStar 已就绪。"
echo "===== 2.8. 获取 DevStar IP 并等待就绪... ====="
CONTAINER_NAME=$(docker ps -a --filter "ancestor=devstar-studio:latest" --format "{{.Names}}" | head -n 1)
echo "Found Container Name: $CONTAINER_NAME"
# 2. 获取容器内部 IP (例如 172.17.0.2)
DEVSTAR_IP=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER_NAME)
echo "Found DevStar Internal IP: $DEVSTAR_IP"
TARGET_URL="http://$DEVSTAR_IP:3000"
echo "Target URL set to: $TARGET_URL"
# 4. 循环探测 (Health Check)
MAX_RETRIES=20
# 探测登录页,确保服务真的活了
HEALTH_CHECK_URL="${TARGET_URL}"
count=0
while [ $count -lt $MAX_RETRIES ]; do
# -s:静默 -o:不输出内容 -w:只输出状态码
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$HEALTH_CHECK_URL" || true)
if [ "$HTTP_CODE" = "200" ]; then
echo "✅ [Attempt $count] 服务已就绪: $TARGET_URL (HTTP 200)"
exit 0
fi
echo "⏳ [Attempt $count] 等待服务就绪... 当前状态码: $HTTP_CODE"
sleep 2
count=$((count + 1))
done
- name: 3. Run E2E Tests (and allow failure)
run: |
echo "Starting E2E tests against: ${{ env.TARGET_URL }}"
# 这里传入刚才获取到的 IP 地址
make e2e-test TARGET_URL="${{ env.TARGET_URL }}" || true
env:
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
# 务必保留 host 模式,否则测试容器无法访问 172.x.x.x 的 IP
E2E_NETWORK_MODE: "host"
- name: 3. Run E2E Tests (and allow failure)
run: |
make e2e-test TARGET_URL="http://host.docker.internal:80" || true
make e2e-test TARGET_URL="http://172.19.0.2:3000" || true
env:
GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: "true"
E2E_NETWORK_MODE: "host"
- name: 3.5. Rescue Screenshot from Container
if: always()

repo.diff.view_file

@@ -18,8 +18,8 @@ RUN npm install
# 5. 复制所有的测试代码到容器中
# (包括 playwright.config.ts, global-setup.ts 和 specs/ 目录)
COPY tests/e2e/global-setup.ts ./tests/e2e/
COPY tests/e2e/specs/ ./tests/e2e/specs/
COPY tests/e2e/global-setup.ts ./
COPY tests/e2e/specs/ ./specs/
# 6. 默认命令
CMD ["npx", "playwright", "test"]

repo.diff.view_file

@@ -27,6 +27,7 @@ services:
dockerfile: tests/e2e/Dockerfile
# 等待 devstar 的 "healthcheck" 通过后,才启动
user: "${CURRENT_UID}:${CURRENT_GID}"
network_mode: "${E2E_NETWORK_MODE:-bridge}"
environment:
- DEVSTAR_URL=${DEVSTAR_URL}
- E2E_SKIP_INSTALL=${E2E_SKIP_INSTALL}