Skip to content

bugfix: fix e2e image problem #196

bugfix: fix e2e image problem

bugfix: fix e2e image problem #196

Workflow file for this run

name: "Seata E2E Test"
on: [ push,pull_request ]
jobs:
run_e2e:
name: Run E2E Test ${{ matrix.java }}, ${{ matrix.os }}
runs-on: ${{ matrix.os }}
env:
DEBIAN_FRONTEND: noninteractive
strategy:
matrix:
os: [ ubuntu-latest ]
java: [ 8, 11 ]
fail-fast: false
max-parallel: 2
steps:
- name: Uninstall Docker Compose v2
run: sudo rm -f /usr/local/bin/docker-compose
- name: Install Docker Compose v1
run: |
DOCKER_COMPOSE_VERSION=1.29.2
sudo curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
- name: Verify Docker Compose v1 installation
run: docker-compose --version
# ========== 新增步骤1:Docker环境全量检查(关键) ==========
- name: Check Docker environment (debug)
run: |
# 检查Docker服务状态
sudo systemctl status docker || true
# 检查Docker版本和Compose版本
docker --version
docker-compose --version
# 检查磁盘空间(GitHub Runner空间不足会导致镜像/容器创建失败)
df -h
# 检查已有容器/镜像(清理残留)
docker ps -a
docker images
# 检查端口占用(排查Seata常用端口8091/7091等)
sudo lsof -i :8091 || true
sudo lsof -i :7091 || true
- name: Check out code into
uses: actions/checkout@v3
- name: Clone skywalking e2e repository
run: git clone https://github.com/apache/skywalking-infra-e2e.git skywalking-infra-e2e
- name: Set up Go 1.18
uses: actions/setup-go@v4
with:
go-version: 1.18
id: go
- name: Build e2e framework (use skywalking-infra-e2e pr137)
run: |
cd skywalking-infra-e2e && git checkout 1485ae03f0ad90496ad7626a5ae4a6a73a1f6296 && make linux
- name: Add script directory to PATH
run: |
cd skywalking-infra-e2e/bin/linux
echo "export PATH=$PATH:$(pwd)" >> $GITHUB_PATH
chmod 777 e2e
cp e2e /usr/local/bin
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: ${{ matrix.java }}
- name: prepare e2e tests
run: |
cd e2e-test/scripts && sh prepare-test.sh
# ========== 新增:打印prepare阶段的Docker状态 ==========
- name: check docker resources after prepare-test.sh
run: |
echo "===== After prepare-test.sh: Docker containers status ====="
docker ps -a
echo "===== After prepare-test.sh: Docker images status ====="
docker images
# ========== 新增关键步骤:手动执行docker-compose up -d(抓原始错误) ==========
- name: Manual run docker-compose up -d (debug core error)
run: |
cd e2e-test/scripts
# 1. 先检查compose文件语法(关键!语法错会直接exit 1)
echo "===== Check docker-compose.yml syntax ====="
docker-compose config --verbose
# 2. 手动执行up -d,输出最详细日志,强制捕获错误
echo "===== Run docker-compose up -d with debug ====="
docker-compose up -d --verbose 2>&1 | tee docker-compose-up-debug.log
# 3. 检查执行结果,打印错误码
COMPOSE_EXIT_CODE=${PIPESTATUS[0]}
echo "===== Docker-compose exit code: $COMPOSE_EXIT_CODE ====="
# 4. 如果失败,立即打印容器状态和日志
if [ $COMPOSE_EXIT_CODE -ne 0 ]; then
echo "===== Docker containers status after failed up ====="
docker ps -a
echo "===== Docker-compose logs after failed up ====="
docker-compose logs
# 强制退出,让步骤失败(方便看日志)
exit $COMPOSE_EXIT_CODE
fi
# ========== 原有e2e测试步骤(保留,用于对比) ==========
- name: run e2e tests (auto answer [yN] prompt)
id: e2e_test
run: |
set -euo pipefail
cd e2e-test/scripts
# 核心:用echo y | 自动回答[yN]的交互提示(关键!)
# 原理:把y作为输入,直接传给test-run.sh执行的进程,绕过手动输入
sh test-run.sh 2>&1 | tee e2e-test-log.txt
# 捕获真实退出码(排除echo的干扰)
TEST_EXIT_CODE=${PIPESTATUS[1]} # 注意:这里从0改成1,因为管道是echo y | sh ...,PIPESTATUS[1]才是sh的退出码
exit $TEST_EXIT_CODE
# ========== 核心修正2:日志收集改为if: always()(无论成败都执行) ==========
- name: Collect debug logs
if: always() # 替代failure(),无论上一步成功/失败都执行
run: |
echo "===== Docker version info ====="
docker --version
docker-compose --version
echo "===== All Docker containers status ====="
docker ps -a
echo "===== Docker compose logs ====="
# 进入e2e脚本目录,执行docker-compose logs(适配你的compose文件路径)
cd e2e-test/scripts
docker-compose logs || true
echo "===== Seata container logs (if exists) ====="
# 查找Seata相关容器并打印日志(适配容器名)
SEATA_CONTAINER=$(docker ps -a | grep seata-server | awk '{print $1}')
if [ -n "$SEATA_CONTAINER" ]; then
docker logs $SEATA_CONTAINER || true
fi
echo "===== E2E test script logs ====="
cat e2e-test-log.txt || true
echo "===== Port usage ====="
sudo lsof -i -P -n | grep LISTEN || true
# ========== 核心修正3:日志上传也改为if: always() ==========
- name: Upload debug logs
if: always() # 无论成败都上传日志(失败时必传,成功时可选)
uses: actions/upload-artifact@v4
with:
name: e2e-debug-logs-${{ matrix.java }}
path: |
e2e-test/scripts/e2e-test-log.txt
/var/log/docker.log || true
# ========== 核心修正4:手动标记Job失败(如果测试步骤失败) ==========
- name: Mark job as failed if test failed
if: steps.e2e_test.outcome == 'failure'
run: |
echo "E2E test failed, marking job as failed"
exit 1