Docker 支持一个或两个或两个命令的入口点脚本(即 npm config 和 npm 运行)

Docker Entrypoint Script To Support One or Two or Both Commands (namely npm config & npm run)

我 运行 使用构建在 nodejs 之上的 docker 使用 testcafe 和 cucumberjs 进行测试。测试 运行 是通过 npm 脚本启动的。我在下面详细介绍了工作流程...

1) Git 拉预建 docker 图像

2) 可选择在 package.json 文件中设置一个 'config' 参数,例如...npm config set packageJson:task-profile auto-regression-chrome

3) 执行 运行ner 脚本即 npm run e2e-test

我的 shell 脚本只能满足 3,但我会进行改进以使其满足 2) 和 3)。我的 shell 脚本目前看起来像这样

#!/bin/sh
set -e

if [ "" == 'npm' ] && [ "" == 'run' ]; then
    shift 2

    XVFB_SCREEN_WIDTH=${SCREEN_WIDTH-1280}
    XVFB_SCREEN_HEIGHT=${SCREEN_HEIGHT-720}

    dbus-daemon --session --fork
    Xvfb :1 -screen 0 "${XVFB_SCREEN_WIDTH}x${XVFB_SCREEN_HEIGHT}x24" >/dev/null 2>&1 &
    export DISPLAY=:1.0
    fluxbox >/dev/null 2>&1 &
    exec npm run "$@"
fi


# otherwise, just run whatever command was passed on
exec "$@"

关于如何改进脚本以满足 2) 和 3) 的任何想法。通常我会克隆图像并执行 运行ner 命令,但最好有一个 shell 脚本,它允许我先设置一些 npm 配置并执行 npm 运行.

有关意图的更多详细信息:

正在查看https://github.com/bhreinb/SYSTAC#running-tests-on-docker

我在 运行ning 测试 docker

时执行以下操作

1) 构建 docker 图像

docker build --no-cache -t bhreinb/systac .

2) 运行 docker 上的测试并丢弃图像...

docker run --rm -it -v $PWD/e2e/:/opt/systac/e2e bhreinb/systac npm run e2e-test

限制是在 运行测试之前需要在源代码管理中设置配置。我希望能够动态更新配置,运行 测试并使用一个命令丢弃图像,即

docker run --rm -it -v $PWD/e2e/:/opt/SYSTAC/e2e -v $PWD/reports/:/opt/SYSTAC/reports/ bhreinb/SYSTAC npm config set packageJson:task-profile auto-regression-chrome && npm run e2e-test

希望这是有道理的?

这是一个试探性的快速技巧,可让您使用 -v 选项传入配置参数。

#!/bin/sh
set -e

# Quick and dirty option processing
while [  = '-v' ]; do
    case  in
      *=*)
        option=${2%=*}
        npm config set "$option" "${2#$option}"
        shift 2;;
      *)
        echo "[=10=]: Fatal error: argument to -v must contain =" >&2
        exit 127;;
    esac
done

# Aside; use = not == inside [ ... ]    
if [ "" = 'npm' ] && [ "" = 'run' ]; then
    shift 2

    XVFB_SCREEN_WIDTH=${SCREEN_WIDTH-1280}
    XVFB_SCREEN_HEIGHT=${SCREEN_HEIGHT-720}

    dbus-daemon --session --fork
    Xvfb :1 -screen 0 "${XVFB_SCREEN_WIDTH}x${XVFB_SCREEN_HEIGHT}x24" >/dev/null 2>&1 &
    export DISPLAY=:1.0
    fluxbox >/dev/null 2>&1 &
    exec npm run "$@"
fi

exec "$@"

用法:

docker run --rm -it \
   -v $PWD/e2e/:/opt/SYSTAC/e2e \
   -v $PWD/reports/:/opt/SYSTAC/reports/ \
  bhreinb/SYSTAC \
   scriptname -v foo=bar \
      -v packageJson:task-profile=auto-regression-chrome \
      -v baz=quux \
     npm run gargleblaster --demo --crash --splinters