如何使用Groovy和Kubernetes插件从Jenkins Pipeline运行Kafka?

时间:2018-03-26 18:03:55

标签: docker jenkins groovy kubernetes

我无法在互联网上找到这样一个特定的命令,所以我请求你帮忙解决这个问题:)

上下文

我使用podTemplate方法定义了一个带有几个容器的containerTemplate

  • ubuntu:trusty(14.04 LTS)
  • postgres:9.6
  • 最后,wurstmeister/kafka:latest

在Pipeline中进行一些Groovy编码,我在我的ubuntu:trusty容器中安装了几个依赖项,比如最新的Git,Golang 1.9等,我也从Github检查了我的项目。

在完成所有依赖关系之后,我设法编译,运行迁移(这意味着Postgres启动并运行,我的应用程序已连接到它),并启动我的应用程序,直到它抱怨Kafka没有运行因为它无法连接到任何经纪人。

调试会话

在一些调试会话之后,我对每个容器ps aux进行了编辑,以确保我需要的所有服务都在各自的容器中运行,例如:

    container(postgres) {
        sh 'ps aux'  # Show Postgres, as expected
    }

    container(linux) {
        sh 'ps aux | grep post'  # Does not show  Postgres, as expected
        sh 'ps aux | grep kafka' # Does not show Kafka, as expected
    }

    container(kafka) {
        sh 'ps aux' # Does NOT show any Kafka running
    }

我已按照图片文档中的说明将KAFKA_ADVERTISED_HOST_NAME var导出到127.0.0.1,但没有成功,使用以下代码:

    containerTemplate(
            name: kafka,
            image: 'wurstmeister/kafka:latest',
            ttyEnabled: true,
            command: 'cat',
            envVars: [
                    envVar(key: 'KAFKA_ADVERTISED_HOST_NAME', value: '127.0.0.1'),
                    envVar(key: 'KAFKA_AUTO_CREATE_TOPICS_ENABLE', value: 'true'),
            ]
    )

问题

此图片文档详细信息https://hub.docker.com/r/wurstmeister/kafka/明确指出使用docker-compose up -d启动Kafka群集

1)我如何使用Jenkins的Kubernetes插件+ Docker + Groovy + Pipeline组合实际做到这一点?

2)我实际需要这样做吗? Postgres图像文档(https://hub.docker.com/_/postgres/)也提到了使用docker run运行实例,但我根本不需要这样做,这让我觉得containerTemplate可能会自动执行。那么为什么不为Kafka容器做这个呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

所以...此图像的问题以及kubernetes如何与它们一起工作。 Kafka无法启动,因为您用CMD覆盖了command:'cat'码头工人,这导致start-kafka.sh永远不会运行。 由于上述原因,我建议使用其他图像。下面的模板对我有用。

containerTemplate(
    name: 'kafka',
    image: 'quay.io/jamftest/now-kafka-all-in-one:1.1.0.B',
    resourceRequestMemory: '500Mi',
    ttyEnabled: true,
    ports: [
        portMapping(name: 'zookeeper', containerPort: 2181, hostPort: 2181),
        portMapping(name: 'kafka', containerPort: 9092, hostPort: 9092)
    ],
    command: 'supervisord -n',
    envVars: [
        containerEnvVar(key: 'ADVERTISED_HOST', value: 'localhost')
    ]
),