为什么后构build步骤(xcopy)会偶尔退出TeamCity构build中的代码2?
客户端解决scheme中的一些项目具有生成后事件:将生成输出复制到特定文件夹。 这在当地build设时工作正常。 但是,在TeamCity中,我偶尔会得到
xcopy退出代码2
如果我使用常规copy
,它将退出代码1.我希望这与文件locking有关,虽然被复制的特定文件是不一样的,所以也许只是locking共享的目标目录。 我用/y
不提示覆盖文件。
任何想法为什么这在TeamCity失败,但不是在本地? 任何想法如何解决?
即使你用xcopy提供/Y
开关,当xcopy不知道你正在复制的东西是一个文件还是一个目录时,你仍然会得到一个错误。 此错误将显示为“退出代码2”。 当您在命令提示符下运行相同的xcopy时,您会看到xcopy正在请求文件或目录的响应。
要使用自动构build来解决此问题,可以使用pipe道在预定义的响应中回显。
说你正在复制的东西是一个文件,在F
:
echo F|xcopy /y ...
说你正在复制的东西是一个directoy,在D
:
echo D|xcopy /y ...
有时上述可以通过使用复制命令而不是xcopy来解决:
copy /y ...
但是,如果有不存在的目录导致最终的文件目的地,那么将会出现“用代码1退出”。
记住:谨慎使用/C
开关和xcopy。
如果在后期构build事件中使用xcopy,则除了/ C之外,还要使用/ Y开关。
/C Continues copying even if errors occur. /Y Suppresses prompting to confirm you want to overwrite an existing file.
我通过在我的path的末尾添加\来修复错误代码2,没有它,xcopy会认为它是一个文件而不是文件夹。
我对这个问题的解决方法是进入目标bin文件夹,并确保在那里存在适当的子文件夹。 一旦该子文件夹被手动创build,构build过程就成功完成。
可能你使用TeamCity与Git。 如果是,请检查您想要复制的文件夹是否存在于git存储库中。 通常git aviod添加空的项目文件夹到存储库,所以xcopy无法find它,并产生一个错误。
您可以添加一些空的txt文件到空文件夹,提交并看到文件夹出现在存储库中。
希望这会有所帮助。