我正在使用Jenkins / ant将我的应用程序部署到远程服务器。
我遇到了ant <scp>
任务的问题,试图scp由通配符指定的一组目录(例如scp -r my / path /和/ directory_ * user @ remote:/ remote / path /到/目录),所以我一直在尝试使用<exec>
任务来运行它。
见下面的代码:
<property name="built_directories" value="${workspace}/build_\*" />
<exec dir="${workspace}" executable="scp" failonerror="true">
<arg line="-r -i ${user.home}/.ssh/id_rsa ${built_directories} deployer@@@{SERVER}:${remote_build_dir}"></arg>
</exec>
Jenkins / ant给了我错误:
[exec] / var / lib / jenkins / jobs / app-head-stage-deployment / workspace / build_ *:没有这样的文件或目录
我也尝试过以下操作,但收到同样的错误:
<exec dir="${workspace}" executable="scp" failonerror="true">
<arg value="-r"></arg>
<arg value="-i"></arg>
<arg value="${user.home}/.ssh/id_rsa"></arg>
<arg value="${built_directories}"></arg>
<arg value="deployer@@@{SERVER}:${remote_build_dir}"></arg>
</exec>
我一直想弄清楚我是否需要以某种方式逃避星号以便shell正确解析它,但是没有找到太多信息。
编辑:
试用@ whiskeyspider的配置,见下文:
<exec dir="${workspace}" executable="sh" failonerror="true">
<arg value="-c" />
<arg value="scp" />
<arg value="-r" />
<arg value="-i" />
<arg value="${user.home}/.ssh/id_rsa" />
<arg value="${built_directories} deployer@@@{SERVER}:${remote_build_dir}" />
</exec>
我已尝试将最后一个arg拆分为单独的<arg>
元素,但现在我收到以下错误:
[exec]用法:scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [exec] [-l limit] [-o ssh_option] [-P port] [-S program] [exec] [[user @] host1:] file1 ... [[user @] host2:] file2
我猜这意味着它无法正确识别这些论点。
答案 0 :(得分:1)
您需要启动一个shell,以便扩展通配符。例如:
<exec executable="sh">
<arg value="-c"/>
<arg value="scp"/>
...
</exec>