Jenkinsfile Kubernetes公开容器端口

时间:2019-03-14 13:24:42

标签: selenium jenkins kubernetes jenkins-pipeline jenkins-plugins

希望有人可以帮助我,我正在尝试在Jenkins管道中的kubernetes容器上导出端口。

我已经看过网上了,但是我无法确定如何使它工作。

我需要将端口4444导出到selenium-hub容器。

def label = "selenium-hub-${UUID.randomUUID().toString()}"

podTemplate(label: label, yaml: """
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: selenium-hub
    image: selenium/hub:3.4.0

  - name: selenium-chrome
    image: selenium/node-chrome:3.4.0
    env:
    - name: HUB_PORT_4444_TCP_ADDR
      value: localhost
    - name: HUB_PORT_4444_TCP_PORT
      value: 4444
    - name: DISPLAY
      value: :99.0
    - name: SE_OPTS
      value: -port 5556
  - name: selenium-firefox
    image: selenium/node-firefox:3.4.0
    env:
    - name: HUB_PORT_4444_TCP_ADDR
      value: localhost
    - name: HUB_PORT_4444_TCP_PORT
      value: 4444
    - name: DISPLAY
      value: :98.0
    - name: SE_OPTS
      value: -port 5557

我目前从集线器获取ip,并将其传递给测试以通过网格运行

  node(label) {
        containerLog('selenium-hub')
        sh('hostname -i')
        POD_IP = sh(script: "hostname -i", returnStdout: true).toString().replaceAll('\\n', '');
        node() {
            sh("POD_IP='${POD_IP}' UI_URL=https://EEEEEE.net/ SERVICE_URL=https://WWWWWW.net/ ./node_modules/webdriverio/bin/wdio ./tests/UI/helpers/configs/wdio.GRID.conf.js --nolazy")
        }

我似乎在测试运行时无法访问网格,因此我认为这是由于未暴露端口4444,但我无法弄清楚如何在kubernetes中进行操作。 / p>

希望有人可以指出我的工作方向,我已经在网上尝试了一些示例,但似乎没有任何联系。

谢谢

卡尔

2 个答案:

答案 0 :(得分:0)

将Kubernetes pod视为传统服务器的抽象。如果Pod中的某个容器在特定端口上公开了mysql或本例中的Selenium之类的服务,则Pod中的所有其他容器默认都可以在所选端口上访问该服务:

https://kubernetes.io/docs/concepts/workloads/pods/pod/#resource-sharing-and-communication

不是使用POD_IP,而是尝试使用localhost:4444(或所需的任何端口)来访问服务。

在各种版本的单元测试期间,我使用相同的模式访问sidecar容器中的mysql。

答案 1 :(得分:0)

服务允许您的应用程序接收流量。因此,您需要使用其中之一来公开对您的硒部署的访问权限:

apiVersion: v1
kind: Service
metadata:
  name: selenium-hub
  labels:
    app: selenium-hub
spec:
  ports:
  - port: 4444
    targetPort: 4444
    name: port0
  selector:
    app: selenium-hub
  type: NodePort
  sessionAffinity: None

有关更多详细信息,https://github.com/kubernetes/examples/tree/master/staging/selenium