如何在 Jenkins 声明管道中将 x11 转发到 Docker 容器
How to forward x11 to Docker container in Jenkins declarative pipeline
我正在尝试将我的 Jenkins 管道切换为使用 docker 构建和 运行 测试。我如何围绕 docker 容器设置 Xvnc?
当前在任何可用的 VM 上构建 运行。我在 gradle 构建命令周围使用 wrap([$class: 'Xvnc', ...]) 来设置显示,如下所示。
// Original working pipeline
pipeline {
agent any
stages {
// ... some scm checkout logic
stage("Build") {
steps {
wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) {
sh './gradlew build'
}
}
}
}
}
它工作正常。
显然,如果我不使用 wrap([$class: 'Xvnc', ...]) 那么我的测试就会失败,因为没有设置 DISPLAY 等
我希望我可以添加一个代理 { docker } 块(使用适当的设置)并且它会起作用。
如果我这样做,然后 wrap([$class: 'Xvnc', ...]) 在容器内执行,这是有道理的,但不是我想要的。我收到各种明显的错误,例如未安装 vncserver 等。
无论如何,据我所知,这个 wrap([$class: 'Xvnc', ...]) 调用需要绕过 "Build" 阶段,这将使代理{ docker } 块。
问题是我不认为我可以做这样的事情:
stages {
wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) {
stage("Build") {
agent {
docker {
image 'my_image'
// some more config, DISPLAY, xsocket, xauth, etc.
}
}
steps {
sh './gradlew build'
}
}
}
}
至少没用。我收到如下错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 38: Expected a stage @ line 38, column 9.
wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) {
还有其他方法可以实现吗?
您可以使用此处的 docker jenkins 步骤,而不是在 "agent" 部分添加 docker 配置:https://jenkins.io/doc/pipeline/steps/docker-workflow.
在"steps"部分制作脚本如:
wrap(xvnc) {
withDockerRegistry(...) {
withDockerContainer(...) {
sh
}
}
}
我正在尝试将我的 Jenkins 管道切换为使用 docker 构建和 运行 测试。我如何围绕 docker 容器设置 Xvnc?
当前在任何可用的 VM 上构建 运行。我在 gradle 构建命令周围使用 wrap([$class: 'Xvnc', ...]) 来设置显示,如下所示。
// Original working pipeline
pipeline {
agent any
stages {
// ... some scm checkout logic
stage("Build") {
steps {
wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) {
sh './gradlew build'
}
}
}
}
}
它工作正常。 显然,如果我不使用 wrap([$class: 'Xvnc', ...]) 那么我的测试就会失败,因为没有设置 DISPLAY 等
我希望我可以添加一个代理 { docker } 块(使用适当的设置)并且它会起作用。
如果我这样做,然后 wrap([$class: 'Xvnc', ...]) 在容器内执行,这是有道理的,但不是我想要的。我收到各种明显的错误,例如未安装 vncserver 等。
无论如何,据我所知,这个 wrap([$class: 'Xvnc', ...]) 调用需要绕过 "Build" 阶段,这将使代理{ docker } 块。
问题是我不认为我可以做这样的事情:
stages {
wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) {
stage("Build") {
agent {
docker {
image 'my_image'
// some more config, DISPLAY, xsocket, xauth, etc.
}
}
steps {
sh './gradlew build'
}
}
}
}
至少没用。我收到如下错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 38: Expected a stage @ line 38, column 9.
wrap([$class: 'Xvnc', takeScreenshot: false, useXauthority: true]) {
还有其他方法可以实现吗?
您可以使用此处的 docker jenkins 步骤,而不是在 "agent" 部分添加 docker 配置:https://jenkins.io/doc/pipeline/steps/docker-workflow.
在"steps"部分制作脚本如:
wrap(xvnc) {
withDockerRegistry(...) {
withDockerContainer(...) {
sh
}
}
}