Cette page explique comment stocker des artefacts de compilation dans Cloud Storage.
Nous vous recommandons d'utiliser Artifact Registry pour stocker les artefacts de compilation. Artifact Registry est un produit Google Cloud que vous pouvez intégrer à Cloud Build pour stocker et gérer en toute sécurité vos artefacts dans des dépôts privés ou publics. Le stockage d'artefacts dans Artifact Registry vous permet de:
- Gérez les métadonnées de conteneur et analysez les failles des conteneurs à l'aide de Artifact Analysis.
- Appliquez des règles de déploiement avec l'autorisation binaire.
- Utilisez le streaming d'images dans Google Kubernetes Engine, ce qui est particulièrement bénéfique pour les grandes images de conteneur.
Pour savoir comment configurer Cloud Build pour stocker des packages et des images de vos compilations dans Artifact Registry, consultez Stockez les artefacts dans Artifact Registry.
Stocker des artefacts dans Cloud Storage
Pour stocker des artefacts qui ne sont pas issus de conteneurs dans Cloud Storage, ajoutez un champ artifacts
au fichier de configuration de compilation en indiquant l'emplacement du bucket où stocker l'artefact et le chemin d'accès à un ou plusieurs artefacts :
YAML
artifacts:
objects:
location: [STORAGE_LOCATION]
paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]
Où :
[STORAGE_LOCATION]
: un bucket Cloud Storage ou un dossier du bucket dans lequel Cloud Build doit stocker l'artefact, par exemplegs://mybucket
ougs://mybucket/myproject/builds
. Pour connaître les noms des buckets existants, consultez Liste des buckets ou Créer un bucket.[ARTIFACT_PATH]
: le chemin d'accès vers un ou plusieurs artefacts.[ARTIFACT_PATH]
est associé à votre répertoire de travail. Il peut s'agir de/workspace
, qui est le répertoire de travail par défaut de Cloud Build ou du répertoire de travail défini à l'aide du champdir
.
JSON
{
"artifacts": {
"objects": {
"location": [
"[STORAGE_LOCATION]"
],
"paths": [
[
"[ARTIFACT_PATH]"
],
[
"[ARTIFACT_PATH]"
],
"..."
]
}
}
}
Où :
[STORAGE_LOCATION]
: un bucket Cloud Storage ou un dossier du bucket dans lequel Cloud Build doit stocker l'artefact, par exemplegs://mybucket
ougs://mybucket/myproject/builds
. Pour trouver les noms des buckets existants, consultez la page Répertorier les buckets ou créer un bucket.[ARTIFACT_PATH]
: le chemin d'accès vers un ou plusieurs artefacts.[ARTIFACT_PATH]
est associé à votre répertoire de travail. Il peut s'agir de/workspace
, qui est le répertoire de travail par défaut de Cloud Build ou du répertoire de travail défini à l'aide du champdir
.
Tenez compte des mises en garde suivantes lorsque vous stockez des artefacts dans Cloud Storage :
Vous ne pouvez spécifier qu'un seul bucket pour importer des artefacts et devez en être le propriétaire. Vous pouvez spécifier un chemin d'accès de répertoire valide dans le bucket.
Vous pouvez importer autant d'artefacts que vous le souhaitez, mais ne pouvez spécifier que 100 chemins d'accès d'artefacts maximum.
Si vous importez un artefact dans un bucket comprenant déjà un artefact portant le même nom, le nouvel artefact remplace l'artefact existant. Vous pouvez activer la Gestion des versions des objets de votre bucket si vous ne souhaitez pas que le nouvel artefact remplace un artefact existant portant le même nom.
Une fois la compilation terminée, vous pouvez trouver les résultats de l'importation dans le fichier manifeste JSON situé à l'emplacement [STORAGE_LOCATION]/artifacts-$BUILD_ID.json
.
Le fichier manifeste JSON contient les champs suivants :
location
: indique l'emplacement dans Cloud Storage où un artefact est stocké et se présente sous la formegs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]
. Vous pouvez utiliser le numéro de génération pour identifier de manière unique une version des données dans le bucket Cloud Storage.file_hash
: spécifie le type de hachage et la valeur. Le type de hachage est toujours 2, ce qui signifie qu'un hachage MD5 a été effectué.
Exemples d'artefacts
Les exemples suivants montrent comment utiliser le champ Artifacts
dans un fichier de configuration de compilation. Dans tous ces exemples, remplacez [VALUES_IN_BRACKETS]
par les valeurs appropriées.
Importer des fichiers et des dossiers
Le fichier de configuration de compilation ci-dessous importe helloworld.class
dans gs://[STORAGE_LOCATION]/
:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['HelloWorld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"HelloWorld.class"
]
}
}
}
Pour importer plusieurs artefacts, indiquez le chemin d'accès à chaque artefact séparé par une virgule. L'exemple suivant importe HelloWorld.java
, HelloWorld.class
et cloudbuild.yaml
dans gs://[STORAGE_LOCATION]/
:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"HelloWorld.java",
"HelloWorld.class",
"cloudbuild.yaml"
]
}
}
}
Vous pouvez également importer des artefacts dans un chemin d'accès de répertoire valide dans le bucket. L'exemple suivant importe HelloWorld.java
et HelloWorld.class
dans gs://[BUCKET_NAME]/[FOLDER_NAME]
:
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['HelloWorld.java']
artifacts:
objects:
location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'
paths: ['HelloWorld.java', 'HelloWorld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"HelloWorld.java"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[BUCKET_NAME]/[FOLDER_NAME]",
"paths": [
"HelloWorld.java",
"HelloWorld.class"
]
}
}
}
Utiliser des caractères génériques pour importer plusieurs artefacts
Lorsque vous importez plusieurs artefacts, vous pouvez utiliser
caractères génériques dans paths
pour spécifier plusieurs
.
L'exemple suivant prend comme argument un fichier nommé classes
, qui contient les noms des fichiers .java
à compiler. Il importe ensuite tous les fichiers .class
dans le bucket Cloud Storage spécifié :
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['@classes']
artifacts:
objects:
location: 'gs://[STORAGE_LOCATION]/'
paths: ['*.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"@classes"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[STORAGE_LOCATION]/",
"paths": [
"*.class"
]
}
}
}
Utiliser des variables de substitution dans l'emplacement du bucket
Vous pouvez utiliser des variables de substitution pour spécifier un dossier dans le bucket Cloud Storage. Si le dossier que vous avez spécifié n'existe pas, Cloud Build le crée pour vous.
L'exemple ci-dessous importe les artefacts vers un chemin d'accès Cloud Storage qui inclut le nom du projet Google Cloud à partir duquel la compilation a été exécutée (par exemple, gs://monbucket/monprojet/):
YAML
steps:
- name: 'gcr.io/cloud-builders/javac'
args: ['@classes']
artifacts:
objects:
location: 'gs://[BUCKET_NAME]/$PROJECT_ID'
paths: ['helloworld.class']
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/javac",
"args": [
"@classes"
]
}
],
"artifacts": {
"objects": {
"location": "gs://[BUCKET_NAME]/$PROJECT_ID",
"paths": [
"helloworld.class"
]
}
}
}
Étape suivante
- Découvrez comment compiler des projets
Go
. - Découvrez comment démarrer une compilation manuellement ou utiliser des déclencheurs.
- Découvrez comment résoudre les erreurs de compilation.