Stocker des artefacts de compilation dans Cloud Storage

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:

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 exemple gs://mybucket ou gs://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 champ dir.

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 exemple gs://mybucket ou gs://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 champ dir.

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 forme gs://[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