Amazon web services AWS代码构建&x2B;代码管道:“;未找到匹配的工件路径";

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

我正在尝试让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 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输出存储桶的信息

对于错误“未找到匹配的工件路径”,需要检查以下几点:

  • buildspec.yml文件中指定的工件文件具有正确的路径和文件名。
  • 工件:
    文件夹:
    -“FileNameWithPath”

  • 如果您使用的是.gitignore文件,请确保在“工件”部分中指定了文件 .gitignore文件中不包含

  • 希望这有帮助。

    在我的例子中,我收到了这个错误,因为我在构建阶段更改了目录(我正在构建的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的快速响应。我想试试。我真的很感谢你的帮助。