Make screenshotter work with docker-machine (#494)
Since boot2docker has been superseded by docker-machine, we need this to support developers on OS X. The changes to the bash script ensure that we clean up our containers even if taking screenshots gets hung and requires a keyboard interrupt, as happens if the IP addresses were guessed incorrectly.
This commit is contained in:
parent
f1be1a3462
commit
d50745d5a9
|
@ -106,19 +106,25 @@ function check(err) {
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function dockerCmd() {
|
function cmd() {
|
||||||
var args = Array.prototype.slice.call(arguments);
|
var args = Array.prototype.slice.call(arguments);
|
||||||
|
var cmd = args.shift();
|
||||||
return childProcess.execFileSync(
|
return childProcess.execFileSync(
|
||||||
"docker", args, { encoding: "utf-8" }).replace(/\n$/, "");
|
cmd, args, { encoding: "utf-8" }).replace(/\n$/, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!seleniumURL && opts.container) {
|
function guessDockerIPs() {
|
||||||
|
if (process.env.DOCKER_MACHINE_NAME) {
|
||||||
|
var machine = process.env.DOCKER_MACHINE_NAME;
|
||||||
|
seleniumIP = cmd("docker-machine", "ip", machine);
|
||||||
|
katexIP = cmd("docker-machine", "ssh", machine,
|
||||||
|
"echo ${SSH_CONNECTION%% *}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
// When using boot2docker, seleniumIP and katexIP are distinct.
|
// When using boot2docker, seleniumIP and katexIP are distinct.
|
||||||
seleniumIP = childProcess.execFileSync(
|
seleniumIP = cmd("boot2docker", "ip");
|
||||||
"boot2docker", ["ip"], { encoding: "utf-8" }).replace(/\n$/, "");
|
var config = cmd("boot2docker", "config");
|
||||||
var config = childProcess.execFileSync(
|
|
||||||
"boot2docker", ["config"], { encoding: "utf-8" });
|
|
||||||
config = (/^HostIP = "(.*)"$/m).exec(config);
|
config = (/^HostIP = "(.*)"$/m).exec(config);
|
||||||
if (!config) {
|
if (!config) {
|
||||||
console.error("Failed to find HostIP");
|
console.error("Failed to find HostIP");
|
||||||
|
@ -126,10 +132,14 @@ if (!seleniumURL && opts.container) {
|
||||||
}
|
}
|
||||||
katexIP = config[1];
|
katexIP = config[1];
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
seleniumIP = katexIP = dockerCmd(
|
seleniumIP = katexIP = cmd("docker", "inspect",
|
||||||
"inspect", "-f", "{{.NetworkSettings.Gateway}}", opts.container);
|
"-f", "{{.NetworkSettings.Gateway}}", opts.container);
|
||||||
}
|
}
|
||||||
seleniumPort = dockerCmd("port", opts.container, seleniumPort);
|
}
|
||||||
|
|
||||||
|
if (!seleniumURL && opts.container) {
|
||||||
|
guessDockerIPs();
|
||||||
|
seleniumPort = cmd("docker", "port", opts.container, seleniumPort);
|
||||||
seleniumPort = seleniumPort.replace(/^.*:/, "");
|
seleniumPort = seleniumPort.replace(/^.*:/, "");
|
||||||
}
|
}
|
||||||
if (!seleniumURL && seleniumIP) {
|
if (!seleniumURL && seleniumIP) {
|
||||||
|
|
|
@ -7,6 +7,15 @@
|
||||||
# suitable containers themselves, calling the screenshotter.js script
|
# suitable containers themselves, calling the screenshotter.js script
|
||||||
# directly.
|
# directly.
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
[[ "${container}" ]] \
|
||||||
|
&& docker stop "${container}" >/dev/null \
|
||||||
|
&& docker rm "${container}" >/dev/null
|
||||||
|
container=
|
||||||
|
}
|
||||||
|
|
||||||
|
container=
|
||||||
|
trap cleanup EXIT
|
||||||
status=0
|
status=0
|
||||||
for browserTag in firefox:2.48.2 chrome:2.48.2; do
|
for browserTag in firefox:2.48.2 chrome:2.48.2; do
|
||||||
browser=${browserTag%:*}
|
browser=${browserTag%:*}
|
||||||
|
@ -23,6 +32,6 @@ for browserTag in firefox:2.48.2 chrome:2.48.2; do
|
||||||
status=1
|
status=1
|
||||||
fi
|
fi
|
||||||
echo "${res} taking screenshots, stopping and removing ${container:0:12}"
|
echo "${res} taking screenshots, stopping and removing ${container:0:12}"
|
||||||
docker stop ${container} >/dev/null && docker rm ${container} >/dev/null
|
cleanup
|
||||||
done
|
done
|
||||||
exit ${status}
|
exit ${status}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user