希望有人可以帮助我,我正在尝试在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>
希望有人可以指出我的工作方向,我已经在网上尝试了一些示例,但似乎没有任何联系。
谢谢
卡尔
答案 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