[英]How to forward x11 to Docker container in Jenkins declarative pipeline
我正在嘗試將我的Jenkins管道切換為使用docker構建和運行測試。 如何在Docker容器周圍設置Xvnc?
當前,該構建可在任何可用的VM上運行。 我在gradle build命令周圍使用wrap([$ class:'Xvnc',...])來設置DISPLAY,如下所示。
// 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步驟,而不是在“代理”部分中添加docker配置: https ://jenkins.io/doc/pipeline/steps/docker-workflow。
在“步驟”部分制作腳本,例如:
wrap(xvnc) {
withDockerRegistry(...) {
withDockerContainer(...) {
sh
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.