Я потратил впустую дни, пытаясь заставить это работать с док-контейнерами, включая упомянутый spotify/kafka
.
Первоначально я пытался использовать его в качестве службы. Однако, что бы я ни делал, это не сработает. Фактически мои тесты могли нормально подключиться к сервису, и сервис действительно запустился. Однако это выглядело как странная проблема с сетью между zookeeper и kafka. Я предполагаю, что вам нужно установить ADVERTISED_HOST на spotify__kafka
, что позволяет соединение между вашим бегуном и службой. Однако это означает, что zookeeper считает, что kafka также находится на этом имени хоста, а не на localhost, и вы сталкиваетесь с, казалось бы, невозможным решением проблемы с сетью, поскольку службы не могут взаимодействовать с другими службами в gitlab. Однако это только предположение, поэтому, пожалуйста, не стесняйтесь
поправьте меня, если я ошибаюсь.
Затем я попытался использовать docker в docker с намерением запустить kafka из моих тестов. Все снова пошло хорошо, и контейнер запустился, однако я понял, что вскоре вернулся к той проблеме, которая у меня была выше, в том, что localhost не является localhost при общении с dind в gitlab, вместо этого вам нужно использовать имя хоста docker
, Что снова означало, что zookeeper не может подключиться к kafka, потому что ADVERTISED_HOST должен был измениться.
В конце я сказал вкрутить его и вручную установил kafka без докера в моем скрипте gitlab-ci.yml
. Сценарий выглядит так
stages:
- build
build:
stage: build
image: ubuntu:latest
variables:
KAFKA_HOST: localhost:9092
script:
- apt-get update
- apt-get install -y wget nodejs npm default-jre-headless
- wget http://ftp.heanet.ie/mirrors/www.apache.org/dist/kafka/2.1.0/kafka_2.11-2.1.0.tgz
- tar -xzf kafka_2.11-2.1.0.tgz
- ls -ltra kafka_2.11-2.1.0/bin
- nohup kafka_2.11-2.1.0/bin/zookeeper-server-start.sh kafka_2.11-2.1.0/config/zookeeper.properties > /dev/null 2>&1 &
- sleep 2
- nohup kafka_2.11-2.1.0/bin/kafka-server-start.sh kafka_2.11-2.1.0/config/server.properties > /dev/null 2>&1 &
- sleep 2
- npm install
- npm test
Это доступно на localhost
. Это не элегантно, я знаю, но это делает работу