web-dev-qa-db-fra.com

AWS Codebuild mettant tous les artefacts à la racine du compartiment S3

Je construis un projet qui place tous ses fichiers dans un dossier "dist" et je l'exécute via CodeBuild. J'essaie de le faire mettre tous les fichiers et dossiers dans 'dist' à la racine du compartiment s3, mais j'ai du mal à comprendre comment faire fonctionner cela.

Mon dossier "dist" ressemble à ceci:

- index.html - somecssfiles.css - fonts/ - - some fonts or w/e - js/ - - some javascript files

J'ai essayé beaucoup de choses différentes, mais je n'arrive pas à le faire tomber simplement 'dist/*' à la racine du s3 sket. Voici l'itération actuelle de ma propriété artifacts dans le fichier buildspec.yml:

artifacts: files: - '*' discard-paths: yes base-directory: 'dist'

J'ai pensé que cela fonctionnerait probablement, mais il ignore les dossiers. Toute aide est appréciée, merci pour la lecture.

8
Xylude Xaalud

Je ne l'ai compris que récemment, alors les experts me pardonnent si je me trompe, mais:

Le "discard-paths: yes" est ce qui jette votre structure de répertoires. Il aplatit essentiellement votre ensemble d'artefacts. Si (comme moi) vous voulez seulement jeter les chemins jusqu'à votre dossier d'artefact, mettez ce chemin complet dans le champ "répertoire de base".

Encore une fois, je ne suis pas sûr de cette partie, mais il me semble que vous ne pouvez pas dire à CodeBuild de ne pas appliquer le chiffrement côté serveur à vos artefacts, ce qui signifie que si c'est un site Web que vous avez l'intention d'autoriser les gens à naviguer, cela ne va pas au travail, au moins hors de la boîte. Ce que j'ai fini par faire, c'est au lieu d'utiliser la section artefact de codebuild du tout, j'ai ajouté la commande post_build suivante:

commandes: - aws s3 sync my/artifact/path/ s3://my-bucket-name/

edit: Je construis en utilisant une image docker que j'ai créée et ajoutée à ECR d'Amazon, j'ai dû installer l'AWS CLI dans mon image pour pouvoir exécuter cette commande.

6
Lucas Newman

Je pense qu'il vous manque un morceau - ce n'est pas clair mais vous devez spécifier le chemin dans votre modèle Codebuild avec les artefacts suivants:

artifacts:
  files:
    - '**/*'
  base-directory: 'dist'

Et puis assurez-vous que dans la section "Artefacts" de votre projet de construction de code, vous spécifiez le compartiment S3 normalement, mais ajoutez le paramètre de nom "facultatif" à /

Cela définit la sortie à la racine du répertoire S3 - voir https://docs.aws.Amazon.com/codebuild/latest/APIReference/API_ProjectArtifacts.html#CodeBuild-Type-ProjectArtifacts-name

If type is set to S3, this is the name of the output artifact object. If you set the name to be a forward slash ("/"), the artifact is stored in the root of the output bucket.

16
abbottdev