2017-10-17 114 views
0

我有詹金斯管道:多搬运工运行命令

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'. 

我尝试不同的方法才达到多泊坞窗运行命令,但至今没有运气。

也许有人对此有些想法?

+1

删除\\并在每行的末尾添加\。 –

+0

我试过这种方法,但它不起作用。/kernel/ubuntu/vbox/vboxvideo/\ ^ 1错误 – user54

+1

在最后给出一个空格并且只使用单个\和最后一行的一些问题-v/home/jenkins/workspace/test/vms:/ root/VirtualBox \\ VMs/\\ –

回答

0

的问题是使用JSON格式Dockerfile对CMD指令解决。它看起来像容器内的bash有限制,因此bash不能正确处理。我还决定引用Docker API而不是使用命令行项目:https://jenkins.io/doc/book/pipeline/docker

1

这是一个简单的Groovy脚本:

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" 
     } 
} 
+0

WorkflowScript:4:意外字符:'\'@第4行第102列。 -v/dev/vboxdrv:/ dev/vboxdrv \ – user54