AWS CodePipeline部署到Elastic Beanstalk时CodeBuild的Git子模块丢失
原因分析
- 核心问题是构建产物路径不匹配:你在
pre_build阶段执行Git操作拉取的主仓库代码、子模块文件都存储在CodeBuild的默认工作目录$CODEBUILD_SRC_DIR(对应日志里的/codebuild/output/src/路径)下,但你在artifacts配置中指定的打包根目录为outputDirectory,整个构建流程中没有任何命令将拉取到的完整代码(含子模块)移动或复制到outputDirectory目录下,因此打包时仅能拿到outputDirectory下已有的空目录结构,无法获取子模块的实际文件。 - 次要触发可能:如果你已手动同步代码到
outputDirectory仍有空目录问题,是因为CodeBuild默认打包规则会自动过滤所有.git开头的文件/目录,子模块目录下的.git指针文件被过滤后,打包逻辑会误将子模块目录识别为无有效内容的空目录,跳过内部文件的打包。 - 额外注意:你当前配置里
echo "$config_file" > ~/.ss+-h/config存在笔误,需改为~/.ssh/config避免后续SSH相关操作异常。
修复方案
- 调整路径配置:在
pre_build阶段拉取完子模块后,新增命令将所有代码同步到指定的产物目录,示例命令如下:
mkdir -p outputDirectory && cp -r ./* outputDirectory/
- 开启隐藏文件打包权限:在
artifacts配置段添加dot: true参数,允许打包隐藏文件,避免子模块的.git指针被过滤,修改后的产物配置示例:
artifacts: base-directory: outputDirectory files: - '**/*' - .ebextensions/**/* dot: true
内容的提问来源于stack exchange,提问作者Corn Guy
相关产品推荐
相关产品推荐

