Мы используем ngrok в нашей сборке CI, чтобы протестировать API с помощью стороннего сервиса. Это оказалось довольно успешным, за исключением того, что поддержка параллельных сборок кажется намного более сложной.
Для поддержки параллелизма мы решили получить зарезервированные домены, скажем:
- пользовательский домен
- custom-domain2
- custom-domain3
Я написал сценарий для проверки доступных доменов и использовал первый из доступных. Скрипт груб и полагается на завершение работы ngrok, когда мы пытаемся использовать уже используемый поддомен:
#!/bin/bash
wget https://dl.ngrok.com/ngrok_2.0.19_linux_amd64.zip
unzip ngrok_2.0.19_linux_amd64.zip
./ngrok authtoken <account_token>
./ngrok http -subdomain=custom-domain 5000 &
sleep 5
curl http://localhost:4040/status
if [[ $? -eq 0 ]]
then
export HOST=custom-domain.ngrok.io
else
./ngrok http -subdomain=custom-domain2 5000 &
sleep 5
curl http://localhost:4040/status
if [[ $? -eq 0 ]]
then
export HOST=custom-domain2.ngrok.io
else
./ngrok http -subdomain=custom-domain3 5000 &
sleep 5
curl http://localhost:4040/status
if [[ $? -eq 0 ]]
then
export HOST=custom-domain3.ngrok.io
else
exit 1
fi
fi
fi
Я попытался реорганизовать это, чтобы использовать клиентский API, но клиентский API смотрит только на localhost
, он не знает о субдоменах, используемых где-либо еще в Интернете. То, что я ищу, кажется возможным, поскольку сам веб-сайт ngrok.io перечисляет поддомены, которые используются в данный момент, мне просто нужно выяснить, как они это делают? Пользуюсь версией 2.0.
При использовании метода сценария кажется, что он работает при использовании custom-domain
, но при использовании 2 или 3 мы, кажется, получаем ошибки при POST
подключении к конечной точке, и единственная подозрительная вещь в журналах:
(некоторые числа изменены)
t=2015-12-21T16:03:17+0000 lvl=warn msg="failed to open private leg" id=094b633d8754 privaddr=localhost:4567 err="dial tcp 127.0.0.1:4567: connection refused"