Selenoid is handy tool to manage test runner with minimum efforts.
As it uses own dependent containers by itself, need to maintain single Selenoid run per build agent.
docker-compose.yml
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
| services:
e2e-test-runner:
networks:
selenoid: null
depends_on:
- selenoid
build:
context: .
dockerfile: end-to-end/Dockerfile
environment:
- BUILDKITE
- NEXUS_USERNAME
- NEXUS_PASSWORD
- PAYLATER_VERSION
- CHROME_PROFILE_DIR=/tmp/chrome_profile
- SEL_JUP_SELENIUM_SERVER_URL=http://selenoid:4444/wd/hub/
- GRADLE_USER_HOME=/app/.gradle
volumes:
- $PWD/end-to-end/build/reports:/app/end-to-end/build/reports
- $PWD/build/reports:/app/build/reports
- /var/run/docker.sock:/var/run/docker.sock
selenoid:
image: aerokube/selenoid:latest-release
networks:
selenoid: null
volumes:
- "/tmp/selenoid/video:/opt/selenoid/video:delegated"
- "/tmp/selenoid/logs:/opt/selenoid/logs:delegated"
- "$PWD/end-to-end/selenoid:/etc/selenoid:delegated"
- "/var/run/docker.sock:/var/run/docker.sock"
expose:
- "4444"
environment:
- OVERRIDE_VIDEO_OUTPUT_DIR=/tmp/selenoid/video
command: ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video", "-log-output-dir", "/opt/selenoid/logs","-save-all-logs","-disable-privileged", "-container-network", "selenoid"]
|
CI Pipeline (BK)
1
2
3
| agents:
aws:
instance-id: "$BUILDKITE_AGENT_META_DATA_AWS_INSTANCE_ID"
|
first-step.sh
1
2
3
4
5
6
| #!/bin/bash
echo --- :docker: Prep Selenoid docker network create selenoid || true
docker pull selenoid/video-recorder:latest-release
docker pull selenoid/vnc_chrome:79.0
mkdir -p /tmp/selenoid/video
mkdir -p /tmp/selenoid/logs
|
last-step.sh
1
2
3
4
5
6
7
| #!/bin/bash
echo +++ :arrow_up: Upload Selenoid Artifacts
buildkite-agent artifact upload "/tmp/selenoid/**/**"
echo +++ :dusty_stick: Cleaning Up
rm -rf /tmp/selenoid/logs
rm -rf /tmp/selenoid/video
docker-compose -f docker-compose.yml down
|