Démarrer une compilation à partir de la ligne de commande et de l'API

Cette page explique comment démarrer manuellement une compilation dans Cloud Build à l'aide de l'outil de ligne de commande gcloud et de l'API Cloud Build.

Avant de commencer

Autorisations IAM requises

Pour obtenir des instructions sur l'attribution de rôles IAM, consultez la page Configurer l'accès aux ressources Cloud Build.

Exécuter des compilations

gcloud

Utiliser un fichier Dockerfile :

Votre fichier Dockerfile contient toutes les informations nécessaires à la compilation d'une image Docker à l'aide de Cloud Build.

Pour exécuter une requête de compilation à l'aide de votre fichier Dockerfile, exécutez la commande suivante à partir du répertoire contenant votre code d'application, votre fichier Dockerfile et toutes les autres ressources :

gcloud builds submit --tag gcr.io/project-id/image-name .

Où :

  • project-id est le nom de votre projet Cloud ;
  • image-name est l'image à compiler.
  • . indique que le code source se trouve dans le répertoire de travail actuel.

Le nom complet de l'image à compiler est `gcr.io/project-id/image-name. Les images envoyées vers Container Registry utilisent le format du nom de registre.

La commande gcloud builds submit :

  • compresse le code de l'application, le fichier Dockerfile et toutes les autres ressources contenues dans le répertoire courant, comme indiqué par . ;
  • importe les fichiers dans un bucket Cloud Storage ;
  • lance une compilation à l'aide des fichiers importés en tant qu'entrée ;
  • marque l'image à l'aide du nom fourni ;
  • envoie l'image compilée vers Container Registry.

Au fur et à mesure de la compilation, les résultats s'affichent dans la fenêtre de votre interface système ou de votre terminal. Une fois la compilation terminée, un résultat semblable aux lignes suivantes doit s'afficher :

    DONE
    ---------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION STATUS
    $BUILD_ID                             2016-10-28T15:21:18+00:00  12S      SUCCESS

$BUILD_ID correspond à l'identifiant unique de la compilation.

Utiliser le fichier de configuration de compilation Cloud Build :

Pour envoyer une compilation à l'aide de la configuration de compilation, exécutez la commande suivante :

    gcloud builds submit --config build-config source-code

où :

  • build-config est le chemin d'accès du fichier de configuration de compilation
  • source-code est le code source du chemin d'accès ou de l'URL

Lorsque vous exécutez gcloud builds submit pour la première fois dans un projet Cloud, Cloud Build crée un bucket Cloud Storage nommé [YOUR_PROJECT_NAME]_cloudbuild dans ce projet. Cloud Build utilise ce bucket pour stocker tout code source pouvant servir pour vos builds. Cloud Build ne supprime pas automatiquement le contenu de ce bucket. Pour supprimer les objets que vous n'utilisez plus pour les builds, vous pouvez soit définir la configuration du cycle de vie sur le bucket, soit supprimer les objets manuellement.

La commande suivante envoie la requête de compilation cloudbuild.yaml à l'aide du code source archivé et stocké dans un bucket Cloud Storage.

    gcloud builds submit --config cloudbuild.yaml \
        gs://cloud-build-examples/node-docker-example.tar.gz

Vous pouvez utiliser . pour spécifier que le code source se trouve dans le répertoire de travail courant :

    gcloud builds submit --config cloudbuild.yaml .

gcloudignore : lors de l'inclusion du code source dans la compilation, la commande ci-dessus importe tous les fichiers du répertoire spécifié vers Google Cloud Platform pour compiler. Si vous souhaitez exclure certains fichiers du répertoire, vous pouvez inclure un fichier nommé .gcloudignore dans le répertoire d'importation de premier niveau. Les fichiers spécifiés seront ignorés. Si le répertoire d'importation de premier niveau ne contient pas de fichier .gcloudignore mais un fichier .gitignore, l'outil gcloud génère un fichier .gcloudignore compatible avec Git et équivalent au fichier .gitignore. Pour en savoir plus, reportez-vous à la documentation de gcloudignore.

Si vous n'avez pas de code source à transmettre à votre compilation, utilisez l'option --no-source, où build-config est le chemin d'accès du fichier de configuration de compilation :

    gcloud builds submit --config build-config --no-source

API

Pour envoyer la requête de compilation à l'aide de curl dans un pool de nœuds de calcul par défaut:

  1. Créez un fichier nommé request.json avec le contenu suivant :

    {
        "source": {
            "storageSource": {
                "bucket": "cloud-build-examples",
                "object": "node-docker-example.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/$PROJECT_ID/my-image",
                "."
            ]
        }],
        "images": [
            "gcr.io/$PROJECT_ID/my-image"
        ]
    }
    

    Dans cette requête de compilation, Cloud Build appelle l'étape de compilation docker avec les arguments build -t gcr.io/$PROJECT_ID/cb-demo-img ..

    Le nom complet de l'image à compiler est gcr.io/$PROJECT_ID/cb-demo-img. Les images envoyées vers Container Registry utilisent le format du nom de registre.

    Le code source à compiler se trouve dans une archive tar compressée, node-docker-example.tar.gz. Le fichier est stocké dans un bucket Cloud Storage nommé cloud-build-examples.

  2. Exécutez la commande suivante, où project-id correspond à l'ID de votre projet Cloud :

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/project-id/locations/global/builds
    

    Dans cette commande, curl envoie le fichier request.json dans une requête POST au point de terminaison builds pour la méthode API projects.builds.create.

    La commande affiche des détails sur la compilation dans la fenêtre d'interface système ou de terminal. Le résultat est une réponse JSON et ressemble à ce qui suit :

    {
        "name": "operations/build/$PROJECT-ID/NmZhZW...",
        "metadata": {
            "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
            "build": {
                "id": $BUILD-ID,
                "status": "QUEUED",
                "source": {
                    "storageSource": {
                        "bucket": "cloud-build-examples",
                        "object": "node-docker-example.tar.gz"
                    }
                },
                "createTime": "2017-05-12T18:58:07.341526Z",
                "steps": [
                {
                    "name": "gcr.io/cloud-builders/docker",
                    "args": [
                        "build",
                        "-t",
                        "gcr.io/$PROJECT-ID/cb-demo-img",
                        "."
                    ]
                }
                ],
                "timeout": "600s",
                "images": [
                    "gcr.io/$PROJECT-ID/cb-demo-img"
                ],
                "projectId": $PROJECT-ID,
                "logsBucket": "gs://...",
                "sourceProvenance": {
                    "resolvedStorageSource": {
                        "bucket": "cloud-build-examples",
                        "object": "node-docker-example.tar.gz",
                        "generation": "..."
                    }
                },
                "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=$PROJECT-ID"
            }
        }
    }
    

    La réponse JSON est modélisée sous la forme de ressource Operation dans l'API Cloud Build. Le champ metadata est modélisé sous la forme de ressource Build. L'état QUEUED indique que la compilation est en attente d'exécution.

Pour envoyer la requête de compilation à l'aide de curl dans un pool de nœuds de calcul personnalisés:

  1. Créez un fichier nommé request.json avec le contenu suivant :

    {
        "source": {
            "storageSource": {
                "bucket": "cloud-build-examples",
                "object": "node-docker-example.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "gcr.io/$PROJECT_ID/my-image",
                "."
            ]
        }],
        "images": [
            "gcr.io/$PROJECT_ID/my-image"
        ]
    }
    

    Dans cette requête de compilation, Cloud Build appelle l'étape de compilation docker avec les arguments build -t gcr.io/$PROJECT_ID/cb-demo-img ..

    Le nom complet de l'image à compiler est gcr.io/$PROJECT_ID/cb-demo-img. Les images envoyées vers Container Registry utilisent le format du nom de registre.

    Le code source à compiler se trouve dans une archive tar compressée, node-docker-example.tar.gz. Le fichier est stocké dans un bucket Cloud Storage nommé cloud-build-examples.

  2. Exécutez la commande suivante, où project-id est l'ID de votre projet Cloud et REGION est la région dans laquelle vous avez créé votre pool de nœuds de calcul personnalisés:

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/project-id/REGION/global/builds
    

    Dans cette commande, curl envoie le fichier request.json dans une requête POST au point de terminaison builds pour la méthode API projects.builds.create.

Étape suivante