web-dev-qa-db-ja.com

AWS CodeBuild + CodePipeline: "一致するアーティファクトパスが見つかりません"

CodePipelineにGitHubからコードをフェッチして、CodeBuildでビルドしようとしています。最初の(ソース)ステップは正常に機能します。ただし、「UPLOAD_ARTIFACTS」部分で2番目の(ビルド)ステップが失敗します。関連するログステートメントは次のとおりです。

[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ドキュメントを注いで役に立たないようにしています(他に何が新しいのですか?)。アーティファクトを正しくアップロードするにはどうすればよいですか?

15
John D.

アーティファクトは、ソースアクションからダウンロードされたファイル、またはCodePipelineのビルドアクションの一部として生成されたファイルを参照する必要があります。たとえば、これは私が書いたbuildspec.ymlからのものです。

artifacts:
  files:
    - appspec.yml
    - target/SampleMavenTomcatApp.war
    - scripts/*

アーティファクトセクションでMyAppを使用していることがわかると、OutputArtifactsを参照していると思いますCodePipelineのソースアクション。代わりに、ダウンロードしてそこに保存するファイル(S3など)を参照するか、生成してそこに保存する必要があります。

ここで、CodePipeline、CodeBuild、CodeDeploy、およびCodeCommitを使用するCloudFormationテンプレートのサンプルを見つけることができます。 https://github.com/stelligent/aws-codedeploy-sample-Tomcat/blob/master/codebuild-cpl -cd-cc.jsonbuildspec.ymlは同じフォークされたリポジトリにあります。

12
Paul Duvall

私にも同様の問題があり、問題を修正するための解決策は、「ルートフォルダーを作成せずにアーカイブ内にディレクトリとファイルをパッケージ化する」ことでした。

https://docs.aws.Amazon.com/codebuild/latest/userguide/sample-war-hw.html

1
TechPassionate

Buildspecアーティファクトは、CodeBuildがビルド出力を見つけることができる場所と、Amazon S3出力バケットにアップロードするためにCodeBuildが準備する方法に関する情報です。

「一致するアーティファクトパスが見つかりませんでした」というエラーの場合の確認事項:

  1. Buildspec.ymlファイルで指定されたアーティファクトファイルのパスとファイル名が正しい

artifacts: files: -'FileNameWithPath'

  1. .gitignoreファイルを使用している場合は、Artifactsセクションで指定されたファイルが.gitignoreファイルに含まれていないことを確認してください。

お役に立てれば。

0
Safiqur Rhaman

アーティファクトは、何らかの方法でコンパイルした場合でも、ソースから直接コピーしたファイルだけでも、ビルドプロセスに必要なものです。そのため、ビルドサーバーはコードを取り込み、指示に従ってコンパイルし、指定されたファイルをS3にコピーします。

私の場合、Spring Boot + Gradle、出力jarファイル(私がgradle bootJarこれは自分のシステムでは)build/libs/demo1-0.0.1-SNAPSHOT.jarに配置されているため、buildspec.ymlで次のように設定します。

artifacts:
  files:
    - build/libs/*.jar

この1つのファイルは、S3で表示されます。残りのアーティファクトセクションで選択したオプションに応じて、オプションでZipおよび/またはサブフォルダーに表示されます。

0
Jim ReesPotter