web-dev-qa-db-fra.com

AWS CodeBuild + CodePipeline: "Aucun chemin d'artefact correspondant trouvé"

J'essaye d'obtenir que CodePipeline récupère mon code depuis GitHub et le construise avec CodeBuild. La première étape (source) fonctionne bien. Mais la deuxième étape (Build) échoue lors de la partie "UPLOAD_ARTIFACTS". Voici les instructions de journal pertinentes:

[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)

Mon application a un buildspec.yml dans son dossier racine. On dirait:

version: 0.1

phases:
  build:
    commands:
      - echo `$BUILD_COMMAND`

artifacts:
  discard-paths: yes
  files:
    - MyApp

Il semblerait que le "MyApp" dans mon buildspec.yml devrait être quelque chose de différent, mais je déverse tous les documents AWS en vain (quoi d'autre est nouveau?). Comment puis-je l'obtenir pour télécharger correctement l'artefact?

15
John D.

Les artefacts doivent faire référence aux fichiers téléchargés à partir de votre action Source ou générés dans le cadre de l'action Générer dans CodePipeline. Par exemple, cela provient d'un buildspec.yml que j'ai écrit:

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

Quand je vois que vous avez utilisé MyApp dans votre section d'artefacts, cela me fait penser que vous faites référence aux OutputArtifacts de l'action Source de CodePipeline. Au lieu de cela, vous devez vous référer aux fichiers qu'il télécharge et stocke là (c'est-à-dire S3) et/ou qu'il génère et stocke là.

Vous pouvez trouver un exemple d'un modèle CloudFormation qui utilise CodePipeline, CodeBuild, CodeDeploy et CodeCommit ici: https://github.com/stelligent/aws-codedeploy-sample-Tomcat/blob/master/codebuild-cpl -cd-cc.json Le buildspec.yml est dans le même dépôt fourchu.

12
Paul Duvall

J'ai eu le même problème, et la solution pour résoudre le problème était "empaqueter les répertoires et les fichiers à l'intérieur de l'archive sans autre création de dossier racine".

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

1
TechPassionate

Les artefacts Buildspec sont des informations sur l'endroit où CodeBuild peut trouver la sortie de génération et comment CodeBuild la prépare pour le téléchargement vers le compartiment de sortie Amazon S3.

Pour l'erreur "Aucun chemin d'artefact correspondant trouvé" Quelques points à vérifier:

  1. Le ou les fichiers d'artefacts spécifiés dans le fichier buildspec.yml ont chemin d'accès et nom de fichier corrects

artifacts: files: -'FileNameWithPath'

  1. Si vous utilisez un fichier .gitignore, assurez-vous que le ou les fichiers spécifiés dans la section Artefacts n'est pas inclus dans le fichier .gitignore.

J'espère que cela t'aides.

0
Safiqur Rhaman

Les artefacts sont ce que vous voulez de votre processus de construction - qu'ils soient compilés d'une certaine manière ou simplement des fichiers copiés directement à partir de la source. Le serveur de génération récupère donc le code, le compile selon vos instructions, puis copie les fichiers spécifiés vers S3.

Dans mon cas, en utilisant Spring Boot + Gradle, le fichier jar de sortie (quand je gradle bootJar ceci sur mon propre système) est placé dans build/libs/demo1-0.0.1-SNAPSHOT.jar, donc j'ai défini ce qui suit dans buildspec.yml:

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

Ce fichier apparaît pour moi dans S3, éventuellement dans un Zip et/ou un sous-dossier en fonction des options choisies dans le reste de la section Artefacts

0
Jim ReesPotter