增加了可选的容器网络模式,修改ci脚本尝试修复devstar启动失败的问题
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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"]
|
||||
|
||||
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user