Stocker des artefacts de compilation

Si votre compilation produit des artefacts tels que des fichiers binaires ou des packages tarball, vous pouvez les stocker dans Cloud Storage ou dans tout dépôt privé tiers.

Cette page explique comment stocker des artefacts de compilation dans Cloud Storage. Pour plus d'informations sur le stockage d'images de conteneurs, consultez la section Créer des images de conteneurs.

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/some/folder.
  • [ARTIFACT_PATH] : le chemin d'accès vers un ou plusieurs artefacts. [ARTIFACT_PATH] est relatif à 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 que vous avez 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/some/folder.
  • [ARTIFACT_PATH] : le chemin d'accès vers un ou plusieurs artefacts. [ARTIFACT_PATH] est relatif à 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 que vous avez 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 des caractères génériques gsutil dans paths pour spécifier plusieurs fichiers.

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 dans un chemin d'accès Cloud Storage comprenant le nom de votre projet Cloud à partir duquel la compilation a été exécutée (par exemple gs://mybucket/myproject/) :

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"
            ]
        }
    }
}

Stocker des artefacts dans Artifact Registry

Artifact Registry résulte de l'évolution de Container Registry. Il vous permet de stocker des artefacts dans un service de dépôt intégré et évolutif, compatible avec les images Docker, les packages Maven et les packages npm. Pour savoir comment configurer Cloud Build pour stocker des artefacts de compilation dans Artifact Registry, consultez la section Intégration à Cloud Build. Pour découvrir les différences entre Artifact Registry et Container Registry lors de la création d'images de conteneurs et du stockage d'artefacts, consultez la page Modifications apportées à la création et au déploiement dans Google Cloud.

Étape suivante