ci: подключать ноду в сеть job-контейнера, адресовать по IP (DinD)
CI / Lint (pull_request) Successful in 9m22s
CI / Typecheck (pull_request) Successful in 9m27s
CI / Integration tests (pull_request) Failing after 5m1s
CI / Build (pull_request) Has been skipped
CI / Unit tests (pull_request) Successful in 9m37s

После 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:
coopops
2026-05-26 13:37:12 +00:00
parent d575da529b
commit 2895d41383
+16 -4
View File
@@ -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