docker - 多行docker run命令

标签 docker jenkins-pipeline

我有一个 Jenkins 管道:

    node('some_vm') {
        stage('Build'){

                sh '''\\
                docker run --name my_container --privileged -v /dev/vboxdrv:/dev/vboxdrv\\
                -v /usr/bin/vboxheadless:/usr/bin/vboxheadless\\
                -v /usr/bin/vboxmanage:/usr/bin/vboxmanage\\
                -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxguest/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxguest/\\
                -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxsf/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxsf/\\
                -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxvideo/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxvideo/\\ 
                -v /usr/lib/virtualbox/:/usr/lib/virtualbox/\\
                -v /etc/udev/rules.d/60-vboxdrv.rules:/etc/udev/rules.d/60-vboxdrv.rules\\ 
                -v /sbin/lsmod:/sbin/lsmod\\
                -v /sbin/modprobe:/sbin/modprobe\\ 
                -v /lib/x86_64-linux-gnu/libssl.so.1.0.0:/lib/x86_64-linux-gnu/libssl.so.1.0.0\\
                -v /lib/x86_64-linux-gnu/libcrypto.so.1.0.0:/lib/x86_64-linux-gnu/libcrypto.so.1.0.0\\
                -v /usr/bin/vboxsdl:/usr/bin/vboxsdl\\
                -v /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0:/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0\\
                -v /usr/lib/x86_64-linux-gnu/libcaca.so.0:/usr/lib/x86_64-linux-gnu/libcaca.so.0\\
                -v /lib/x86_64-linux-gnu/libslang.so.2:/lib/x86_64-linux-gnu/libslang.so.2\\
                -v /home/jenkins/workspace/test/:/config/\\
                -v /home/jenkins/workspace/test/vms:/root/VirtualBox\\ VMs/\\
                -e VAGRANT_1 -e VAGRANT_2 -e VAGRANT_3 test_image\\
                '''
        }
}

但是它总是失败并显示错误:
"docker run" requires at least 1 argument(s).
See 'docker run --help'.

我尝试了多种方法来实现多行docker run命令,但到目前为止还没有运气。

也许有人对此有想法?

最佳答案

这是一个简单的常规脚本:

node {
    stage('check java') {
        sh "java -version "
    }
}

shell脚本中的多行:
echo "hello-world" && \
    echo "foo-bar"

然后按“向上”箭头从您的历史记录中获取命令,它将显示;
echo "hello-world" && echo "foo-bar"

重写命令:
node('some_vm') {
        stage('Build'){

                sh "docker run --name my_container --privileged -v /dev/vboxdrv:/dev/vboxdrv \
                -v /usr/bin/vboxheadless:/usr/bin/vboxheadless \
                -v /usr/bin/vboxmanage:/usr/bin/vboxmanage \
                -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxguest/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxguest/ \
                -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxsf/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxsf/ \
                -v /lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxvideo/:/lib/modules/4.4.0-62-generic/kernel/ubuntu/vbox/vboxvideo/ \ 
                -v /usr/lib/virtualbox/:/usr/lib/virtualbox/ \
                -v /etc/udev/rules.d/60-vboxdrv.rules:/etc/udev/rules.d/60-vboxdrv.rules \ 
                -v /sbin/lsmod:/sbin/lsmod \
                -v /sbin/modprobe:/sbin/modprobe \ 
                -v /lib/x86_64-linux-gnu/libssl.so.1.0.0:/lib/x86_64-linux-gnu/libssl.so.1.0.0 \
                -v /lib/x86_64-linux-gnu/libcrypto.so.1.0.0:/lib/x86_64-linux-gnu/libcrypto.so.1.0.0 \
                -v /usr/bin/vboxsdl:/usr/bin/vboxsdl \
                -v /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0:/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0 \
                -v /usr/lib/x86_64-linux-gnu/libcaca.so.0:/usr/lib/x86_64-linux-gnu/libcaca.so.0 \
                -v /lib/x86_64-linux-gnu/libslang.so.2:/lib/x86_64-linux-gnu/libslang.so.2 \
                -v /home/jenkins/workspace/test/:/config/ \
                -v /home/jenkins/workspace/test/vms:/root/VirtualBox \
                -e VAGRANT_1 -e VAGRANT_2 -e VAGRANT_3 test_image"
        }
}

关于docker - 多行docker run命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46796100/

相关文章:

docker - 无法使用 elasticsearch 运行 kibana 和 logstash

python - Black 格式化程序 - 如何仅扫描选定的目录

laravel - Jenkins管道-Laravel单元测试

jenkins - 轮询忽略多分支管道中某些路径中的提交

jenkins - 如何屏蔽 Jenkins 构建历史记录中的参数和密码?

docker - Grafana 配置通知 channel 不起作用

docker - 是否有 Dockerfile 环境指令的替代方案?

ruby - 官方 Ruby 1.9 Docker 镜像在哪里?

docker - 在 centos 7 dockerfile 中安装 java 8

jenkins - Jenkins 管道中的 java.io.NotSerializedException : sun.net.www.protocol.https.HttpsURLConnectionImpl