簡體   English   中英

如何使用Groovy和Kubernetes插件從Jenkins Pipeline運行Kafka?

[英]How to run Kafka from Jenkins Pipeline using Groovy and Kubernetes plugin?

我在互聯網上找不到這樣的特定命令,所以請您幫忙:)

上下文

我已經通過使用containerTemplate方法定義了一個包含幾個容器的podTemplate

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

在Pipeline中進行一些Groovy編碼,我在ubuntu:trusty 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容器這樣做呢?

謝謝!

所以...問題在於該圖像以及kubernetes如何與它們一起工作。 Kafka無法啟動,因為您使用command:'cat'覆蓋了dockers CMD ,這導致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')
    ]
),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM