利用LAVA在docker中搭建自动化测试环境

  • 在ubuntu22.04主机上利用LAVA搭建docker自动化测试环境

1.准备电脑环境

  1. 更新源

    sudo apt update

  2. 安装必要的工具

    sudo apt install -y git docker.io docker-compose

  3. 给当前用户权限“sudo”

    sudo usermod -aG docker $USER

  4. 让新权限生效,“刷新”

    newgrp docker

验证:

docker –version
Docker version 27.5.1, build 27.5.1-0ubuntu3~22.04.2
docker-compose version
docker-compose version 1.29.2, build unknown
docker-py version: 5.0.3
CPython version: 3.10.12
OpenSSL version: OpenSSL 3.0.2 15 Mar 2022

2. 获取LAVA配置

git clone https://gitlab.com/lava/pkg/ansible.git
git clone https://gitlab.com/lava/pkg/docker-compose.git

3. 启动LAVA服务

拉取镜像

docker-compose pull
后台启动
docker-compose up -d

  • 端口冲突
    • 启动过程中报错:
      • ERROR: for lava-dispatcher-nfs … listen tcp4 0.0.0.0:111: bind: address already in use
      • ERROR: for lava-dispatcher-tftpd … listen udp4 0.0.0.0:69: bind: address already in use
    • 很明显就是和本机的nfs,tftp冲突了,lsof命令查看后关闭本机的服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
> sudo lsof -i :111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd 1 root 67u IPv4 11024 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 71u IPv4 7197 0t0 UDP *:sunrpc
systemd 1 root 76u IPv6 2674 0t0 TCP *:sunrpc (LISTEN)
systemd 1 root 77u IPv6 3879 0t0 UDP *:sunrpc
rpcbind 907 _rpc 4u IPv4 11024 0t0 TCP *:sunrpc (LISTEN)
rpcbind 907 _rpc 5u IPv4 7197 0t0 UDP *:sunrpc
rpcbind 907 _rpc 6u IPv6 2674 0t0 TCP *:sunrpc (LISTEN)
rpcbind 907 _rpc 7u IPv6 3879 0t0 UDP *:sunrpc
> sudo lsof -i :69
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
in.tftpd 2022 root 4u IPv4 18973 0t0 UDP *:tftp
in.tftpd 2022 root 5u IPv6 18974 0t0 UDP *:tftp

关闭并禁止重启

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
> sudo systemctl stop rpcbind.service
[sudo] goko 的密码:
Warning: Stopping rpcbind.service, but it can still be activated by:
rpcbind.socket
> sudo systemctl stop rpcbind.socket

> sudo systemctl stop rpcbind.service
> sudo systemctl disable rpcbind.service

Synchronizing state of rpcbind.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable rpcbind
Removed /etc/systemd/system/multi-user.target.wants/rpcbind.service.
Removed /etc/systemd/system/sockets.target.wants/rpcbind.socket.
> sudo systemctl disable rpcbind.socket

> sudo lsof -i :111
> sudo systemctl stop tftpd-hpa.service
> sudo systemctl disable tftpd-hpa.service

tftpd-hpa.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable tftpd-hpa
> sudo lsof -i :69
>

清理并重启docker-compose

docker-compose down
docker-compose up -d
我这里有显示多了2049在被占用,于是就尝试关闭正在运行的NFS服务

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
> sudo systemctl status nfs-server.service
[sudo] goko 的密码:
● nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enab>
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: active (exited) since Sat 2025-09-06 08:47:16 CST; 2 weeks 0 days ago
Main PID: 2011 (code=exited, status=0/SUCCESS)
CPU: 8ms

9月 06 08:47:16 goko-w systemd[1]: Starting NFS server and services...
9月 06 08:47:16 goko-w systemd[1]: Finished NFS server and services.
> sudo systemctl stop nfs-server.service

> sudo systemctl disable nfs-server.service

Removed /etc/systemd/system/multi-user.target.wants/nfs-server.service.
> sudo systemctl status nfs-kernel-server.service
○ nfs-server.service - NFS server and services
Loaded: loaded (/lib/systemd/system/nfs-server.service; disabled; vendor preset: ena>
Drop-In: /run/systemd/generator/nfs-server.service.d
└─order-with-mounts.conf
Active: inactive (dead) since Sat 2025-09-20 22:58:39 CST; 21s ago
Main PID: 2011 (code=exited, status=0/SUCCESS)
CPU: 3ms

9月 06 08:47:16 goko-w systemd[1]: Starting NFS server and services...
9月 06 08:47:16 goko-w systemd[1]: Finished NFS server and services.
9月 20 22:58:39 goko-w systemd[1]: Stopping NFS server and services...
9月 20 22:58:39 goko-w systemd[1]: nfs-server.service: Deactivated successfully.
9月 20 22:58:39 goko-w systemd[1]: Stopped NFS server and services.

继续尝试

docker-compose down
docker-compose up -d
成功啦:

1
2
3
4
5
6
7
8
9
10
11
12
13
> docker-compose up -d
Creating network "docker-compose_default" with the default driver
Creating docker-compose_lava-dispatcher-tftpd_1 ... done
Creating docker-compose_lava-coordinator_1 ... done
Creating docker-compose_lava-dispatcher-webserver_1 ... done
Creating docker-compose_db_1 ... done
Creating docker-compose_lava-publisher_1 ... done
Creating docker-compose_lava-dispatcher-ser2net_1 ... done
Creating docker-compose_lava-dispatcher-nfs_1 ... done
Creating docker-compose_apache2_1 ... done
Creating docker-compose_lava-scheduler_1 ... done
Creating docker-compose_lava-dispatcher_1 ... done
Creating docker-compose_lava-server_1 ... done

此时我们就可以打开浏览器访问:http://localhost 看到LAVA界面了

4. 配置LAVA

进入lava-server容器中,调用管理工具,创建一个admin用户,输入用户名邮箱和密码

docker exec -it docker-compose_lava-server_1 lava-server manage createsuperuser
然后就可以在LAVA Web界面用这个帐号进行登陆(我这里用户名为goko)

登陆后点击用户名,进入“Administration”管理后台
把 dispatcher 节点登记进系统,让调度器知道有这么一个“工人”可以帮忙跑任务。

  • 找到 Workers → Add
  • 新建一个 Worker:
  • Name:必须填 lava-dispatcher(这是固定的名字,LAVA 的调度端会根据它来找 worker)。
  • 其他字段可以保持默认。
    保存之后,页面会自动生成一个 Auth Token, 复制这个 token 放到 dispatcher 端的配置里
  • docker exec -it docker-compose_lava-dispatcher_1 bash
  • apt update
  • apt install nano
  • nano /etc/lava-dispatcher/lava-worker
    • 将 # TOKEN=”–token
    • 改为 TOKEN=”–token abcdefghijklmnopqrst”
      但是保存时发现只读,mount查看发现这个路径是一个挂载点,所以要退出修改挂载文件
1
2
3
4
5
6
root@worker0:/# nano /etc/lava-dispatcher/lava-worker
root@worker0:/# mount | grep lava-dispatcher
/dev/nvme0n1p4 on /etc/lava-dispatcher/lava-worker type ext4 (ro,relatime)
root@worker0:/# ls -l /etc/lava-dispatcher/lava-worker
-rw-rw-r-- 1 1000 1000 409 Sep 20 08:11 /etc/lava-dispatcher/lava-worker
root@worker0:/# exit

找到文件然后和刚才一眼修改token

find ./ -name lava-worker
./overlays/etc/lava-dispatcher/lava-worker
nvim ./overlays/etc/lava-dispatcher/lava-worker
保存并重新启动
docker-compose restart lava-dispatcher

新增qemu的设备类型

docker-compose exec docker-compose_lava-server_1 lava-server manage device-types add qemu

详细:qemu01,归lava-dispatcher管理

docker-compose exec docker-compose_lava-server_1 lava-server manage devices add –device-type qemu –worker lava-dispatcher qemu01

状态设为“待命”,随时可以接活

docker-compose exec docker-compose_lava-server_1 lava-server manage devices update –health UNKNOWN qemu01

5. 配置CI流程

sudo apt install lavacli git build-essential -y
sudo snap install yq

添加用户 ci-bot 执行CI流程

docker exec -it docker-compose_lava-server_1 lava-server manage users add ci-bot
在LAVA Web界面中add一个token,用户就是刚添加的ci-bot
然后配置ci-bot的token
lavacli identities add
–uri http://localhost/RPC2/
–username ci-bot
–token < Token >
default

利用LAVA在docker中搭建自动化测试环境

https://goko-son626.github.io/post/kernelci.html

作者

GoKo Mell

发布于

2025-09-19

更新于

2025-10-31

许可协议

评论

:D 一言句子获取中...