我试图让CodePipeline从GitHub获取我的代码并使用CodeBuild构建它。第一个(源)步骤工作正常。但是第二个(Build)步骤在“UPLOAD_ARTIFACTS”部分失败。以下是相关的日志声明:
[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文档无济于事(还有什么是新的?)。如何才能正确上传工件?
答案 0 :(得分:11)
工件应引用从Source操作下载的文件或作为CodePipeline中的Build操作的一部分生成的文件。例如,这是来自我写的buildspec.yml:
artifacts:
files:
- appspec.yml
- target/SampleMavenTomcatApp.war
- scripts/*
当我看到您在工件部分中使用 MyApp 时,我认为您指的是CodePipeline的Source操作的 OutputArtifacts 。相反,你需要参考它下载并存储的文件(即S3)和/或它在那里生成和存储。
您可以在此处找到使用CodePipeline,CodeBuild,CodeDeploy和CodeCommit的CloudFormation模板示例:https://github.com/stelligent/aws-codedeploy-sample-tomcat/blob/master/codebuild-cpl-cd-cc.json buildspec.yml
位于相同的分叉回购中。
答案 1 :(得分:2)
就我而言,我收到此错误是因为我在构建阶段更改了目录(我正在构建的 Java 项目位于子目录中)并且没有更改回根目录。在构建阶段的末尾添加 cd ..
就成功了。
答案 2 :(得分:1)
我遇到了类似的问题,解决此问题的解决方案是“在压缩文件中打包目录和文件,而无需进一步创建根文件夹”。
https://docs.aws.amazon.com/codebuild/latest/userguide/sample-war-hw.html
答案 3 :(得分:1)
Buildspec工件是有关CodeBuild在哪里可以找到构建输出以及CodeBuild如何准备将其上传到Amazon S3输出存储桶的信息。
对于错误“找不到匹配的工件路径”,需要检查的几件事:
artifacts:
files:
-'FileNameWithPath'
希望这会有所帮助。
答案 4 :(得分:0)
工件是您在构建过程中想要的东西-无论是以某种方式进行编译,还是只是从源头直接复制的文件。因此,构建服务器提取代码,按照您的说明进行编译,然后将指定的文件复制到S3中。
在我使用Spring Boot + Gradle的情况下,输出jar文件(当我在自己的系统上gradle bootJar
时)放置在build / libs / demo1-0.0.1-SNAPSHOT.jar中,所以我设置了buildspec.yml中的以下内容:
artifacts:
files:
- build/libs/*.jar
这个文件在S3中为我显示,根据在“工件”部分其余部分中选择的选项,可以选择在zip和/或子文件夹中出现
答案 5 :(得分:0)
尝试使用构建规范的 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/*