-
Notifications
You must be signed in to change notification settings - Fork 2k
208 lines (184 loc) · 8.2 KB
/
Copy pathE2E.yml
File metadata and controls
208 lines (184 loc) · 8.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "Seata E2E Test"
on: [ push,pull_request ]
jobs:
run_e2e:
name: Run E2E Test (Build Arch${{ matrix.os }},JDK${{ matrix.build_jdk }}, Docker JDK${{ matrix.docker_jdk }})
runs-on: ${{ matrix.os }}
env:
DEBIAN_FRONTEND: noninteractive
strategy:
matrix:
os: [ ubuntu-latest, ubuntu-24.04-arm]
# Build JDK version - used for Maven compilation
build_jdk: [ 8, 11, 17 ]
# Docker JDK version - used in Docker images for runtime
docker_jdk: [ 8, 11, 17 ]
# Exclude some combinations to reduce test time
exclude:
# When building with JDK 8, skip testing with JDK 17
- build_jdk: 8
docker_jdk: 17
- build_jdk: 8
docker_jdk: 11
- build_jdk: 11
docker_jdk: 8
- build_jdk: 11
docker_jdk: 17
- build_jdk: 17
docker_jdk: 8
- build_jdk: 17
docker_jdk: 11
fail-fast: false
max-parallel: 3
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
DOWNLOAD_URL="https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m)"
echo "download url: ${DOWNLOAD_URL}" >> $GITHUB_STEP_SUMMARY
sudo curl -L ${DOWNLOAD_URL} -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 v1.3.0)
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.build_jdk }} for build
uses: actions/setup-java@v3
with:
distribution: 'zulu'
java-version: ${{ matrix.build_jdk }}
- name: Set Docker JDK base image
run: |
echo "=========================================="
echo "E2E Test Configuration:"
echo "Build JDK Version: ${{ matrix.build_jdk }}"
echo "Docker Runtime JDK Version: ${{ matrix.docker_jdk }}"
echo "=========================================="
echo "E2E_JDK_BASE_IMAGE=${{ matrix.docker_jdk }}" >> $GITHUB_ENV
- 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.build_jdk }}
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