在 jenkins 管道中创建 selenium 后端

Create a selenium backend in a jenkins pipeline

我在 jenkins 中有一组 webdriver.io 测试 运行。他们 运行 针对由外部公司在 k8s 中管理的硒网格。我想更好地控制我的 selenium 后端,所以我试图找到一种方法在我的 jenkins 管道中设置 selenium 后端。我缺乏 docker/k8s 网络知识,这让我望而却步。

我的管道大致是这样的:

  agent {
    kubernetes {
      defaultContainer 'jnlp'
      yaml """
        apiVersion: v1
        kind: Pod
        spec:
            containers:
              - name: node
                image: node:12.14.1
                command:
                - cat
                tty: true
      """
    }
  }
  stages {
    stage('Checkout codebase') {
      // do checkout
      }  
    }
    stage('Build') {
      steps {
        container('node') {
            sh '''
                npm install --production
            '''
        }
      }
    }
    stage('Test-Mocha') {
      steps {
        container('node') {
            sh "node_modules/.bin/wdio ./test/config/wdio.conf.js --spec ./test/helpers/sandBox/sandbox1.js"
        }
      }
    }
  }
}

我想要的是 运行 我对 chrome 的测试。任何可以给我一个 chrome 浏览器来对抗 运行 的解决方案都是好的。

我试图用 selenium/standalone-chrome 指定一个额外的容器,但我不知道如何 运行 我对该容器的测试。我还阅读了有关使用 docker 容器设置硒网格的内容,但我不知道如何在此管道中 运行 这些命令,即使这可行,我也不确定如何到 运行 反对这个网格。

任何人都可以向我提供一个示例,说明我可以做些什么来完成这项工作吗?

有几种方法可以做到这一点。

1.使用 Selenium Grid(理想方式)- 以下是步骤:

  • 使用下面的 docker-compose 文件托管一个单独的 selenium 网格。
version: '2'
services:
  firefox:
    image: selenium/node-firefox:3.14.0-gallium
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - hub
    environment:
      HUB_HOST: hub

  chrome:
    image: selenium/node-chrome:3.14.0-gallium
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - hub
    environment:
      HUB_HOST: hub

  hub:
    image: selenium/hub:3.14.0-gallium
    ports:
      - "4444:4444"
  • 执行docker-compose up -d命令启动运行ning localhost:4444

  • 的Selenium Grid
  • 一旦此网格 运行ning,请生成用于 运行 网格的 wdio 配置。

    Ref: https://webdriver.io/docs/clioptions.html

  • 生成配置后,运行 您的管道使用您在问题中提到的管道,这将 运行 针对 Selenium Grid

注意:- 使用您生成的用于 selenium 网格的新 wdio 配置。

希望这对您有所帮助。

有 1 种方法不是通过 Kubernetes。

使用下图安装了nodejs和chrome。

  agent {
    kubernetes {
      defaultContainer 'jnlp'
      yaml """
        apiVersion: v1
        kind: Pod
        spec:
            containers:
              - name: node-chrome
                image: larcado/nodejs-chrome
                command:
                - cat
                tty: true
      """
    }
  }
  stages {
    stage('Checkout codebase') {
      // do checkout
      }  
    }
    stage('Build') {
      steps {
        container('node') {
            sh '''
                npm install --production
            '''
        }
      }
    }
    stage('Test-Mocha') {
      steps {
        container('node') {
            sh "node_modules/.bin/wdio ./test/config/wdio.conf.js --spec ./test/helpers/sandBox/sandbox1.js"
        }
      }
    }
  }
}

确保作为 package.json 的一部分,selenium-webdriver 也是其中的一部分。