AWS CodeBuild报错:CLIENT_ERROR 未找到匹配的工件路径
问题排查:AWS CodeBuild "no matching artifact paths found" 错误
核心问题分析
从构建日志可见,POST_BUILD阶段显示"成功",但实际上因为buildspec的YAML缩进语法错误,POST_BUILD中生成imagedefinitions.json的命令并未实际执行,导致CodeBuild在上传工件时找不到目标文件。
具体错误点修复
1. 修复YAML缩进错误
你的buildspec里,build和post_build节点被错误嵌套在pre_build节点下(缩进与pre_build内的commands对齐),但它们应该是phases下的同级节点,和pre_build处于同一层级。这种缩进错误会导致build和post_build阶段的命令完全不被执行。
2. 修复printf命令的引号转义问题
原命令中的"是HTML转义字符,bash无法识别,需替换为普通双引号,同时用单引号包裹printf的模板字符串避免转义冲突。
修正后的完整buildspec
version: 0.2 phases: pre_build: commands: - echo Logging in to Amazon ECR... - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com - REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-7) - IMAGE_TAG=${COMMIT_HASH:=latest} build: commands: - echo Build started on `date` - echo Building the Docker image... - docker build -t $REPOSITORY_URI:latest . - docker tag $REPOSITORY_URI:latest $REPOSITORY_URI:$IMAGE_TAG post_build: commands: - echo Build completed on `date` - echo Pushing the Docker image... - docker push $REPOSITORY_URI:latest - docker push $REPOSITORY_URI:$IMAGE_TAG - echo Writing image definitions file... - printf '[{"name":"%s","imageUri":"%s"}]' "$IMAGE_REPO_NAME" "$REPOSITORY_URI:$IMAGE_TAG" > imagedefinitions.json artifacts: files: imagedefinitions.json
验证逻辑
修正后:
build和post_build阶段会被正确触发执行,POST_BUILD中的printf命令会在CodeBuild默认工作目录(源码根目录)生成imagedefinitions.json- UPLOAD_ARTIFACTS阶段可正常找到目标文件,不会再抛出路径匹配错误
内容的提问来源于stack exchange,提问作者Kunal Koli
相关产品推荐
相关产品推荐

