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