Сценарий входа в Docker для поддержки одной, двух или обеих команд (а именно: npm config & npm run) - PullRequest
0 голосов
/ 01 октября 2018

Я запускаю тесты с testcafe & cucumberjs, используя docker, который построен поверх nodejs.Тестовый запуск инициируется через скрипты npm.Ниже подробно описан рабочий процесс ...

1) Предварительно собранный образ докера Git pull

2) При желании можно установить параметр config в файле package.json, например ... npm config set packageJson:task-profile auto-regression-chrome

3) Выполнить скрипт бегуна, т.е. npm run e2e-test

мой сценарий оболочки может обслуживать только 3, но я бы развивался так, чтобы он обслуживал 2) и 3).Мой сценарий оболочки в настоящее время выглядит следующим образом:

#!/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, но было бы неплохо иметь сценарий оболочки, который позволяет мне сначала установить некоторые настройки npm и выполнить запуск npm.

Подробнее о намерении:

Глядя на https://github.com/bhreinb/SYSTAC#running-tests-on-docker

Я делаю следующее при запуске тестов в Docker

1) Создаю образ докера

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 голосов
/ 04 января 2019

Вот предварительный быстрый взлом, чтобы вы могли передать параметры конфигурации с -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
...