Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Référence de spécification de construction pour CodeBuild
Cette rubrique fournit des informations de référence importantes sur les fichiers de spécification de génération (buildspec). Un buildspec est un ensemble de commandes de construction et de paramètres associés, au YAML format, qui est CodeBuild utilisé pour exécuter un build. Vous pouvez inclure une spécification de construction dans le code source ou vous pouvez définir une spécification de construction lorsque vous créez un projet de construction. Pour plus d'informations sur le fonctionnement des spécifications de génération, consultez Comment CodeBuild fonctionne.
Rubriques
Nom de fichier buildspec et emplacement de stockage
Si vous incluez une spécification de build dans le cadre du code source, par défaut, le fichier de spécification de build doit être nommé buildspec.yml
et être placé à la racine de votre répertoire source.
Vous pouvez remplacer le nom et l'emplacement par défaut du fichier de spécification de build. Par exemple, vous pouvez :
-
Utiliser un fichier de spécification de build distinct pour différentes builds dans le même référentiel, comme par exemple
buildspec_debug.yml
etbuildspec_release.yml
. -
Stocker un fichier de spécification de build ailleurs qu'à la racine de votre répertoire source, par exemple
config/buildspec.yml
ou dans un compartiment S3. Le compartiment S3 doit se trouver dans la même AWS région que votre projet de construction. Spécifiez le fichier buildspec en utilisant son ARN (par exemple,).arn:aws:s3:::
<my-codebuild-sample2>
/buildspec.yml
Vous pouvez spécifier une seule spécification de build pour un projet de build, quel que soit le nom du fichier de spécification de build.
Pour remplacer le nom, l'emplacement, ou les deux, du fichier de spécification de build par défaut, effectuez l'une des actions suivantes :
-
Exécutez la
update-project
commande AWS CLIcreate-project
or, en définissant labuildspec
valeur sur le chemin du fichier buildspec alternatif par rapport à la valeur de la variable d'environnement intégrée.CODEBUILD_SRC_DIR
Vous pouvez également faire l'équivalent avec l'create project
opération dans le AWS SDKs. Pour plus d’informations, consultez Création d'un projet de génération ou Modifier les paramètres du projet de construction. -
Exécutez la AWS CLI
start-build
commande en définissant labuildspecOverride
valeur sur le chemin du fichier buildspec alternatif par rapport à la valeur de la variable d'environnement intégrée.CODEBUILD_SRC_DIR
Vous pouvez également faire l'équivalent avec l'start build
opération dans le AWS SDKs. Pour de plus amples informations, veuillez consulter Exécuter les builds manuellement. -
Dans un AWS CloudFormation modèle, définissez la
BuildSpec
propriété deSource
in a resource of typeAWS::CodeBuild::Project
sur le chemin d'accès au fichier buildspec alternatif par rapport à la valeur de la variable d'environnement intégrée.CODEBUILD_SRC_DIR
Pour plus d'informations, consultez la BuildSpec propriété dans la source AWS CodeBuild du projet dans le guide de AWS CloudFormation l'utilisateur.
Syntaxe d'un fichier buildspec
Les fichiers Buildspec doivent être exprimés au format. YAML
Si une commande contient un caractère, ou une chaîne de caractères, qui n'est pas pris en charge parYAML, vous devez placer la commande entre guillemets (« »). La commande suivante est placée entre guillemets car les deux points (:) suivis d'un espace ne sont pas autorisésYAML. Dans la commande, le guillemet est échappé (\").
"export PACKAGE_NAME=$(cat package.json | grep name | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g')"
La spécification de build a la syntaxe suivante :
version: 0.2 run-as:
Linux-user-name
env: shell:shell-tag
variables:key
: "value
"key
: "value
" parameter-store:key
: "value
"key
: "value
" exported-variables: -variable
-variable
secrets-manager:key
:secret-id
:json-key
:version-stage
:version-id
git-credential-helper: no | yes proxy: upload-artifacts: no | yes logs: no | yes batch: fast-fail: false | true # build-list: # build-matrix: # build-graph: phases: install: run-as:Linux-user-name
on-failure: ABORT | CONTINUE runtime-versions:runtime
:version
runtime
:version
commands: -command
-command
finally: -command
-command
pre_build: run-as:Linux-user-name
on-failure: ABORT | CONTINUE commands: -command
-command
finally: -command
-command
build: run-as:Linux-user-name
on-failure: ABORT | CONTINUE commands: -command
-command
finally: -command
-command
post_build: run-as:Linux-user-name
on-failure: ABORT | CONTINUE commands: -command
-command
finally: -command
-command
reports:report-group-name-or-arn
: files: -location
-location
base-directory:location
discard-paths: no | yes file-format:report-format
artifacts: files: -location
-location
name:artifact-name
discard-paths: no | yes base-directory:location
exclude-paths:excluded paths
enable-symlinks: no | yes s3-prefix:prefix
secondary-artifacts:artifactIdentifier
: files: -location
-location
name:secondary-artifact-name
discard-paths: no | yes base-directory:location
artifactIdentifier
: files: -location
-location
discard-paths: no | yes base-directory:location
cache: paths: -path
-path
La spécification de build contient les éléments suivants :
version
Mappage obligatoire. Représente la version de la spécification de build. Nous vous recommandons d'utiliser 0.2
.
Note
Bien que la version 0.1 soit toujours prise en charge, nous vous recommandons d'utiliser la version 0.2 dans la mesure du possible. Pour de plus amples informations, veuillez consulter Versions de fichier buildspec.
run-as
Séquence facultative. Disponible uniquement pour les utilisateurs Linux. Spécifie un utilisateur Linux qui exécute des commandes dans ce fichier buildspec. run-as
accorde à l'utilisateur spécifié des autorisations de lecture et d'exécution. Lorsque vous spécifiez run-as
en haut du fichier buildspec, il s'applique globalement à toutes les commandes. Si vous ne voulez pas spécifier un utilisateur pour toutes les commandes de fichier buildspec, vous pouvez en spécifier un pour les commandes dans une phase à l'aide de run-as
dans l'un des blocs phases
. Si run-as
n'est pas spécifié, toutes les commandes sont exécutées en tant qu'utilisateur racine.
env
Séquence facultative. Représente les informations pour une ou plusieurs variables d'environnement personnalisées.
Note
Pour protéger les informations sensibles, les informations suivantes sont masquées dans CodeBuild les journaux :
-
AWS clé d'accèsIDs. Pour plus d'informations, consultez la section Gestion des clés d'accès pour IAM les utilisateurs dans le guide de AWS Identity and Access Management l'utilisateur.
-
Chaînes spécifiées à l'aide du stockage de paramètres. Pour plus d'informations, consultez la procédure pas à pas de la console Systems Manager Parameter Store et Systems Manager Parameter Store dans le guide de l'utilisateur d'Amazon EC2 Systems Manager.
-
Chaînes spécifiées à l'aide de AWS Secrets Manager. Pour de plus amples informations, veuillez consulter Gestion des clés.
- env/ coque
-
Séquence facultative. Spécifie le shell pris en charge pour les systèmes d'exploitation Linux ou Windows.
Pour les systèmes d'exploitation Linux, les balises shell prises en charge sont les suivantes :
-
bash
-
/bin/sh
Pour les systèmes d'exploitation Windows, les balises shell prises en charge sont les suivantes :
-
powershell.exe
-
cmd.exe
-
- env/variables
-
Obligatoire si
env
est spécifié, et que vous voulez définir des variables d'environnement personnalisées en texte brut. Contient un mappage dekey
/value
scalaires, où chaque mappage représente une variable d'environnement personnalisée unique en texte brut.key
est le nom de la variable d'environnement personnalisée, etvalue
est la valeur de cette variable.Important
Nous déconseillons vivement le stockage de valeurs sensibles dans les variables d'environnement. Les variables d'environnement peuvent être affichées en texte brut à l'aide d'outils tels que la CodeBuild console et le AWS CLI. Pour les valeurs sensibles, nous vous recommandons d'utiliser à la place le mappage
parameter-store
ousecrets-manager
, comme décrit plus loin dans cette section.Les variables d'environnement que vous définissez remplacent les variables d'environnement existantes. Par exemple, si l'image Docker contient déjà une variable d'environnement nommée
MY_VAR
avec la valeurmy_value
et que vous définissez une variable d'environnement nomméeMY_VAR
avec la valeurother_value
, la valeurmy_value
est remplacée parother_value
. De même, si l'image Docker contient déjà une variable d'environnement nomméePATH
avec la valeur/usr/local/sbin:/usr/local/bin
et que vous définissez une variable d'environnement nomméePATH
avec la valeur$PATH:/usr/share/ant/bin
, la valeur/usr/local/sbin:/usr/local/bin
est remplacée par la valeur littérale$PATH:/usr/share/ant/bin
.Ne définissez pas de variables d'environnement avec un nom commençant par
CODEBUILD_
. Ce préfixe est réservé à une utilisation interne .Si une variable d'environnement avec le même nom est définie dans plusieurs emplacements, la valeur est déterminée comme suit :
-
La valeur de l'appel d'opération de démarrage de génération a une priorité plus élevée. Vous pouvez ajouter ou remplacer des variables d'environnement lorsque vous créez une génération. Pour de plus amples informations, veuillez consulter Exécuter AWS CodeBuild les builds manuellement.
-
La valeur de la définition de projet de génération vient ensuite dans l'ordre des priorités. Vous pouvez ajouter des variables d'environnement au niveau d'un projet lorsque vous créez ou modifiez celui-ci. Pour plus d’informations, consultez Créez un projet de construction dans AWS CodeBuild et Modifier les paramètres du projet de construction dans AWS CodeBuild.
-
La valeur figurant dans la déclaration buildspec a la priorité la plus faible.
-
- env/magasin de paramètres
-
Obligatoire si cela
env
est spécifié et si vous souhaitez récupérer des variables d'environnement personnalisées stockées dans Amazon EC2 Systems Manager Parameter Store. Contient un mappage dekey
/value
scalaires, où chaque mappage représente une variable d'environnement personnalisée unique stockée dans Amazon EC2 Systems Manager Parameter Store.key
est le nom que vous utiliserez ultérieurement dans vos commandes de compilation pour faire référence à cette variable d'environnement personnalisée, etvalue
est le nom de la variable d'environnement personnalisée stockée dans Amazon EC2 Systems Manager Parameter Store. Pour stocker des valeurs sensibles, consultez la section Stockage des paramètres de Systems Manager et procédure pas à pas : créer et tester un paramètre de chaîne (console) dans le guide de l'utilisateur d'Amazon EC2 Systems Manager.Important
CodeBuild Pour permettre de récupérer des variables d'environnement personnalisées stockées dans Amazon EC2 Systems Manager Parameter Store, vous devez ajouter l'
ssm:GetParameters
action à votre rôle CodeBuild de service. Pour de plus amples informations, veuillez consulter CodeBuild Autoriser l'interaction avec d'autres AWS services.Toutes les variables d'environnement que vous récupérez depuis Amazon EC2 Systems Manager Parameter Store remplacent les variables d'environnement existantes. Par exemple, si l'image Docker contient déjà une variable d'environnement nommée
MY_VAR
avec une valeurmy_value
, et que vous récupérez une variable d'environnement nomméeMY_VAR
avec une valeurother_value
, la valeurmy_value
est alors remplacée parother_value
. De même, si l'image Docker contient déjà une variable d'environnement nomméePATH
avec une valeur/usr/local/sbin:/usr/local/bin
, et que vous récupérez une variable d'environnement nomméePATH
avec une valeur$PATH:/usr/share/ant/bin
, la valeur/usr/local/sbin:/usr/local/bin
est alors remplacée par la valeur littérale$PATH:/usr/share/ant/bin
.Ne stockez pas de variables d'environnement avec un nom commençant par
CODEBUILD_
. Ce préfixe est réservé à une utilisation interne .Si une variable d'environnement avec le même nom est définie dans plusieurs emplacements, la valeur est déterminée comme suit :
-
La valeur de l'appel d'opération de démarrage de génération a une priorité plus élevée. Vous pouvez ajouter ou remplacer des variables d'environnement lorsque vous créez une génération. Pour de plus amples informations, veuillez consulter Exécuter AWS CodeBuild les builds manuellement.
-
La valeur de la définition de projet de génération vient ensuite dans l'ordre des priorités. Vous pouvez ajouter des variables d'environnement au niveau d'un projet lorsque vous créez ou modifiez celui-ci. Pour plus d’informations, consultez Créez un projet de construction dans AWS CodeBuild et Modifier les paramètres du projet de construction dans AWS CodeBuild.
-
La valeur figurant dans la déclaration buildspec a la priorité la plus faible.
-
- env/Secrets Manager
-
Obligatoire si vous souhaitez récupérer des variables d'environnement personnalisées stockées dans AWS Secrets Manager. Spécifiez un Gestionnaire de Secrets
reference-key
en utilisant le modèle suivant :
:<key>
<secret-id>
:<json-key>
:<version-stage>
:<version-id>
<key>
-
(Obligatoire) Nom de la variable d'environnement locale. Utilisez ce nom pour accéder à la variable pendant la génération.
<secret-id>
-
(Obligatoire) Le nom ou Amazon Resource Name (ARN) qui sert d'identifiant unique pour le secret. Pour accéder à un secret dans votre compte AWS , spécifiez simplement le nom secret. Pour accéder à un secret dans un autre AWS compte, spécifiez-leARN.
<json-key>
-
(Facultatif) Spécifie le nom de clé de la paire clé-valeur de Secrets Manager dont vous souhaitez récupérer la valeur. Si vous ne spécifiez pas de
json-key
, CodeBuild récupère l'intégralité du texte secret. <version-stage>
-
(Facultatif) Spécifie la version secrète que vous souhaitez récupérer à l'aide de l'étiquette intermédiaire attachée à la version. Les étiquettes intermédiaires sont utilisées pour assurer le suivi des différentes versions au cours du processus de rotation. Si vous utilisez la
version-stage
, ne spécifiez pas l’version-id
. Si vous ne spécifiez pas d'étape de version ni d'ID de version, par défaut, vous devez récupérer la version avec la valeur d'étape de version deAWSCURRENT
. <version-id>
-
(Facultatif) Spécifie l'identifiant unique de la version du secret que vous souhaitez utiliser. Si vous spécifiez
version-id
, ne spécifiez pasversion-stage
. Si vous ne spécifiez pas d'étape de version ni d'ID de version, par défaut, vous devez récupérer la version avec la valeur d'étape de version deAWSCURRENT
.
Dans l'exemple suivant,
TestSecret
c'est le nom de la paire clé-valeur stockée dans Secrets Manager. La clé pourTestSecret
nousMY_SECRET_VAR
. Vous pouvez accéder à la variable pendant la construction en utilisant leLOCAL_SECRET_VAR
nom.env: secrets-manager: LOCAL_SECRET_VAR: "TestSecret:MY_SECRET_VAR"
Pour plus d’informations, consultez Présentation de AWS Secrets Manager dans le Guide de l’utilisateur AWS Secrets Manager .
- env/variables exportées
-
Mappage facultatif. Permet de répertorier les variables d'environnement que vous souhaitez exporter. Spécifiez le nom de chaque variable que vous souhaitez exporter sur une ligne distincte sous
exported-variables
. La variable que vous souhaitez exporter doit être disponible dans votre conteneur pendant la génération. La variable que vous exportez peut être une variable d'environnement.Les variables d'environnement exportées sont utilisées conjointement AWS CodePipeline pour exporter les variables d'environnement de la phase de construction actuelle vers les étapes suivantes du pipeline. Pour plus d'informations, consultez la section Utilisation des variables dans le Guide de AWS CodePipeline l'utilisateur.
Lors d'une génération, la valeur d'une variable est disponible dès la phase
install
. Elle peut être mise à jour entre le début de la phaseinstall
et la fin de la phasepost_build
. Lorsque la phasepost_build
est terminée, la valeur des variables exportées ne peut pas changer.Note
Les éléments suivants ne peuvent pas être exportés :
-
Les secrets du magasin de paramètres Amazon EC2 Systems Manager sont spécifiés dans le projet de construction.
-
Secrets Manager : secrets spécifiés dans le projet de construction
-
Les variables d'environnement qui commencent par
AWS_
.
-
- env/ git-credential-helper
-
Mappage facultatif. Utilisé pour indiquer s'il CodeBuild utilise son assistant d'identification Git pour fournir des informations d'identification Git.
yes
s'il est utilisé. Sinon,no
ou non spécifié. Pour plus d'informations, consultez gitcredentialssur le site web de Git. Note
git-credential-helper
n’est pas pris en charge pour les générations qui sont déclenchées par un webhook pour un référentiel Git public.
proxy
Séquence facultative. Utilisé pour représenter les paramètres si vous exécutez votre génération dans un serveur proxy explicite. Pour de plus amples informations, veuillez consulter Exécuter CodeBuild sur un serveur proxy explicite.
- proxy/charger les artefacts
-
Mappage facultatif. Définissez ce paramètre sur
yes
si vous souhaitez que votre build dans un serveur proxy explicite charge des artefacts. L’argument par défaut estno
. - proxy/journaux
-
Mappage facultatif. Configurez sur
yes
pour votre intégration dans un serveur proxy explicite afin de créer CloudWatch des journaux. L’argument par défaut estno
.
phases
Séquence obligatoire. Représente les CodeBuild commandes exécutées pendant chaque phase de la génération.
Note
Dans la version 0.1 de buildspec, CodeBuild exécute chaque commande dans une instance distincte du shell par défaut dans l'environnement de construction. Cela signifie que chaque commande s'exécute isolée de toutes les autres commandes. Par conséquent, par défaut, vous ne pouvez pas exécuter une commande unique qui s'appuie sur l'état de commandes précédentes (par exemple, pour le changement de répertoire ou la définition de variables d'environnement). Pour contourner ce problème, nous vous recommandons d'utiliser la version 0.2, qui permet de résoudre ce problème. Si vous devez utiliser la spécification de build de version 0.1, nous vous recommandons les approches figurant dans Shells et commandes dans les environnements de génération.
- phases/*/run-as
-
Séquence facultative. Utilisez-le dans une phase de build pour spécifier un utilisateur Linux qui exécute ses commandes. Si
run-as
est également spécifié globalement pour toutes les commandes en haut du fichier buildspec, alors l'utilisateur au niveau de phase est prioritaire. Par exemple, sirun-as
spécifie globalement l'utilisateur-1, et pour la phaseinstall
seule une instructionrun-as
spécifie l'utilisateur 2, alors toutes les commandes dans le fichier buildspec sont exécutées en tant qu'utilisateur-1, sauf les commandes dans la phaseinstall
, qui sont exécutées en tant qu'utilisateur-2. - phases/*/ en cas de défaillance
-
Séquence facultative. Spécifie l'action à entreprendre en cas de panne pendant la phase. Il peut s’agir de l’une des valeurs suivantes :
-
ABORT
- Annulation de la construction. -
CONTINUE
- Passez à la phase suivante.
Si cette propriété n'est pas spécifiée, le processus d'échec suit les phases de transition, comme indiqué dansTransitions des phases de génération.
-
- phases/*/ enfin
-
Bloc facultatif. Les commandes spécifiées dans un
finally
bloc sont exécutées après les commandes ducommands
bloc. Les commandes d'unfinally
bloc sont exécutées même si une commande ducommands
bloc échoue. Par exemple, si lecommands
bloc contient trois commandes et que la première échoue, CodeBuild ignore les deux commandes restantes et exécute toutes les commandes dufinally
bloc. La phase est réussie lorsque toutes les commandes des blocscommands
etfinally
s'exécutent avec succès. Si une commande d'une phase échoue, la phase échoue.
Les noms de phase de génération autorisés sont :
- phases/installer
-
Séquence facultative. Représente les commandes, le cas échéant, CodeBuild exécutées pendant l'installation. Nous vous recommandons d'utiliser la phase
install
uniquement pour l'installation de packages dans l'environnement de génération. Par exemple, vous pouvez utiliser cette phase pour installer un framework de test de code tel que Mocha ouRSpec.- phases/installer/versions d'exécution
-
Séquence facultative. Une version d'exécution est prise en charge avec l'image standard Ubuntu 5.0 ou ultérieure et l'image standard Amazon Linux 2 4.0 ou version ultérieure. Si cette valeur est spécifiée, au moins une exécution doit être incluse dans cette section. Spécifiez un environnement d'exécution utilisant une version spécifique, une version majeure suivie de
.x
pour spécifier qui CodeBuild utilise cette version majeure avec sa dernière version mineure, oulatest
pour utiliser les versions majeure et mineure les plus récentes (par exempleruby: 3.2
,nodejs: 18.x
, oujava: latest
). Vous pouvez spécifier l’exécution à l'aide d'un nombre ou d'une variable d'environnement. Par exemple, si vous utilisez l'image standard 4.0 d'Amazon Linux 2, ce qui suit indique que la version 17 de Java, la dernière version mineure de python version 3 et une version contenue dans une variable d'environnement de Ruby sont installées. Pour de plus amples informations, veuillez consulter Images Docker fournies par CodeBuild.phases: install: runtime-versions: java: corretto8 python: 3.x ruby: "$MY_RUBY_VAR"
Vous pouvez spécifier un ou plusieurs runtimes dans la section
runtime-versions
de votre fichier buildspec. Si votre runtime dépend d'un autre runtime, vous pouvez également spécifier son runtime dépendant dans le fichier buildspec. Si vous ne spécifiez aucun environnement d'exécution dans le fichier buildspec, CodeBuild choisissez les environnements d'exécution par défaut disponibles dans l'image que vous utilisez. Si vous spécifiez un ou plusieurs environnements d'exécution, utilisez uniquement CodeBuild ces environnements d'exécution. Si aucun environnement d'exécution dépendant n'est spécifié, CodeBuild tente de le choisir pour vous.Si deux exécutions spécifiées entrent en conflit, la génération échoue. Par exemple,
android: 29
etjava: openjdk11
sont en conflit, par conséquent si les deux sont spécifiés, la génération échoue.Pour plus d'informations sur les environnements d'exécution disponibles, consultezRuntimes disponibles.
Note
Si vous spécifiez une
runtime-versions
section et utilisez une image autre qu'Ubuntu Standard Image 2.0 ou version ultérieure, ou l'image standard Amazon Linux 2 (AL2) 1.0 ou version ultérieure, le build émet l'avertissement « »Skipping install of runtimes. Runtime version selection is not supported by this build image
.
- phases/installer/commandes
-
Séquence facultative. Contient une séquence de scalaires, où chaque scalaire représente une commande unique CodeBuild exécutée pendant l'installation. CodeBuild exécute chaque commande, une par une, dans l'ordre indiqué, du début à la fin.
- phases/prégénération
-
Séquence facultative. Représente les commandes, le cas échéant, CodeBuild exécutées avant la génération. Par exemple, vous pouvez utiliser cette phase pour vous connecter à AmazonECR, ou vous pouvez installer des dépendances npm.
- phases/prégénération/commandes
-
Séquence obligatoire si
pre_build
est spécifié. Contient une séquence de scalaires, où chaque scalaire représente une commande unique CodeBuild exécutée avant la génération. CodeBuildexécute chaque commande, une par une, dans l'ordre indiqué, du début à la fin.
- phases/génération
-
Séquence facultative. Représente les commandes, le cas échéant, CodeBuild exécutées pendant la génération. Par exemple, vous pouvez utiliser cette phase pour exécuter Mocha ou sbt. RSpec
- phases/génération/commandes
-
Obligatoire si cela
build
est spécifié. Contient une séquence de scalaires, où chaque scalaire représente une commande unique CodeBuild exécutée pendant la génération. CodeBuild exécute chaque commande, une par une, dans l'ordre indiqué, du début à la fin.
- phases/post-génération
-
Séquence facultative. Représente les commandes, le cas échéant, CodeBuild exécutées après la génération. Par exemple, vous pouvez utiliser Maven pour empaqueter les artefacts de construction dans un WAR fichier JAR OR, ou vous pouvez envoyer une image Docker dans Amazon. ECR Vous pouvez ensuite envoyer une notification de build via AmazonSNS.
- phases/post-génération/commandes
-
Obligatoire si cela
post_build
est spécifié. Contient une séquence de scalaires, où chaque scalaire représente une commande unique CodeBuild exécutée après la génération. CodeBuild exécute chaque commande, une par une, dans l'ordre indiqué, du début à la fin.
rapports
- report-group-name-or-fil
-
Séquence facultative. Spécifie le groupe de rapports auquel les rapports sont envoyés. Un projet peut comporter un maximum de cinq groupes de rapports. Spécifiez le nom ARN d'un groupe de rapports existant ou le nom d'un nouveau groupe de rapports. Si vous spécifiez un nom, CodeBuild crée un groupe de rapports en utilisant le nom de votre projet et le nom que vous spécifiez dans le format
<project-name>-<report-group-name>
. Le nom du groupe de rapports peut également être défini à l'aide d'une variable d'environnement dans la spécification de construction, telle que.$REPORT_GROUP_NAME
Pour de plus amples informations, veuillez consulter Attribution des noms des groupes de rapports. - rapports/<groupe de rapports>/fichiers
-
Séquence obligatoire. Représente les emplacements qui contiennent les données brutes des résultats de test générés par le rapport. Contient une séquence de scalaires, chaque scalaire représentant un emplacement distinct où se CodeBuild trouvent les fichiers de test, par rapport à l'emplacement de construction d'origine ou, s'il est défini, au.
base-directory
Il peut s'agir notamment des emplacements suivants :-
Un fichier unique (par exemple,
my-test-report-file.json
). -
Un fichier unique dans un sous-répertoire (par exemple,
oumy-subdirectory
/my-test-report-file.json
).my-parent-subdirectory
/my-subdirectory
/my-test-report-file.json -
'**/*'
représente tous les fichiers de manière récursive. -
représente tous les fichiers d'un sous-répertoire nommémy-subdirectory
/*my-subdirectory
. -
représente tous les fichiers de manière récursive à partir d'un sous-répertoire nommémy-subdirectory
/**/*my-subdirectory
.
-
- rapports/<groupe de rapports>/format de fichier
-
Mappage facultatif. Représente le format du fichier de rapport. Si non spécifié,
JUNITXML
est utilisé. Cette valeur ne distingue pas les majuscules et minuscules. Les valeurs possibles sont :Rapports d'essais
-
CUCUMBERJSON
-
Concombre JSON
-
JUNITXML
-
JUnit XML
-
NUNITXML
-
NUnit XML
-
NUNIT3XML
-
NUnit3 XML
-
TESTNGXML
-
TestNG XML
-
VISUALSTUDIOTRX
-
Studio visuel TRX
Rapports sur la couverture du code
-
CLOVERXML
-
Trèfle XML
-
COBERTURAXML
-
Cobertura XML
-
JACOCOXML
-
JaCoCo XML
-
SIMPLECOV
-
SimpleCov JSON
-
- rapports/<groupe de rapports>/répertoire de base
-
Mappage facultatif. Représente un ou plusieurs répertoires de niveau supérieur, relatifs à l'emplacement de construction d'origine, qui CodeBuild permettent de déterminer où trouver les fichiers de test bruts.
- rapports/<groupe de rapports>/annuler les chemins
-
Facultatif. Spécifie si les répertoires de fichiers de rapport sont aplatis dans la sortie. Si cela n'est pas spécifié ou si
no
est défini, les fichiers de rapport sont générés avec leur structure de répertoire intacte. Siyes
est défini, tous les fichiers de test sont placés dans le même répertoire de sortie. Par exemple, si un chemin d'accès à un résultat de test estcom/myapp/mytests/TestResult.xml
, la définition deyes
place ce fichier dans/TestResult.xml
.
artefacts
Séquence facultative. Représente des informations sur l' CodeBuild emplacement de la sortie de compilation et sur la manière CodeBuild dont elle est préparée pour le téléchargement vers le compartiment de sortie S3. Cette séquence n'est pas obligatoire si, par exemple, vous créez et envoyez une image Docker à AmazonECR, ou si vous exécutez des tests unitaires sur votre code source, mais que vous ne le créez pas.
Note
Les métadonnées Amazon S3 ont un CodeBuild en-tête nommé x-amz-meta-codebuild-buildarn
qui contient le nom buildArn
de la CodeBuild version qui publie les artefacts sur Amazon S3. Le buildArn
est ajouté pour permettre le suivi de la source des notifications et pour indiquer la version à partir de laquelle l'artefact est généré.
- artefacts/fichiers
-
Séquence obligatoire. Représente les emplacements qui contiennent les artefacts de sortie de génération dans l'environnement de génération. Contient une séquence de scalaires, chaque scalaire représentant un emplacement distinct où CodeBuild peuvent trouver les artefacts de sortie de construction, par rapport à l'emplacement de construction d'origine ou, s'il est défini, au répertoire de base. Il peut s'agir notamment des emplacements suivants :
-
Un fichier unique (par exemple,
my-file.jar
). -
Un fichier unique dans un sous-répertoire (par exemple,
oumy-subdirectory
/my-file.jar
).my-parent-subdirectory
/my-subdirectory
/my-file.jar -
'**/*'
représente tous les fichiers de manière récursive. -
représente tous les fichiers d'un sous-répertoire nommémy-subdirectory
/*my-subdirectory
. -
représente tous les fichiers de manière récursive à partir d'un sous-répertoire nommémy-subdirectory
/**/*my-subdirectory
.
Lorsque vous spécifiez les emplacements des artefacts de sortie de construction, vous CodeBuild pouvez localiser l'emplacement de construction d'origine dans l'environnement de construction. Vous n'avez pas besoin de préfixer les emplacements d'artefact de sortie de génération avec le chemin de l'emplacement de génération d'origine, ni de spécifier
./
ou un élément similaire. Si vous souhaitez connaître le chemin d'accès à cet emplacement, vous pouvez exécuter une commande commeecho $CODEBUILD_SRC_DIR
pendant une génération. L'emplacement de chaque environnement de génération peut être légèrement différent. -
- artefacts/nom
-
Nom facultatif. Spécifie un nom pour votre artefact de génération. Ce nom est utilisé lorsque l'une des conditions suivantes est vraie.
-
Vous utilisez le CodeBuild API pour créer vos versions et l'
overrideArtifactName
indicateur est placé sur l'ProjectArtifacts
objet lorsqu'un projet est mis à jour, qu'un projet est créé ou qu'un build est lancé. -
Vous utilisez la CodeBuild console pour créer vos versions, un nom est spécifié dans le fichier buildspec et vous sélectionnez Activer le versionnement sémantique lorsque vous créez ou mettez à jour un projet. Pour de plus amples informations, veuillez consulter Création d'un projet de génération (console).
Vous pouvez spécifier un nom dans le fichier de spécification de build qui est calculé au moment de la génération. Le nom spécifié dans un fichier de spécification de build utilise le langage de commandes Shell. Par exemple, vous pouvez ajouter une date et une heure au nom de votre artefact afin qu'il soit toujours unique. Les noms d'artefact uniques empêchent les artefacts d'être écrasés. Pour de plus amples informations, veuillez consulter Langage de commandes Shell
. -
Ceci est un exemple de nom d'artefact suivi de la date à laquelle l'artefact a été créé.
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: myname-$(date +%Y-%m-%d)
-
Il s'agit d'un exemple de nom d'artefact qui utilise une variable d' CodeBuild environnement. Pour de plus amples informations, veuillez consulter Variables d'environnement dans les environnements de génération.
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: myname-$AWS_REGION
-
Il s'agit d'un exemple de nom d'artefact qui utilise une variable d' CodeBuild environnement à laquelle est ajoutée la date de création de l'artefact.
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: $AWS_REGION-$(date +%Y-%m-%d)
Vous pouvez ajouter des informations de chemin au nom afin que les artefacts nommés soient placés dans des répertoires en fonction du chemin indiqué dans le nom. Dans cet exemple, les artefacts de construction sont placés dans la sortie sous
builds/<build number>/my-artifacts
.version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: builds/$CODEBUILD_BUILD_NUMBER/my-artifacts
-
- artefacts/ignorer les chemins
-
Facultatif. Spécifie si les répertoires d'artefacts de génération sont aplatis dans la sortie. Si cela n'est pas spécifié, si
no
est défini, les artefacts de génération sont générés avec leur structure de répertoire intacte. Siyes
est défini, tous les artefacts de génération sont placés dans le même répertoire de sortie. Par exemple, si un chemin d'accès à un fichier dans l'artefact de sortie de génération estcom/mycompany/app/HelloWorld.java
, la définition deyes
permet de placer ce fichier dans/HelloWorld.java
. - artefacts/répertoire de base
-
Mappage facultatif. Représente un ou plusieurs répertoires de niveau supérieur, relatifs à l'emplacement de génération d'origine, qui permettent CodeBuild de déterminer les fichiers et sous-répertoires à inclure dans l'artefact de sortie de génération. Les valeurs valides sont les suivantes :
-
Un répertoire unique de niveau supérieur (par exemple,
my-directory
). -
'my-directory*'
représente tous les répertoires de niveau supérieur avec les noms commençant parmy-directory
.
Les répertoires de niveau supérieur correspondants ne sont pas inclus dans l'artefact de sortie de génération, seulement leurs fichiers et sous-répertoires.
Vous pouvez utiliser
files
etdiscard-paths
pour limiter encore plus les fichiers et sous-répertoires inclus. Par exemple, pour la structure de répertoire suivante :. ├── my-build-1 │ └── my-file-1.txt └── my-build-2 ├── my-file-2.txt └── my-subdirectory └── my-file-3.txt
Et pour la séquence
artifacts
suivante :artifacts: files: - '*/my-file-3.txt' base-directory: my-build-2
Le sous-répertoire et le fichier suivants seront inclus dans l'artefact de sortie de génération :
. └── my-subdirectory └── my-file-3.txt
Alors que pour la séquence
artifacts
suivante :artifacts: files: - '**/*' base-directory: 'my-build*' discard-paths: yes
Les fichiers suivants seront inclus dans l'artefact de sortie de génération :
. ├── my-file-1.txt ├── my-file-2.txt └── my-file-3.txt
-
- artéfacts/ chemins d'exclusion
-
Mappage facultatif. Représente un ou plusieurs chemins, relatifs à
base-directory
, qui CodeBuild seront exclus de la construction des artefacts. L'astérisque (*
) correspond à zéro ou plusieurs caractères d'un composant de nom sans dépasser les limites d'un dossier. Un double astérisque (**
) correspond à zéro ou plusieurs caractères d'un composant de nom dans tous les répertoires.Voici des exemples de chemins d'exclusion :
-
Pour exclure un fichier de tous les répertoires :
"**/
file-name
/**/*" -
Pour exclure tous les dossiers à points :
"**/.*/**/*"
-
Pour exclure tous les fichiers à points :
"**/.*"
-
- artéfacts/ activer les liens symboliques
-
Facultatif. Si le type de sortie est
ZIP
, indique si les liens symboliques internes sont préservés dans le ZIP fichier. Si tel est le casyes
, tous les liens symboliques internes de la source seront conservés dans le ZIP fichier d'artefacts. - artéfacts/ préfixe s3
-
Facultatif. Spécifie un préfixe utilisé lorsque les artefacts sont envoyés vers un compartiment Amazon S3 et que le type d'espace de noms est.
BUILD_ID
Lorsqu'il est utilisé, le chemin de sortie dans le compartiment est<s3-prefix>/<build-id>/<name>.zip
. - artefacts/artefacts secondaires
-
Séquence facultative. Représente une ou plusieurs définitions d'artefacts comme correspondance entre l'identificateur d'un artefact et la définition d'un artefact. Chaque identifiant d'artefact de ce bloc doit correspondre à un artefact défini dans l'attribut
secondaryArtifacts
de votre projet. Chaque définition distincte a la même syntaxe que le blocartifacts
ci-dessus.Note
La artifacts/filesséquence est toujours requise, même lorsque seuls des artefacts secondaires sont définis.
Par exemple, si la structure de votre projet est la suivante :
{ "name": "sample-project", "secondaryArtifacts": [ { "type": "S3", "location": "
<output-bucket1>
", "artifactIdentifier": "artifact1", "name": "secondary-artifact-name-1" }, { "type": "S3", "location": "<output-bucket2>
", "artifactIdentifier": "artifact2", "name": "secondary-artifact-name-2" } ] }Votre fichier buildspec ressemble alors à ceci :
version: 0.2 phases: build: commands: - echo Building... artifacts: files: - '**/*' secondary-artifacts: artifact1: files: - directory/file1 name: secondary-artifact-name-1 artifact2: files: - directory/file2 name: secondary-artifact-name-2
cache
Séquence facultative. Représente des informations sur l'endroit où CodeBuild préparer les fichiers pour le téléchargement du cache dans un compartiment de cache S3. Cette séquence n'est pas requise si le type de cache du projet est No Cache
.
- cache/chemins
-
Séquence obligatoire. Représente les emplacements du cache. Contient une séquence de scalaires, chaque scalaire représentant un emplacement distinct où CodeBuild peuvent trouver les artefacts de sortie de construction, par rapport à l'emplacement de construction d'origine ou, s'il est défini, au répertoire de base. Il peut s'agir notamment des emplacements suivants :
-
Un fichier unique (par exemple,
my-file.jar
). -
Un fichier unique dans un sous-répertoire (par exemple,
oumy-subdirectory
/my-file.jar
).my-parent-subdirectory
/my-subdirectory
/my-file.jar -
'**/*'
représente tous les fichiers de manière récursive. -
représente tous les fichiers d'un sous-répertoire nommémy-subdirectory
/*my-subdirectory
. -
représente tous les fichiers de manière récursive à partir d'un sous-répertoire nommémy-subdirectory
/**/*my-subdirectory
.
-
Important
Comme une déclaration buildspec doit être valideYAML, l'espacement dans une déclaration buildspec est important. Si le nombre d'espaces dans votre déclaration de spécification de build n'est pas valide, les builds peuvent échouer immédiatement. Vous pouvez utiliser un YAML validateur pour vérifier si vos déclarations buildspec sont valides. YAML
Si vous utilisez le AWS CLI, ou le AWS SDKs pour déclarer une spécification de construction lorsque vous créez ou mettez à jour un projet de construction, la spécification de construction doit être une chaîne unique exprimée sous forme de YAML format, avec les espaces et les caractères d'échappement de nouvelle ligne requis. Vous trouverez un exemple dans la section suivante.
Si vous utilisez les AWS CodePipeline consoles CodeBuild ou au lieu d'un fichier buildspec.yml, vous pouvez insérer des commandes pour la phase uniquement. build
Au lieu d'utiliser la syntaxe précédente, vous répertoriez, sur une seule ligne, toutes les commandes que vous souhaitez exécuter lors de la phase de génération (build). Pour plusieurs commandes, séparez celles-ci avec &&
(par exemple, mvn test && mvn
package
).
Vous pouvez utiliser les CodePipeline consoles CodeBuild ou au lieu d'un fichier buildspec.yml pour spécifier les emplacements des artefacts de sortie de génération dans l'environnement de génération. Au lieu d'utiliser la syntaxe précédente, vous répertoriez, sur une seule ligne, tous les emplacements. Pour plusieurs emplacements, séparez ceux-ci avec une virgule (par exemple, buildspec.yml, target/my-app.jar
).
Exemple de fichier buildspec
Voici un exemple de fichier buildspec.yml.
version: 0.2 env: variables: JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64" parameter-store: LOGIN_PASSWORD: /CodeBuild/dockerLoginPassword phases: install: commands: - echo Entered the install phase... - apt-get update -y - apt-get install -y maven finally: - echo This always runs even if the update or install command fails pre_build: commands: - echo Entered the pre_build phase... - docker login -u User -p $LOGIN_PASSWORD finally: - echo This always runs even if the login command fails build: commands: - echo Entered the build phase... - echo Build started on `date` - mvn install finally: - echo This always runs even if the install command fails post_build: commands: - echo Entered the post_build phase... - echo Build completed on `date` reports: arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1: files: - "**/*" base-directory: 'target/tests/reports' discard-paths: no reportGroupCucumberJson: files: - 'cucumber/target/cucumber-tests.xml' discard-paths: yes file-format: CUCUMBERJSON # default is JUNITXML artifacts: files: - target/messageUtil-1.0.jar discard-paths: yes secondary-artifacts: artifact1: files: - target/artifact-1.0.jar discard-paths: yes artifact2: files: - target/artifact-2.0.jar discard-paths: yes cache: paths: - '/root/.m2/**/*'
Voici un exemple de la spécification de construction précédente, exprimée sous forme de chaîne unique, à utiliser avec le AWS CLI, ou le. AWS SDKs
"version: 0.2\n\nenv:\n variables:\n JAVA_HOME: \"/usr/lib/jvm/java-8-openjdk-amd64\\"\n parameter-store:\n LOGIN_PASSWORD: /CodeBuild/dockerLoginPassword\n phases:\n\n install:\n commands:\n - echo Entered the install phase...\n - apt-get update -y\n - apt-get install -y maven\n finally:\n - echo This always runs even if the update or install command fails \n pre_build:\n commands:\n - echo Entered the pre_build phase...\n - docker login -u User -p $LOGIN_PASSWORD\n finally:\n - echo This always runs even if the login command fails \n build:\n commands:\n - echo Entered the build phase...\n - echo Build started on `date`\n - mvn install\n finally:\n - echo This always runs even if the install command fails\n post_build:\n commands:\n - echo Entered the post_build phase...\n - echo Build completed on `date`\n\n reports:\n reportGroupJunitXml:\n files:\n - \"**/*\"\n base-directory: 'target/tests/reports'\n discard-paths: false\n reportGroupCucumberJson:\n files:\n - 'cucumber/target/cucumber-tests.xml'\n file-format: CUCUMBERJSON\n\nartifacts:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n secondary-artifacts:\n artifact1:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n artifact2:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n cache:\n paths:\n - '/root/.m2/**/*'"
Voici un exemple des commandes de la build
phase, à utiliser avec les CodePipeline consoles CodeBuild or.
echo Build started on `date` && mvn install
Dans les exemples suivants :
-
Une variable d'environnement personnalisée, en texte brut, avec la clé
JAVA_HOME
et la valeur/usr/lib/jvm/java-8-openjdk-amd64
est définie. -
Une variable d'environnement personnalisée nommée
dockerLoginPassword
you stockée dans Amazon EC2 Systems Manager Parameter Store est référencée ultérieurement dans les commandes de construction à l'aide de la cléLOGIN_PASSWORD
. -
Vous ne pouvez pas modifier ces noms de phase de génération. Les commandes exécutées dans cet exemple sont
apt-get update -y
etapt-get install -y maven
(pour installer Apache Maven),mvn install
(pour compiler, tester et empaqueter le code source dans un artefact de sortie de build et pour installer l'artefact de sortie de build dans son référentiel interne),docker login
(pour se connecter à Docker avec le mot de passe correspondant à la valeur de la variable d'environnement personnalisée que vous avezdockerLoginPassword
définie dans Amazon EC2 Systems Manager Parameter Store) et plusieurs commandes.echo
Lesecho
commandes sont incluses ici pour montrer comment les CodeBuild commandes sont exécutées et l'ordre dans lequel elles sont exécutées. -
files
représente les fichiers à charger dans l'emplacement de sortie de génération. Dans cet exemple, CodeBuild télécharge le fichiermessageUtil-1.0.jar
unique. Le fichiermessageUtil-1.0.jar
peut être trouvé dans le répertoire relatif nommétarget
dans l'environnement de génération. Commediscard-paths: yes
est spécifié,messageUtil-1.0.jar
est chargé directement (et non dans un répertoiretarget
intermédiaire). Le nom de fichiermessageUtil-1.0.jar
et le nom de répertoire relatif detarget
sont basés sur la façon dont Apache crée et stocke les artefacts de sortie de génération pour cet exemple uniquement. Dans votre propres scénarios, ces noms de fichier et ces répertoires seront différents. -
reports
représente deux groupes de rapports qui génèrent des rapports pendant la génération :-
arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1
indique le nom ARN d'un groupe de rapports. Les résultats des tests générés par le framework de test se trouvent dans le répertoiretarget/tests/reports
. Le format de fichier estJunitXml
et le chemin d'accès n'est pas supprimé des fichiers contenant les résultats du test. -
reportGroupCucumberJson
spécifie un nouveau groupe de rapports. Si le nom du projet estmy-project
, un groupe de rapports portant le nommy-project-reportGroupCucumberJson
est créé lors de l'exécution d'une génération. Les résultats des tests générés par le framework de test sont danscucumber/target/cucumber-tests.xml
. Le format de fichier test estCucumberJson
et le chemin d'accès est supprimé des fichiers contenant les résultats du test.
-
Versions de fichier buildspec
Le tableau suivant répertorie les versions de spécification de build et les modifications entre les versions.
Version | Modifications |
---|---|
0.2 |
|
0.1 | Il s'agit de la définition initiale du format de spécification de génération. |