GitLab Kubernetes Runner测试阶段iperf3二进制文件丢失问题
GitLab CI/CD K8s Runner下Deb包制品损坏排查方案
1. 先确认制品传递是否完整
构建阶段生成deb包后,立刻计算哈希值并输出到日志:
echo "Deb包SHA256哈希: $(sha256sum iperf3_*.deb)"
测试阶段下载制品后,执行同样的哈希计算命令,对比两个值是否一致。如果不一致,说明制品在上传/下载过程中损坏了。
2. 检查K8s Runner的存储同步问题
K8s Runner用网络存储(比如NFS)或临时卷时,可能出现文件未完全写入就上传制品的情况。试试:
- 构建阶段生成deb后加
sync命令强制刷盘,再上传制品 - 切换Runner的存储类,比如改用本地存储(单节点Runner的话),或者更换更可靠的分布式存储
3. 关闭GitLab制品的自动压缩
默认GitLab会对制品做gzip压缩,有可能和deb包本身的xz压缩冲突。修改.gitlab-ci.yml的artifacts配置:
artifacts: paths: - iperf3_*.deb compress: false # 关闭自动压缩
4. 排查测试阶段的解压/安装命令
- 用
dpkg-deb -x iperf3_*.deb ./test-dir手动解压,然后查看./test-dir下的完整目录结构,确认文件是否真的缺失 - 安装时不要忽略报错,执行
dpkg -i iperf3_*.deb后看完整日志,有没有权限问题或文件写入失败的提示 - 安装后执行
apt-get install -f修复依赖,再用dpkg -L iperf3查看包安装的文件列表
5. 核对构建/测试阶段的容器镜像
确认构建和测试用的是同版本的Ubuntu镜像(比如都是22.04),不同版本可能存在架构或路径兼容问题。另外检查Runner容器有没有SELinux/AppArmor这类安全限制,临时关闭试试。
附用户提供的.gitlab-ci.yml配置示例:
stages: - build - test build: stage: build image: ubuntu:22.04 script: - apt-get update && apt-get install -y build-essential devscripts - git clone https://github.com/esnet/iperf.git - cd iperf && ./configure && make && make deb - cp iperf3_*.deb ../ artifacts: paths: - iperf3_*.deb test: stage: test image: ubuntu:22.04 script: - apt-get update - dpkg -i iperf3_*.deb || apt-get install -f -y - which iperf3 # 此处无输出,找不到文件 - dpkg-deb -x iperf3_*.deb ./test - ls -la ./test/usr/bin/ # 此处目录为空
测试阶段流水线输出示例:
$ dpkg -i iperf3_3.13-1_amd64.deb Selecting previously unselected package iperf3. (Reading database ... 46255 files and directories currently installed.) Preparing to unpack iperf3_3.13-1_amd64.deb ... Unpacking iperf3 (3.13-1) ... Setting up iperf3 (3.13-1) ... $ which iperf3 $ dpkg-deb -x iperf3_3.13-1_amd64.deb ./test $ ls -la ./test/usr/bin/ total 8 drwxr-xr-x 2 root root 4096 Aug 28 10:00 . drwxr-xr-x 3 root root 4096 Aug 28 10:00 ..
内容的提问来源于stack exchange,提问作者mailman
相关产品推荐
相关产品推荐

