2017-10-17 185 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