我无法解决这个问题。我从我的 Jenkins 工作中通过 SSH 运行符号链接(symbolic link)命令。在我的 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'
符号链接(symbolic link)是在我的远程主机上创建的,而不是
my-nginx-config符号链接(symbolic link),
default和
jenkins文件(在我的 Jenkins 主机上
/etc/nginx/sites-available )是符号链接(symbolic link)的。
如果我不使用通配符并运行它,它会按预期工作:
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"
请您参考如下方法:
有时远程 ssh 命令(和 scp 的位置)需要额外的转义。我知道您已经引用了您的查询,但您可能需要额外的转义级别(并且因为转义将由您的双引号解释而不是传递给 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"
您还可以将它们组合成一个 SSH 调用:
sh "ssh ubuntu@${host} sudo ls -al /etc/nginx/sites-available; sudo ln -sv /etc/nginx/sites-available/\\* /etc/nginx/sites-enabled/ -f"
我不是 Jenkins 专家。如果这不起作用,我会尝试另一对转义,更改您原来的
…/sites-available/*至
…/sites-available/\\\\*




