如何从Jenkins Pipeline使用Xvnc插件

时间:2018-07-27 16:59:22

标签: jenkins jenkins-plugins 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

我的(被截断的)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'
      }
    }
  }
}

我怀疑我需要以某种方式用Xvnc包装器封装gradle步骤,但是没有一个比我在这里尝试过的选项更成功了。

1 个答案:

答案 0 :(得分:2)

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开始添加了管道支持。

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