jenkins - 在 Jenkins Pipeline Library 中查找未使用的端口

标签 jenkins groovy jenkins-pipeline

我目前正在努力改进我的 Jenkins Pipeline,它启动一个带有公开端口的 Docker 容器。但由于事实上 Jenkins 实例被很多人和他们的项目大量使用,我遇到了问题,暴露的端口映射已经在使用中。

我的想法是确定主机上未使用的端口,以避免这个问题。为了做到这一点,我想用一个简单的方法来扩展我们的 Jenkins 共享库,以检查并返回主机系统中第一个未使用的端口。

有人知道如何实现这一目标吗?

我当前的解决方案是利用 shell 函数,该函数以某种方式使用 netstat 工具。

文件:getRandomFreePort.groovy

def call() {
sh '''
    #!/bin/bash
    while
    [[!-z $CHECK]]; do
    PORT = $(((RANDOM % 60000) + 1025))
    CHECK = $(sudo netstat - ap | grep $PORT)
    done

    echo $PORT
'''
}

最佳答案

使用ServerSocket,您可以通过以下命令获取未使用的端口:

try {
    def serverSocket = new ServerSocket(0);
    System.out.println("listening on port: " + serverSocket.getLocalPort());
    //Do anything
    serverSocket.close()
} catch (IOException ex) {
    System.err.println("no available ports");
}

如果您需要找到某个范围内的可用端口,请查看此帖子:How to find an available port in a range?

关于jenkins - 在 Jenkins Pipeline Library 中查找未使用的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46883466/

相关文章:

email - 如何使用groovy模板在Jenkins中发送电子邮件?

动态调用静态方法的 Groovy 方式

groovy - Groovy 方法如何多次返回?

jenkins - 如何在 Jenkins Pipeline 中的 withCredentials 中使用多个凭据

ant - Jenkins 中的 Ivy 构建项目应该如何设置?

jenkins - 获取流水线中其他作业的参数

Jenkins Pipeline 构建步骤 - getBuildVariables() 返回空映射

jenkins - 将映射变量导入 Jenkinsfile 环境阶段

jenkins - Docker - 从一个链接容器向另一个容器发出命令

java - 如何在gradle java构建脚本中访问环境变量