Skip to content

Commit 5aec091

Browse files
committed
[docker] Revamp of docker images
1 parent 266ad87 commit 5aec091

4 files changed

Lines changed: 157 additions & 46 deletions

File tree

WORKSPACE

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -146,17 +146,48 @@ container_pull(
146146
)
147147

148148
container_pull(
149-
name = "java_debug_image_base",
150-
# Java 11 debug
151-
digest = "sha256:6c5cee837b874e700995690e65fd8c16ea2c4b028a6bba16a34b0b06de35d2f8",
152-
registry = "gcr.io",
153-
repository = "distroless/java",
149+
name = "firefox_standalone",
150+
# selenium/standalone-firefox-debug:3.141.59
151+
digest = "sha256:a77683572022f8139b07eb29dee66f7b34b5df4d9902b7f1e081e112411f683d",
152+
registry = "index.docker.io",
153+
repository = "selenium/standalone-firefox-debug",
154154
)
155155

156156
container_pull(
157-
name = "firefox-standalone",
158-
# selenium/standalone-firefox:3.141.59
159-
digest = "sha256:98d0cf6284a1560117811a7a47f95b38d81bd1fbd78551bcc58fa986abf2cb55",
157+
name = "chrome_standalone",
158+
# selenium/standalone-chrome-debug:3.141.59
159+
digest = "sha256:53812c3d01622148e9ccd79e598c3740804dbfd51594ae592bac5a14380b595e",
160160
registry = "index.docker.io",
161-
repository = "selenium/standalone-firefox",
161+
repository = "selenium/standalone-chrome-debug",
162+
)
163+
164+
http_archive(
165+
name = "io_bazel_rules_k8s",
166+
sha256 = "d91aeb17bbc619e649f8d32b65d9a8327e5404f451be196990e13f5b7e2d17bb",
167+
strip_prefix = "rules_k8s-0.4",
168+
urls = ["https://github.com/bazelbuild/rules_k8s/releases/download/v0.4/rules_k8s-v0.4.tar.gz"],
169+
)
170+
171+
load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_repositories")
172+
173+
k8s_repositories()
174+
175+
load("@io_bazel_rules_k8s//k8s:k8s_go_deps.bzl", k8s_go_deps = "deps")
176+
177+
k8s_go_deps()
178+
179+
load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains")
180+
181+
go_rules_dependencies()
182+
183+
go_register_toolchains()
184+
185+
load("@io_bazel_rules_k8s//k8s:k8s.bzl", "k8s_defaults")
186+
187+
k8s_defaults(
188+
name = "k8s_dev",
189+
namespace = "selenium",
190+
kind = "deployment",
191+
cluster = "docker-desktop",
192+
image_chroot = "localhost:5000",
162193
)

deploys/docker/BUILD.bazel

Lines changed: 75 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package(default_visibility = ["//deploys/k8s:__pkg__"])
22

33
load("@io_bazel_rules_docker//java:image.bzl", "java_image")
44
load("@io_bazel_rules_docker//contrib:passwd.bzl", "passwd_entry", "passwd_file")
5-
load("@io_bazel_rules_docker//container:container.bzl", "container_image")
6-
load("@io_bazel_rules_docker//container:container.bzl", "container_image", "container_push")
5+
load("@io_bazel_rules_docker//container:container.bzl", "container_image", "container_layer", "container_push")
76
load("@rules_pkg//:pkg.bzl", "pkg_tar")
7+
load("//:copy_file.bzl", "copy_file")
88

99
REGISTRY = "localhost:5000"
1010

@@ -42,33 +42,22 @@ pkg_tar(
4242
ENTRY_POINT = [
4343
"java",
4444
"-jar",
45-
"/app/selenium_server_deploy.jar",
45+
"/opt/selenium/bin/selenium",
4646
]
4747

48-
container_image(
49-
name = "passwd-image",
50-
base = "@java_debug_image_base//image",
48+
container_layer(
49+
name = "passwd-layer",
5150
tars = [":passwd-tar"],
5251
)
5352

5453
container_image(
5554
name = "grid-base",
56-
base = ":passwd-image",
57-
directory = "/app",
58-
files = [
59-
"//java/server/src/org/openqa/selenium/grid:selenium_server_deploy.jar",
55+
base = "@java_image_base//image",
56+
layers = [
57+
":grid-binary",
58+
":passwd-layer",
6059
],
61-
user = "seluser",
62-
workdir = "/app",
63-
)
64-
65-
container_image(
66-
name = "grid-debug-base",
67-
base = ":passwd-image",
6860
directory = "/app",
69-
files = [
70-
"//java/server/src/org/openqa/selenium/grid:selenium_server_deploy.jar",
71-
],
7261
user = "seluser",
7362
workdir = "/app",
7463
)
@@ -145,31 +134,80 @@ container_image(
145134
],
146135
)
147136

137+
container_layer(
138+
name = "grid-binary",
139+
directory = "/opt/selenium/bin",
140+
files = [
141+
"//java/server/src/org/openqa/selenium/grid:executable-grid",
142+
],
143+
)
144+
145+
container_layer(
146+
name = "one-shot",
147+
directory = "/opt/selenium",
148+
files = [
149+
"//java/server/src/org/openqa/selenium/grid/node/k8s"
150+
],
151+
)
152+
153+
container_layer(
154+
name = "start-scripts",
155+
directory = "/opt/selenium/bin",
156+
files = [
157+
":selenium.sh",
158+
],
159+
)
160+
161+
container_image(
162+
name = "chrome-node",
163+
base = "@chrome_standalone//image",
164+
layers = [
165+
":grid-binary",
166+
":one-shot",
167+
":start-scripts",
168+
],
169+
ports = [
170+
"5555", # Selenium
171+
"5900", # vnc,
172+
],
173+
user = "seluser",
174+
entrypoint = [
175+
"/opt/selenium/bin/selenium.sh",
176+
"node",
177+
],
178+
)
179+
148180
container_push(
149-
name = "push-firefox-node",
181+
name = "push-chrome-node",
150182
format = "Docker",
151-
image = ":firefox-node-image",
183+
image = ":chrome-node",
152184
registry = REGISTRY,
153-
repository = "selenium/firefox-node",
185+
repository = "selenium/chrome-node",
154186
)
155187

156188
container_image(
157-
name = "firefox-node-image",
158-
base = "@firefox-standalone//image",
159-
cmd = None,
160-
directory = "/app",
161-
entrypoint = [
162-
"java",
163-
"-jar",
164-
"/app/selenium_server_deploy.jar",
165-
"node",
166-
"-p",
167-
"4444",
168-
"--detect-drivers",
189+
name = "firefox-node",
190+
base = "@firefox_standalone//image",
191+
layers = [
192+
":grid-binary",
193+
":one-shot",
194+
":start-scripts",
169195
],
170-
files = ["//java/server/src/org/openqa/selenium/grid:selenium_server_deploy.jar"],
171196
ports = [
172-
"4444/tcp",
197+
"5555", # Selenium
198+
"5900", # vnc,
173199
],
174200
user = "seluser",
201+
entrypoint = [
202+
"/opt/selenium/bin/selenium.sh",
203+
"node",
204+
],
205+
)
206+
207+
container_push(
208+
name = "push-firefox-node",
209+
format = "Docker",
210+
image = ":firefox-node",
211+
registry = REGISTRY,
212+
repository = "selenium/firefox-node",
175213
)

deploys/docker/selenium.sh

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/usr/bin/env bash
2+
3+
export PATH=$PATH:/opt/selenium/bin
4+
5+
mkdir -p ${HOME}/.vnc && x11vnc -storepasswd secret ${HOME}/.vnc/passwd
6+
7+
8+
# Start the underlying X Server
9+
echo "Starting xvfb"
10+
11+
export GEOMETRY="${SCREEN_WIDTH}""x""${SCREEN_HEIGHT}""x""${SCREEN_DEPTH}"
12+
13+
rm -f /tmp/.X*lock
14+
15+
/usr/bin/Xvfb ${DISPLAY} -screen 0 ${GEOMETRY} -dpi ${SCREEN_DPI} -ac +extension RANDR &
16+
17+
# Start the VNC server
18+
X11VNC_OPTS=-usepw
19+
20+
for i in $(seq 1 10)
21+
do
22+
sleep 1
23+
xdpyinfo -display ${DISPLAY} >/dev/null 2>&1
24+
if [ $? -eq 0 ]; then
25+
break
26+
fi
27+
echo "Waiting for X server..."
28+
done
29+
30+
echo "Starting window manager"
31+
fluxbox -display ${DISPLAY} &
32+
33+
echo "Starting vnc server"
34+
35+
# -noxrecord fixes https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=859213 in x11vnc 0.9.13-2
36+
x11vnc ${X11VNC_OPTS} -forever -shared -rfbport 5900 -display ${DISPLAY} -noxrecord &
37+
38+
# Now start the Node
39+
40+
echo /opt/selenium/bin/selenium $@
41+
/opt/selenium/bin/selenium $@

java/server/src/org/openqa/selenium/grid/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ genrule(
1414
executable = True,
1515
visibility = [
1616
"//:__pkg__",
17+
"//deploys/docker:__pkg__",
1718
],
1819
)
1920

0 commit comments

Comments
 (0)