我无法解决这个问题。我从我的 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), defaultjenkins文件(在我的 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/\\\\*


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!