selenium - Jenkinsfile Kubernetes 暴露容器端口
问题描述
我正在尝试在我的 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。
推荐阅读
- c++ - control font and character set in console using visual studio c++
- azure-keyvault - 从 Azure Key Vault 检索机密:任务
还是常规字符串? - r - Shift lines in plot for metafor object
- c# - 如果我们想利用依赖注入,我们还应该创建实例吗?
- angular - Error formControlName must be used with a parent formGroup directive. You'll want to add a formGroup
- ruby-on-rails - Rails turbolink js issue one click dropdown js not load
- c# - dotnet 的 tcp 套接字的发送方法究竟什么时候不发送所有字节?
- python - 如何为特定字符串编写正则表达式?
- python - ValueError: Error when checking input: expected input_1 to have shape (50,) but got array with shape (1,) with ELMo embeddings and LSTM
- java - Java 11 标准环境与 ApiProxy 不兼容?