【问题标题】:Port allocation when running build job in Jenkins在 Jenkins 中运行构建作业时的端口分配
【发布时间】:2018-07-27 15:53:27
【问题描述】:

我的项目的结构使得 Jenkins 中的构建作业通过推送到 Git 来触发。作为我的应用程序逻辑的一部分,我启动了 kafka 和弹性搜索实例,以在我的下游测试用例中使用。

我现在遇到的问题是,当开发人员将他的更改推送到 Git 时,它会触发 Jenkins 中的构建,然后运行我们的代码并在 localhost:9092 中生成 kafka 代理,并在 localhost:9200 中生成弹性搜索。

当另一个开发人员同时进行其他更改时,推送他的代码,它会再次触发构建作业并尝试启动另一个 kafka/elastic 搜索实例,但失败并出现“端口已在使用”异常。

我正在研究如何处理这种情况的选项。

在 docker 容器中运行这些实例是否会有所帮助?在这种情况下我该如何处理端口问题?

【问题讨论】:

    标签: docker elasticsearch jenkins apache-kafka


    【解决方案1】:

    是的,对这些实例进行 docker 化确实会有所帮助,因为您可以多次生成它们。

    您可以为每个组件(包括您的应用程序)创建一个 docker 容器,然后通过链接它们或使用 docker-compose 让它们相互通信

    这样您就不必将端口暴露给“外部”世界,而是将其保留在 docker 环境内部。

    这样您就不会拥有“端口已在使用”。在这种情况下,唯一的问题是内存。例如如果对 git repo 进行 100 次推送,您可能会耗尽内存...

    【讨论】:

    • 您可以设置执行程序的数量来控制资源 - 或者可以设置为 1 以完全避免该问题,但我认为 OP 希望能够进行并发构建。如果您只想限制一项工作,可以查看 Build Blocker 之类的内容
    • @ivonet 感谢您的回复。在这种情况下,端口机制如何工作?如果一个开发人员推送他的更改,他的 docker 容器的 zookeeper 实例将使用 2181 主机,当另一个开发人员同时推送时会发生什么?
    • 鉴于我的 docker-compose.yml 如下所示kafka: image: "wurstmeister/kafka:0.10.2.0" ports: - "9092:9092" hostname: kafka links: - zookeeper environment: - KAFKA_ADVERTISED_HOST_NAME=kafka - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 - KAFKA_ADVERTISED_PORT=9092 zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多