希望有人可以帮助我,我正在尝试在我的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中进行。
希望有人可以指出我需要做的事情,我已经在线尝试了一些例子,但似乎没有更接近......
谢谢
卡尔
将Kubernetes pod视为传统服务器的抽象。如果pod中的容器暴露了像mysql这样的服务,或者在特定端口上暴露了selenium,则默认情况下,pod中的所有其他容器都可以访问所选端口上的该服务:
https://kubernetes.io/docs/concepts/workloads/pods/pod/#resource-sharing-and-communication
而不是使用POD_IP只是尝试使用localhost:4444(或您需要的任何端口)来访问该服务。
在各种构建的单元测试期间,我使用相同的模式访问sidecar容器中的mysql。
服务允许您的应用程序接收流量。因此,您需要其中一个来公开对selenium部署的访问:
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