我正在尝试将现有的Jenkins作业移植到Jenkinsfile。在大多数情况下,这很好,但是我一直无法弄清楚如何使用Xvnc插件。在旧的Jenkins作业中,插件配置为
需要哪些设置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步骤,但是没有一个比我在这里尝试过的选项更成功了。
答案 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业力。