支持一个或两个或两个命令的Docker Entrypoint脚本(即npm config&npm run)

时间:2018-10-01 13:50:20

标签: node.js bash docker npm testcafe

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

1)Git拉预先构建的docker映像

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

3)执行运行程序脚本,即npm run e2e-test

我的shell脚本只能满足3个需求,但我会不断发展,以便满足2)和3)的需求。我目前的shell脚本看起来像这样

#!/bin/sh
set -e

if [ "$1" == 'npm' ] && [ "$2" == '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)的任何想法。通常,我会克隆映像并执行Runner命令,但是拥有一个shell脚本会很高兴,该脚本允许我先设置一些npm配置并执行npm run。

打算提供更多详细信息:

看着https://github.com/bhreinb/SYSTAC#running-tests-on-docker

在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

希望有意义吗?

1 个答案:

答案 0 :(得分:2)

这是一个暂定的快速技巧,可让您使用-v选项传递配置参数。

#!/bin/sh
set -e

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

# Aside; use = not == inside [ ... ]    
if [ "$1" = 'npm' ] && [ "$2" = '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