代码之家  ›  专栏  ›  技术社区  ›  finspin

当从Jenkins运行时,将通配符与symlink命令一起使用会创建错误的链接

  •  1
  • finspin  · 技术社区  · 8 年前

    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 文件(位于我的jenkins主机上) /etc/nginx/sites-available )符号链接。

    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"
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   Adam Katz Huang    8 年前

    有时,远程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"
    

    我不是詹金斯的专家。如果这不起作用,我会尝试另一种逃脱,改变你原来的 …/sites-available/* …/sites-available/\\\\*

        2
  •  1
  •   finspin    8 年前

    sh "ssh ubuntu@${host} 'sudo ln -sv /etc/nginx/sites-available/* /etc/nginx/sites-enabled/ -f'"