在apache ant脚本中,我有宏:
<macrodef name = "git">
<attribute name = "command" />
<attribute name = "options" />
<attribute name = "dir" default = "" />
<attribute name="failonerror" default="false"/>
<sequential>
<echo message = "GIT Command: git @{command} @{options}, dir: @{dir}" />
<exec executable = "C:Gitcmdgit.exe" dir = "@{dir}">
<arg value = "@{command}" />
<arg value = "@{options}" />
</exec>
</sequential>
</macrodef>
稍后我会打电话给:
<git command = "pull" options = '-v' dir = "subfolder/subsubfolder" failonerror = "true"/>
但是,当我用dir作为subfolder/subsubfolder
或C:directpathtosubfoldersubsubfolder
开始我的Hudson作业时,我的作业就停留在它上面,我在控制台输出中只得到echo。甚至没有任何错误。Hudson安装在装有Windows XP的机器上。
我试着在Windows CMD中使用这个命令——当我在repo文件夹时,它就可以工作了,如下所示:
C:directpathtosubfoldersubsubfolder>C:Gitcmdgit.exe pull -v
我做错了什么?有什么方法可以更好地集成git和ant?
一些新注释:
- 如果我试图在坏目录中执行git pull,我会出错
- 如果我尝试执行git签出,它会起作用
- 如果我试图执行git fetch,它会像git pull一样挂起
另一个版本,也许有一些线索:我将Git直接调用改为一个包含Git命令的.bat文件。只需一些CD
就可以到达目录,然后是git pull
。当我运行脚本时,它只是工作得很好。但它永远挂在哈德逊。也许是Java中调用git子流程需要一些环境变量?Git使用SSH无功耗连接,后台没有任何代理。
如果它"挂起",可能会有一个交互式提示,Jenkins无法处理。
尝试在最后将<arg line="> out.txt 2>&1"/>
添加到exec
中。这将把所有内容重定向到一个文件,以便在它再次挂起后,终止作业,并查看该文件的内容out.txt
请注意,您需要转义>
和&
,因此它将是:<arg line="> out.txt 2>&1"/>