Jenkinsfile无法使用多个参数运行docker

时间:2017-05-24 12:36:09

标签: docker jenkins jenkins-pipeline

在我的jenkinsfile中,我有这个

    stage ('Build Docker') {
        steps {
            script {
                image1 = docker.build "docker1:${BRANCH_NAME}"
            }

            script {
                image2 = docker.build "docker2:${BRANCH_NAME}"
            }
        }
    }

    stage ('Run Docker Acceptance Tests') {
        steps {

                script {
                    container1 = image1.run "-v /tmp/${BRANCH_NAME}:/var/lib/data"
                    container1Id = container1.id

                    container1IP = sh script: "docker inspect ${container1Id} | grep IPAddress | grep -v null| cut -d \'\"\' -f 4 | head -1", returnStdout: true
                }

                //let containers start up
                sleep 20

                script {
                    container2= image2.run("-v /tmp/${BRANCH_NAME}:/var/lib/data --add-host=MY_HOST:${container1IP}")
                }

            }
        }

当它运行container2时,我得到了这个输出。

[resources] Running shell script
00:01:33.775 + docker run -d -v /tmp/master:/var/lib/data --add-host=MY_HOST:172.17.0.3
00:01:33.775 "docker run" requires at least 1 argument(s).
00:01:33.775 See 'docker run --help'.

显然,在运行docker镜像时,它不会附加容器名称。

我尝试在IP地址中进行硬编码以测试它是否像这样工作

container2= image2.run("-v /tmp/${BRANCH_NAME}:/var/lib/data --add-host=MY_HOST:172.17.0.3")

然后它正常工作并正确运行命令

00:00:29.386 [resources] Running shell script
00:00:29.641 + docker run -d -v /tmp/master:/var/lib/data --add-host=MY_HOST:172.17.0.3 docker-name:branch

我不明白为什么它没有拿起容器图像名称。

我甚至尝试过这样做 - 得到同样的错误

container2= image2.run("-v /tmp/${BRANCH_NAME}:/var/lib/data --add-host=MY_HOST:${container1IP} docker2:${BRANCH_NAME}")

我尝试的最后一步

sh "docker run -v /tmp/${BRANCH_NAME}:/var/lib/data --add-host=MY_HOST:${container1IP} docker2:${BRANCH_NAME}"

在解决$ {container1IP}

之后,似乎它正在剥离最终命令

1 个答案:

答案 0 :(得分:2)

设法修复它,这是由于隐藏的新行char

container1IP = sh (script: "docker inspect ${container1Id} | grep IPAddress | grep -v null| cut -d \'\"\' -f 4 | head -1", returnStdout: true).trim()

修剪var修复它