Amazon web services AWS代码构建&x2B;代码管道:“;未找到匹配的工件路径";
我正在尝试让CodePipeline从GitHub获取代码,并使用CodeBuild进行构建。第一步(源代码)工作正常。但是第二步(构建)在“上传工件”部分失败。以下是相关的日志声明:Amazon web services AWS代码构建&x2B;代码管道:“;未找到匹配的工件路径";,amazon-web-services,aws-codepipeline,aws-codebuild,Amazon Web Services,Aws Codepipeline,Aws Codebuild,我正在尝试让CodePipeline从GitHub获取代码,并使用CodeBuild进行构建。第一步(源代码)工作正常。但是第二步(构建)在“上传工件”部分失败。以下是相关的日志声明: [Container] 2017/01/12 17:21:31 Assembling file list [Container] 2017/01/12 17:21:31 Expanding MyApp [Container] 2017/01/12 17:21:31 Skipping invalid artifac
[Container] 2017/01/12 17:21:31 Assembling file list
[Container] 2017/01/12 17:21:31 Expanding MyApp
[Container] 2017/01/12 17:21:31 Skipping invalid artifact path MyApp
[Container] 2017/01/12 17:21:31 Phase complete: UPLOAD_ARTIFACTS Success: false
[Container] 2017/01/12 17:21:31 Phase context status code: ARTIFACT_ERROR Message: No matching artifact paths found
[Container] 2017/01/12 17:21:31 Runtime error (No matching artifact paths found)
我的应用程序的根文件夹中有一个buildspec.yml。它看起来像:
version: 0.1
phases:
build:
commands:
- echo `$BUILD_COMMAND`
artifacts:
discard-paths: yes
files:
- MyApp
我的buildspec.yml中的“MyApp”看起来应该有所不同,但我浏览了所有的AWS文档,但都没有用(还有什么新内容?)。如何让它正确上传工件?工件应该引用从源操作下载的文件或作为CodePipeline中构建操作的一部分生成的文件。例如,这是我在buildspec.yml中写的:
artifacts:
files:
- appspec.yml
- target/SampleMavenTomcatApp.war
- scripts/*
当我看到您在工件部分使用了MyApp时,我觉得您指的是CodePipeline源操作的OutputArtifacts。相反,您需要参考它下载并存储在那里的文件(即S3)和/或它生成并存储在那里的文件
您可以在此处找到使用CodePipeline、CodeBuild、CodeDeploy和CodeCommit的CloudFormation模板的示例:
buildspec.yml
位于同一分叉repo中。我也遇到过类似问题,解决此问题的解决方案是“在存档中打包目录和文件,而无需进一步创建根文件夹”
工件是您希望从构建过程中获得的东西—无论是以某种方式编译的还是直接从源代码复制的文件。因此,构建服务器提取代码,按照您的说明进行编译,然后将指定的文件复制到S3 在我使用Spring Boot+Gradle的情况下,输出jar文件(当我在自己的系统上使用Gradle bootJar时)放在build/libs/demo1-0.0.1-SNAPSHOT.jar中,因此我在buildspec.yml中设置了以下内容:
artifacts:
files:
- build/libs/*.jar
这一个文件在S3中显示,根据工件部分剩余部分中选择的选项,可选地显示在zip和/或子文件夹中。Buildspec工件是有关CodeBuild在何处可以找到构建输出以及CodeBuild如何准备将其上载到Amazon S3输出存储桶的信息 对于错误“未找到匹配的工件路径”,需要检查以下几点:
工件:
文件夹:
-“FileNameWithPath”
希望这有帮助。在我的例子中,我收到了这个错误,因为我在构建阶段更改了目录(我正在构建的java项目位于子目录中),并且没有更改回根目录。在构建阶段结束时添加
cd..
成功了。尝试使用buildspec的0.2版
下面是一个典型的nodejs示例
version: 0.2
phases:
pre_build:
commands:
- echo Nothing to do in the pre_build phase...
build:
commands:
- npm install
- npm run build
post_build:
commands:
- echo Build completed on
artifacts:
files:
- appspec.yml
- build/*
“您需要参考它下载并存储在那里的文件(即S3)和/或它生成并存储在那里的文件”,这是有道理的,但我如何知道这些值的名称呢?我查看了源操作的S3 bucket,它们似乎是随机生成的名称。对不起,我认为我的S3引用有点混乱。为了澄清这一点,在buildspec的artifacts/files部分,您将列出用于从源存储库构建的文件(即GitHub中的文件,而不是从CodePipeline生成的随机生成的名称)以及从构建过程生成的任何相关文件。根据提供的信息不清楚您正在构建哪种语言/平台。啊,我现在明白了。伙计,这些工具的文档真是令人难以置信的混乱。谢谢“找不到匹配的工件路径”这句话很让人困惑。你明白了吗?我的nodejs应用程序也面临着同样的问题。如果你能帮忙的话。@Jeet是的,我想我需要使用“*/”作为源代码,或者类似的东西。查找“工件”部分:感谢John的快速响应。我想试试。我真的很感谢你的帮助。