ci: подключать ноду в сеть job-контейнера, адресовать по IP (DinD)
После genesis-фикса нода стартует, но wait-loop стучал в localhost:8888 из job-контейнера, а -p публикует порт на ХОСТЕ → недостижимо (redis работал по localhost лишь потому, что его сеть настраивает Gitea). Убрал -p, подключаю контейнер ноды в сеть самого job-контейнера и адресую по её IP (надёжнее DNS, работает и на bridge); IP пробрасываю в CHAIN_URL/SHIP_URL последующих шагов через GITHUB_ENV. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -101,11 +101,23 @@ jobs:
|
||||
# /mnt существует). protocol_features узел пишет туда же, в свежесозданный
|
||||
# контейнер — никакого мусора между прогонами.
|
||||
docker create --name blockchain \
|
||||
-p 8888:8888 -p 8080:8080 -p 9876:9876 \
|
||||
dicoop/blockchain:v5.1.0-dev \
|
||||
/bin/bash -c 'mkdir -p /mnt/data && exec /usr/local/bin/nodeos -d /mnt/data -p eosio --config-dir /mnt/cfg --genesis-json /mnt/cfg/genesis.json --disable-replay-opts'
|
||||
docker cp "${GITHUB_WORKSPACE}/packages/parser2/test/integration/node-config" blockchain:/mnt/cfg
|
||||
# Сеть в DinD: порт-маппинг -p публикует на ХОСТЕ, а шаги job'а крутятся
|
||||
# внутри job-контейнера — его localhost хостовых портов не видит (поэтому
|
||||
# localhost:8888 был недостижим). redis-сервис доступен по localhost лишь
|
||||
# потому, что его сеть настраивает сам Gitea. Свою ноду подключаем в ту же
|
||||
# сеть, что и job-контейнер, и адресуем по её IP на этой сети (надёжнее
|
||||
# DNS — работает и на bridge); IP пробрасываем в env последующих шагов.
|
||||
SELF=$(cat /etc/hostname)
|
||||
NET=$(docker inspect "$SELF" --format '{{range $k,$v := .NetworkSettings.Networks}}{{$k}}{{"\n"}}{{end}}' | grep -v '^bridge$' | head -1)
|
||||
[ -z "$NET" ] && NET=bridge
|
||||
docker network connect "$NET" blockchain
|
||||
docker start blockchain
|
||||
NODE_HOST=$(docker inspect blockchain --format "{{(index .NetworkSettings.Networks \"$NET\").IPAddress}}")
|
||||
echo "Нода в сети '$NET' с IP $NODE_HOST"
|
||||
echo "NODE_HOST=$NODE_HOST" >> "$GITHUB_ENV"
|
||||
sleep 3
|
||||
- name: Wait for Chain API
|
||||
run: |
|
||||
@@ -113,7 +125,7 @@ jobs:
|
||||
# раннере nodeos поднимается медленно (наблюдали >6 мин до get_info), а
|
||||
# curl без --max-time подвисал на ещё-не-отвечающем порту и съедал бюджет.
|
||||
for i in $(seq 1 120); do
|
||||
if curl -sf --max-time 2 http://localhost:8888/v1/chain/get_info > /dev/null 2>&1; then
|
||||
if curl -sf --max-time 2 "http://${NODE_HOST}:8888/v1/chain/get_info" > /dev/null 2>&1; then
|
||||
echo "Chain API ready after $i attempts"
|
||||
exit 0
|
||||
fi
|
||||
@@ -126,8 +138,8 @@ jobs:
|
||||
- run: pnpm --filter @coopenomics/parser2 test:integration
|
||||
env:
|
||||
REDIS_URL: redis://localhost:6379
|
||||
CHAIN_URL: http://localhost:8888
|
||||
SHIP_URL: ws://localhost:8080
|
||||
CHAIN_URL: http://${{ env.NODE_HOST }}:8888
|
||||
SHIP_URL: ws://${{ env.NODE_HOST }}:8080
|
||||
- name: Show blockchain logs on failure
|
||||
if: failure()
|
||||
run: docker logs blockchain | tail -200
|
||||
|
||||
Reference in New Issue
Block a user