我正在使用AWS Codedeploy将我的代码从GitHub部署到AWS EC2实例(Windows 2008服务器)。DownloadBundle事件中的部署失败
AWS日志中的错误堆栈:
No such file or directory - C:ProgramData/Amazon/CodeDeploy/4fbb84fd-caa5-4d1a-9894-16b25abcea76/d-QUPXMDBCF/deployment-archive-temp/My-Application-163e9d3343be82038fe2e5c58a9fcae86683d4ea/src/main/java/com/myapp/dewa/customexceptions/EventNotPublishedException.java
这里的问题可能是windows的文件路径限制。
更新:AWS CodeDeploy支持团队已确认这是他们方面的限制。CodeDeploy正在使用超过一半的文件路径,因为超出了的限制
是否替换了file_path和/或file_name中的一些字符串?
当file_path的总长度超过260个字符时会出现此错误。此长度在末尾包含一个用于终止的空字符。你的总长度是239+1=240。
如需参考,请参阅本文:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
如果检查目标中的路径,则不应看到该文件,因为该文件未被复制,但位于修订版zip文件中。
就我而言,总长度为266。可能无法缩短修订版中实际文件路径的字符串,因为其中许多字符串是由开发人员工具创建的。亚马逊现在正在进行投资,看看如何克服这一问题。
您可以通过以下操作进行测试和确认:
-
在命令提示符下运行以下命令以创建部署归档文件夹:mkdir"c:\ProgramDat0/Aamazon/CodeDeploy/4fbb84fd-caa5-4d1a-9894-16b25abcea76/d-QUPXMDBCF/部署档案临时">
-
只需尝试直接在"deployment archive temp"文件夹下提取修订版zip文件。对于文件超过260的最大路径长度,您应该收到以下错误:"错误0x80010135:路径太长">
参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
我希望这能有所帮助。
虽然不是一个完整的解决方案,但我也遇到过同样的问题,如果你能忍受根文件夹中的混乱,我们可以删除前面的"ProgramData\Amazon\CodeDeploy"来保存29个字符。
为此,我们修改了位于c:\programdata\aamazon\codeploy\中的conf.yml文件
我变了。。。root_dir:'Amazon\CodeDeploy'。。。到root_dir:'C:\'
如果您使用的是Windows 2016,将以下注册表项的值设置为1将解决长路径问题。
HKLM:SYSTEMCurrentControlSetControlFileSystem
参考iskandar的帖子,如果你想在启动脚本中自动化它,可以通过powershell脚本来完成。
# @see https://github.com/aws/aws-codedeploy-agent/issues/46
# @see https://learn.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#paths
Write-Verbose "----> Enabling Long Path Support"
$RegistryPath = "HKLM:SYSTEMCurrentControlSetControlFileSystem"
$Name = "LongPathsEnabled"
New-ItemProperty -Path $RegistryPath -Name $Name -Value 1 -PropertyType DWORD -Force | Out-Null
# You'll want to reboot to make sure; this is Windows we're working with.
Restart-Computer
您还可以使用本文中概述的GUI方法。
注意-任何一种方法都肯定需要重新启动才能使设置生效