簡體   English   中英

如何在Jenkins聲明式管道中將x11轉發到Docker容器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM