我的Jenkins管道使用docker插件,然后从其内部运行docker容器以设置常规测试环境,如下所示:

   node('docker') {
    sh """
        cat > .Dockerfile.build <<EOF
        FROM ruby:$rubyVersion
        RUN apt-get update && apt-get install -y locales && localedef -i en_US -f UTF-8 en_US.UTF-8
        ENV LANG=en_US.UTF-8 \\
            LANGUAGE=en_US:en \\
            LC_LANG=en_US.UTF-8 \\
            LC_ALL=en_US.UTF-8

        RUN \\
          curl -sSL -o /tmp/docker.tgz https://download.docker.com/linux/static/stable/x86_64/docker-${dockerVersion}.tgz && \\
          tar --strip-components 1 --directory /usr/local/bin/ --extract --file /tmp/docker.tgz

        RUN \\
          groupadd -g $gid  docker && \\
          useradd -d $env.HOME -u $uid build -r -m && \\
          usermod -a -G docker build
        EOF

    """.stripIndent().trim()
    }

一旦测试环境容器启动,我将运行另一个容器,该容器中包含我的代码和测试,并且位于先前制作的环境容器中。我的测试之一包括确保通过允许某些端口通过的iptables设置了防火墙。为了测试我的防火墙设置是否正确,我简单地从那个容器(现在是3个docker容器)内部运行它:
  def listener_response(port, host = 'localhost')
    TCPSocket.open(host, port) do |socket|
      socket.read(2)
    end
  rescue SystemCallError
    nil
  end

只需传入我使用的随机端口和Jenkins docker节点IP即可调用。当我运行测试容器时,我会执行以下操作:
docker run -d -e DOCKER_HOST_IP=10.x.x.x -e RANDOM_OPEN_PORT=52459 -p 52459:52459 -v /var/run/docker.sock:/var/run/docker.sock

但是,我仍然从测试中得到零响应,而不是确定。有没有办法从Jenkins主机移植到我的测试环境再到我的测试容器?

最佳答案

使用选项--network host运行测试环境似乎可以解决我的问题。

07-24 18:20
查看更多