Jenkinsfile Kubernetes выставляет контейнерные порты - PullRequest
0 голосов
/ 14 марта 2019

Надеюсь, кто-нибудь может мне помочь, я пытаюсь экспортировать порт в моем контейнере kubernetes в моем конвейере Jenkins.

Я посмотрел онлайн, и я просто не могу понять, как заставить это работать ..

Мне нужно экспортировать порт 4444 в контейнер с селеновым концентратором.

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.

Надеюсь, кто-то может указать мне, что мне нужно делать, я попробовал несколько примеров в Интернете, но, похоже, не стал ближе ...

Спасибо

Karl

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Сервис позволяет вашим приложениям получать трафик.Таким образом, вам нужен один из них, чтобы предоставить доступ к вашему развертыванию Selen:

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

0 голосов
/ 14 марта 2019

Думайте о Кубернетесе как об абстракции традиционного сервера. Если контейнер в модуле предоставляет такой сервис, как mysql или, в данном случае, селен на конкретном порту, то все остальные контейнеры в модуле могут получить доступ к этой службе по выбранному порту по умолчанию:

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

Вместо того, чтобы использовать POD_IP, просто попробуйте использовать localhost: 4444 (или любой другой порт, который вам нужен) для доступа к службе.

Я использую тот же шаблон для доступа к mysql в контейнере с коляской во время юнит-тестов в различных сборках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...