這是不可能建立與SCP任務遠程目錄。 這裏是一個scptransfer的宏指令,它可以完成從給定的stagedirectory傳輸 所需的所有工作=>修復換行,createremote,deleteremote,ifdist如果stagedir爲空......等等 Macrodef正在使用ant插件Flaka, t需要所有的花裏胡哨的東西,只需在scp之前使用sshexec task與mkdir -p
來創建遠程目標。
<project xmlns:fl="antlib:it.haefelinger.flaka">
<fl:install-property-handler/>
<macrodef name="scptransfer">
<attribute name="host" default="${aix.host}"/>
<attribute name="userid" default="${aix.userid}"/>
<attribute name="knownhosts" default="${aix.knownhosts}"/>
<attribute name="ppk" default="${aix.ppk}"/>
<attribute name="createremote" default="false"/>
<attribute name="remotedir" default="${eartarget}/${project}/${env}/${module}/${job.id}"/>
<attribute name="deleteremote" default="false"/>
<attribute name="deleteincludes" default="*"/>
<attribute name="stagedir" default="${artifactdir}/${module}"/>
<attribute name="stageincludes" default="**/*.*"/>
<attribute name="stageexcludes" default=""/>
<attribute name="failstageempty" default="true"/>
<attribute name="fixLF" default="false"/>
<attribute name="timeout" default="900000"/>
<attribute name="verbose" default="true"/>
<sequential>
<echo>
=============== SCP Transfer ===============
Project = ${project}
Environment = ${env}
UserID = @{userid}
Targetserver = @{host}
Targetpath = @{remotedir}
fixLF ? = @{fixLF}
createremote ? = @{createremote}
deleteremote ? = @{deleteremote}
#{@{deleteremote} ? 'deleteincludes = @{deletecincludes}' : '' }
Stagedir = @{stagedir}
stageincludes = @{stageincludes}
stageexcludes = @{stageexcludes}
=============== SCP Transfer ===============
</echo>
<!-- contents in stagedir ? -->
<resourcecount property="stagecount">
<fileset dir="@{stagedir}" includes="@{stageincludes}" excludes="@{stageexcludes}" id="stagecontents"/>
</resourcecount>
<fl:choose>
<fl:when test=" ${stagecount} > 0 ">
<!-- Fix Linefeeds for ASCII Files -->
<fl:when test=" @{fixLF} ">
<fixcrlf
excludes="**/*.jar **/*.tar **/*.zip **/*.ear **/*.class"
srcdir="@{stagedir}"
eol="lf"
eof="remove"
fixlast="true"
/>
</fl:when>
<!-- // T i m e o u t -->
<parallel threadcount="1" timeout="@{timeout}">
<!-- create remotedir ? -->
<fl:when test=" @{createremote} ">
<sshexec host="@{host}"
username="@{userid}"
knownhosts="@{knownhosts}"
keyfile="@{ppk}"
command="mkdir -p @{remotedir}"
/>
</fl:when>
<!-- delete contents in remotedir ?
will throw error if remotedir doesn't exist ! -->
<fl:when test=" @{deleteremote} ">
<sshexec host="@{host}"
username="@{userid}"
knownhosts="@{knownhosts}"
keyfile="@{ppk}"
command="cd @{remotedir};rm -rfe @{delfilepattern}"
/>
</fl:when>
<!-- Filetransfer from stagedir -->
<scp todir="@{userid}@@@{host}:@{remotedir}"
keyfile="@{ppk}"
knownhosts="@{knownhosts}"
sftp="true"
verbose="@{verbose}"
>
<fileset refid="stagecontents"/>
</scp>
</parallel>
<!-- T i m e o u t // -->
</fl:when>
<fl:otherwise>
<echo>
=============== SCP Transfer =============
Skip => NO StageDirContents !!
=============== SCP Transfer =============
</echo>
<fl:fail message="Stagedir [@{stagedir}] empty !!" test=" @{failstageempty} "/>
</fl:otherwise>
</fl:choose>
</sequential>
</macrodef>
</project>
當我們切換到Github上最近纔拿到手冊here和一些例子here。