如何使用 Jenkins Pipeline 中的 Xvnc 插件

How to use Xvnc plugin from Jenkins Pipeline

我正在尝试将现有的 Jenkins 作业移植到 Jenkinsfile。在大多数情况下,这很好用,但我一直无法弄清楚如何使用 Xvnc 插件。在旧的 Jenkins 作业中,插件配置为

Xvnc plugin settings

需要设置 DISPLAY 环境变量,以便 Chrome 可以 运行。我在 Jenkins 构建输出中看到的错误是

[32m27 07 2018 09:21:30.798:INFO [karma]:  [39mKarma v2.0.3 server started at http://0.0.0.0:9876/
[32m27 07 2018 09:21:30.800:INFO [launcher]:  [39mLaunching browser Chrome with unlimited concurrency
[32m27 07 2018 09:21:30.819:INFO [launcher]:  [39mStarting browser Chrome 
[31m27 07 2018 09:21:31.277:ERROR [launcher]:  [39mCannot start Chrome

我的 (t运行cated) Jenkinsfile 看起来像这样

pipeline {
  agent {
    label 'java8&&chrome'
  }
  stages {
    stage ("Build") {
      tools {
        jdk 'jdk 1.8'
      }
      steps {
        step ([$class: 'Xvnc', useXauthority: 'true'])
        //wrap ([$class: 'Xvnc', useXauthority: 'true'])
        //xvnc { useXauthority(true) }
        sh './gradlew clean build -PsnapshotDeps'
      }
    }
  }
}

我怀疑我需要以某种方式将 gradle 步骤包含在 Xvnc 包装器中,但是 none 尝试过的选项比我尝试过的选项更成功这里。

wrap 命令后跟一个块。块内的所有内容都在包装器 (https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#wrap-general-build-wrapper) 的作用下。

 stages {
    stage('Build') {
        steps {
            wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) {
                sh './gradlew clean build -PsnapshotDeps'
            }
        }
    }
}

输出应包含如下内容:

 [Pipeline] wrap
 Starting xvnc
 [jobname] $ vncserver :96 -localhost -nolisten tcp

添加:如评论中所述,Xvnc 插件从 1.22 开始添加了管道支持。

对于 karma,还可以使用 ChromeHeadless,它根本不需要任何 vnc 服务器。但我不确定这是否也适用于 gradle 业力。