我使用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正在使用超过一半的文件路径,因为超出了限制
答案 0 :(得分:4)
您是否从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 / Amazon / CodeDeploy / 4fbb84fd-caa5-4d1a-9894-16b25abcea76 / d-QUPXMDBCF / deployment-archive-temp"
只需尝试直接在&deployment; archive-archive-temp'下提取您的修订zip文件。夹。 对于超过最大路径长度260的文件,您应该收到以下错误: '错误0x80010135:路径太长'
参考:https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx#maxpath
我希望这会有所帮助。
答案 1 :(得分:1)
虽然不是一个完整的解决方案,但我遇到了同样的问题,我们能够删除前面的'ProgramData \ Amazon \ CodeDeploy'以保存29个字符,如果你可以忍受根文件夹中的混乱。
为此,我们修改了位于c:\ programdata \ amazon \ codedeploy \
中的conf.yml文件我更改了... root_dir:'Amazon \ CodeDeploy'... to ... root_dir:'C:\'
答案 2 :(得分:0)
如果您使用的是Windows 2016,请将以下注册表项的值设置为1将解决路径较长的问题。
HKLM:SYSTEM\CurrentControlSet\Control\FileSystem
引用iskandar's post可以通过powershell脚本来完成,如果您希望以启动脚本之类的方式将其自动化。
# @see https://github.com/aws/aws-codedeploy-agent/issues/46
# @see https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#paths
Write-Verbose "----> Enabling Long Path Support"
$RegistryPath = "HKLM:SYSTEM\CurrentControlSet\Control\FileSystem"
$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
您还可以使用this post中概述的GUI方法。
注意-两种方法都肯定需要重新启动才能使设置生效