簡體   English   中英

使用Jenkinsfile以“sidecar”模式運行兩個docker容器

[英]Running two docker containers in “sidecar” mode with Jenkinsfile

我必須以sidecar模式運行兩個docker容器。 我花了幾天時間試圖實現正確的管道,但我現在處於絕望狀態,因為我的想法實際上都沒有。

首先,我已經閱讀了這個塊運行邊車容器

它實現了node {}塊內的方法。 以下是我的管道現在的樣子:

pipeline {
agent any

options {
    disableConcurrentBuilds()
}

stages {
    stage("Obtain images") {
        steps {
            script {
                    writeFile(file: './ui-tests/env.yaml', text: "environment:\n  # dev or stage\n  type: dev\n  lang: en\n")
                    withDockerRegistry([credentialsId: 'my-hub', url: 'https://myhub.hub']) {
                        def selena = docker.image('myhub.hub/selenium-dev:latest')
                        def uirun = docker.image('myhub.hub/ui-shell-runner:latest')
                        selena.pull()
                        uirun.pull()
                    }

            }
        }
    }

    stage("Run tests") {
       steps {
        node('pyrunner') { 
                docker.image('myhub.hub/selenium-dev').withRun('-e JAVA_OPTS=-Xmx1024m') { test ->
                    docker.image('myhub.hub/selenium-dev').inside("--link ${test.id}:se") {
                        sh 'pwd'
                    }

                    docker.image('myhub.hub/ui-shell-runner:latest').inside("--link ${test.id}:se") {
                            sh 'cd ui-tests ; pwd ; nose2 -v --attribute desktop-site,type=smoke'
                        }
                }
        }
        }
        }
    }
}

這是個主意。 第一個容器有selenium myhub.hub / selenium-dev - 在后台運行,第二個容器myhub.hub / ui-shell-runner包含使用第一個容器的nose2實用程序。 我試圖實現節點 ,試圖完全刪除它並將我的代碼移動到步驟中 ,我試圖刪除所有內容並通過sh'docker container run ...運行我的容器(雖然這不好)。 我的想法實際上並沒有像我期望的那樣有效。 和上市的管道崩潰

    WorkflowScript: 28: Expected a symbol @ line 28, column 6.
                    docker.image('myhub.hub/selenium-dev').withRun('-e JAVA_OPTS=-Xmx1024m') { test ->

WorkflowScript: 28: Arguments to "error" must be explicitly named. @ line 28, column 6.
                    docker.image('myhub.hub/selenium-dev').withRun('-e JAVA_OPTS=-Xmx1024m') { test ->

我沒有想法。 接下來我要做什么?

這是適用於我的代碼。 感謝Denis Khokhryakov的幫助和建議! 在這個例子中,“se” - 是第一個selenium容器的dns名稱,我們可以在第二個客戶端容器中使用它來連接。

pipeline {
agent any

options {
    disableConcurrentBuilds()
}

stages {
    stage("Obtain images") {
        steps {
            script {
                writeFile(file: './ui-tests/env.yaml', text: "environment:\n  # dev or stage\n  type: dev\n  lang: en\n")
                withDockerRegistry([credentialsId: 'my-hub', url: 'https://myhub.hub']) {
                    def selena = docker.image('myhub.hub/selenium-dev:latest')
                    def uirun = docker.image('myhub.hub/ui-shell-runner:latest')
                    selena.pull()
                    uirun.pull()
                }
            }
        }
    }

    stage("Run tests") {
        steps {
            script { 
                docker.image('myhub.hub/selenium-dev').withRun('-e JAVA_OPTS=-Xmx1024m') { test ->
                    docker.image('myhub.hub/selenium-dev').inside("--link ${test.id}:se") {
                        sh 'pwd'
                    }

                    docker.image('myhub.hub/ui-shell-runner:latest').inside("--link ${test.id}:se") {
                        sh 'cd ui-tests ; pwd ; nose2 -v --attribute desktop-site,type=smoke'
                    }
                }
            }
        }
    }
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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