如何在gitlab-ci.yml上设置Kafka服务?

时间:2018-07-05 04:12:20

标签: apache-kafka gitlab gitlab-ci

我目前在gitlab CI上设置Kafka服务以运行集成测试时遇到麻烦,我目前正在使用spotify / kafka docker映像。如果有人可以帮助我解决这个问题,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

我一生都在浪费时间,试图使它与Docker容器一起使用,包括提到的spotify/kafka

最初,我尝试将其用作服务。但是,无论我做什么,都行不通。实际上,我的测试可以正常连接到服务,并且服务确实已启动。但是,这似乎是zookeeper和kafka之间的一些奇怪的网络问题。我的猜测是,您需要将ADVERTISED_HOST设置为spotify__kafka,以允许运行程序和服务之间建立连接。但是,这意味着Zookeeper认为kafka也是该主机名而不是localhost,并且由于服务无法与gitlab中的其他服务进行通信,因此您似乎无法解决网络问题。但这只是一个猜测,请随时
如果我错了,请纠正我。

接下来,我尝试在docker中使用docker,目的是从测试中启动kafka。一切都很好,容器开始了,但是我意识到我很快又回到了上面的问题,因为在gitlab中与dind通信时,本地主机不是本地主机,而是需要使用主机名{{1 }}。这再次意味着动物园管理员由于必须更改ADVERTISED_HOST而无法连接到kafka。

最后,我说要拧紧它,并在docker脚本中手动安装kafka而不使用docker。脚本看起来像这样

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 上访问它。我知道这并不优雅,但可以完成工作

答案 1 :(得分:0)

它与托管Kafka和Zookeeper的容器一起很好地工作,并允许控制内部和外部“播发的侦听器”。外部应设置为容器的别名,内部应设置为localhost(即:容器的localhost)。

spotify / kafka-image仅允许您设置播发的主机,而不是完整播发的侦听器字符串。因为内部和外部必须不同,所以这行不通。

krisgeus / docker-kafka(https://github.com/krisgeus/docker-kafka)确实可以设置所需的一切。

下面的.gitlab-ci.yml允许我从ci-jobs连接到kafka:9092:

variables:
  ADVERTISED_LISTENERS: 'PLAINTEXT://kafka:9092,INTERNAL://localhost:9093'
  LISTENERS: 'PLAINTEXT://0.0.0.0:9092,INTERNAL://0.0.0.0:9093'
  SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT'
  INTER_BROKER: 'INTERNAL'
  KAFKA_CREATE_TOPICS: 'cc-event:36:1'

services:
  - name: krisgeus/docker-kafka
    alias: kafka