Чтобы четко ответить на ваши вопросы, я буду ссылаться на каждую из ваших команд следующим образом:
- Для запуска тестов вы запускаете
npm test
- Для запускаселен вы запускаете
npm start selenium
- Для запуска приложения вы запускаете
npm start app
Вопросы / Ответы:
Локально, для одновременной работы требуется 3 терминала, есть ли способ сделать это с помощью CircleCI?
Да.вам просто нужно запустить процесс с background
, установленным в true
, то есть, чтобы запустить Selenium в фоновом режиме, вы можете запустить следующее
- run:
name: Start Selenium in background
command: |
npm start selenium
background: true
После запуска процесса, но перед его использованием., дождитесь готовности процесса на заданном порту
- run:
name: Waiting for Selenium server to be ready
command: |
for i in `seq 1 10`;
do
nc -z localhost 4444 && echo Success && exit 0
echo -n .
sleep 1
done
echo Failed waiting for Selenium && exit 1
Обратите внимание: если вы замените 4444 в приведенной выше команде, вы можете дождаться процесса на другом порту
Каксообщить, когда p4444 и p80 готовы к тестированию, или отменить их после завершения тестов?
Ваши команды CircleCi могут выглядеть следующим образом
- run:
name: Start Selenium in background
command: |
npm start selenium
background: true
- run:
name: Start App in background
command: |
npm start app
background: true
- run:
name: Waiting for Selenium server to be ready
command: |
for i in `seq 1 10`;
do
nc -z localhost 4444 && echo Success && exit 0
echo -n .
sleep 1
done
echo Failed waiting for Selenium && exit
- run:
name: Waiting for App server to be ready
command: |
for i in `seq 1 10`;
do
nc -z localhost 80 && echo Success && exit 0
echo -n .
sleep 1
done
echo Failed waiting for Selenium && exit
- run:
name: Run Tests
command: |
npm test
Вы спросилиотдельный вопрос - как мне отменить процессы на портах 4444 и 80, когда тесты пройдены?Вам действительно не нужно.Когда тестовое задание завершится, контейнер будет удален, а вспомогательные приложения остановятся.
Однако, если вы хотите остановить эти процессы, чтобы выполнить некоторые другие шаги задания, вы можете запустить команды kill (я могу уточнитьесли это неясно)
Это моя проблема с Docker или CircleCI?
Похоже, это просто проблема в понимании того, как запустить серию команд в CircleCi
Если вы выполните описанные выше шаги, вы сможете достичь своей цели.