我无法解决这个问题。我从我的Jenkins作业通过SSH运行symlink命令。在我的Jenkins管道中,我有这两个步骤(等等)。
sh "ssh ubuntu@${host} sudo ls -al /etc/nginx/sites-available"
sh "ssh ubuntu@${host} sudo ln -sv /etc/nginx/sites-available/* /etc/nginx/sites-enabled/ -f"
这是日志的相关部分:
[Pipeline] sh
[my_job] Running shell script
+ ssh ubuntu@XX.XX.XX.XX sudo ls -al /etc/nginx/sites-available
total 12
drwxr-xr-x 2 root root 4096 Sep 18 17:27 .
drwxr-xr-x 6 root root 4096 Aug 30 12:27 ..
-rw-r--r-- 1 ubuntu ubuntu 467 Sep 18 17:27 my-nginx-config
[Pipeline] sh
[my_job] Running shell script
+ ssh ubuntu@XX.XX.XX.XX sudo ln -sv /etc/nginx/sites-available/default /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/ -f
'/etc/nginx/sites-enabled/default' -> '/etc/nginx/sites-available/default'
'/etc/nginx/sites-enabled/jenkins' -> '/etc/nginx/sites-available/jenkins'
符号链接是在我的远程主机上创建的,而不是my-nginx-config
符号链接,default
和jenkins
文件(位于/etc/nginx/sites-available
的jenkins主机上)是符号链接的
如果我不使用通配符并运行它,它会按预期工作:
sh "ssh ubuntu@${host} sudo ls -al /etc/nginx/sites-available"
sh "ssh ubuntu@${host} sudo ln -sv /etc/nginx/sites-available/my-nginx-conf /etc/nginx/sites-enabled/ -f"
答案 0 :(得分:1)
有时远程ssh命令(以及scp的位置)需要额外的转义。我知道你已经引用了你的查询,但是你可能还需要一个额外的转义级别(并且因为转义将被你的双引号解释而不是传递给SSH命令,你还需要一个。
尝试双重转义那个通配符:
recur (b, b + 1)
您也可以将这些组合成一个SSH呼叫:
sh "ssh ubuntu@${host} sudo ls -al /etc/nginx/sites-available"
sh "ssh ubuntu@${host} sudo ln -sv /etc/nginx/sites-available/\\* /etc/nginx/sites-enabled/ -f"
我不是詹金斯专家。如果这不起作用,我会尝试另一对转义,将原来的sh "ssh ubuntu@${host} sudo ls -al /etc/nginx/sites-available; sudo ln -sv /etc/nginx/sites-available/\\* /etc/nginx/sites-enabled/ -f"
更改为…/sites-available/*
答案 1 :(得分:1)
需要引用远程命令(尽管大多数命令都没有引号):
sh "ssh ubuntu@${host} 'sudo ln -sv /etc/nginx/sites-available/* /etc/nginx/sites-enabled/ -f'"