Intégrer à Cloud Build

Cette page explique comment configurer Cloud Build pour stocker les artefacts compilés dans un dépôt Artifact Registry.

Avant de commencer

  1. Si le dépôt cible n'existe pas, créez un dépôt.
  2. Si Cloud Build et votre dépôt se trouvent dans des projets différents ou si vous utilisez uncompte de service spécifié par l'utilisateur pour exécuter des builds, attribuer le rôle de rédacteur Artifact Registry au compte de service de compilation dans le projet avec les dépôts.

    Le compte de service Cloud Build par défaut est autorisé à importer et à télécharger des données dans des dépôts faisant partie du même projet.

Configurer un build Docker

Après avoir accordé des autorisations au dépôt cible, vous êtes prêt à configurer votre build.

Pour configurer le build, procédez comme suit:

  1. Dans votre fichier de configuration de compilation, ajoutez l'étape permettant de compiler et d'ajouter des tags à l'image.

    steps:
    - name: 'gcr.io/cloud-builders/docker'
      args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}', '.' ]
    images:
    - '${_LOCATION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY}/${_IMAGE}'
    

    Cet extrait utilise des substitutions Cloud Build. Cette approche est utile si vous souhaitez utiliser le même fichier de configuration de compilation pour transférer des images vers des dépôts destinés à différents environnements, tels que les tests, la préproduction ou la production.

    • ${_LOCATION}, ${_REPOSITORY} et ${_IMAGE} sont des objets de remplacement définis par l'utilisateur pour l'emplacement, le nom et l'image du dépôt. Vous spécifiez les valeurs de ces variables au moment de la compilation.
    • $PROJECT_ID est une remplacement par défaut que Cloud Build résout avec l'ID de projet Google Cloud de la compilation.

      • Si vous exécutez la commande gcloud builds submit, Cloud Build utilise l'ID de projet actif dans la session gcloud.
      • Si vous utilisez un déclencheur de compilation, Cloud Build utilise l'ID du projet dans lequel il est exécuté.

      Vous pouvez également utiliser une substitution définie par l'utilisateur au lieu de $PROJECT_ID afin de pouvoir spécifier un ID de projet au moment de la compilation.

  2. Lorsque vous êtes prêt à exécuter le build, spécifiez des valeurs pour les substitutions définies par l'utilisateur. Par exemple, cette commande remplace:

    • us-east1 pour l'emplacement du dépôt
    • my-repo pour le nom du dépôt
    • my-image pour le nom de l'image
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
    

Configurer un build Java

Après avoir accordé des autorisations au dépôt cible, vous êtes prêt à configurer votre build. Les instructions suivantes décrivent la configuration de votre compilation pour importer un package Java dans un dépôt Maven.

Pour configurer le build, procédez comme suit:

  1. Configurez l'authentification pour Maven. Assurez-vous de spécifier le projet et le dépôt cibles appropriés dans le fichier pom.xml.

  2. Dans votre fichier de configuration de compilation Cloud Build, ajoutez l'étape permettant d'importer le package avec Maven :

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    

Configurer un build Node.js

Après avoir accordé des autorisations au dépôt cible, vous êtes prêt à configurer votre build. Les instructions suivantes décrivent la configuration de votre compilation pour importer un package Node.js dans un dépôt npm.

Pour configurer le build, procédez comme suit:

  1. Configurez l'authentification pour npm. Assurez-vous de spécifier le projet et le dépôt cibles appropriés dans le fichier .npmrc.

  2. Ajoutez un script au fichier package.json de votre projet qui actualise le jeton d'accès pour l'authentification auprès du dépôt.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  3. Dans votre fichier de configuration de compilation, ajoutez l'étape permettant d'importer le package dans le dépôt.

    steps:
    - name: gcr.io/cloud-builders/npm
      args: ['run', 'artifactregistry-login', '${_NPMRC}']
    - name: gcr.io/cloud-builders/npm
      args: ['publish', '${_PACKAGE}']
    

    Dans cet extrait:

    • ${_PACKAGE} est l'emplacement du package, du dossier ou d'un package tarball compressé au format gzip contenant package.json et d'autres fichiers du package.
    • ${_NPMRC} est le chemin d'accès au fichier .npmrc.

    Spécifiez les valeurs de ces variables avec les substitutions Cloud Build au moment de la compilation.

    Par exemple, cette commande importe un package dans un répertoire nommé src avec la configuration dans /home/username/.npmrc:

    gcloud builds submit --config=cloudbuild.yaml \
        --substitutions=_PACKAGE="src",_NPMRC="/home/username/.npmrc" .
    

Configurer un build Python

Après avoir accordé des autorisations au dépôt cible, vous êtes prêt à configurer votre build. Les instructions suivantes décrivent la configuration de votre compilation pour importer un package Python dans un dépôt Python et l'installer à l'aide de pip.

Pour compiler et conteneuriser une application Python, puis la transférer vers un dépôt Docker, consultez la page Créer des applications Python dans la documentation de Cloud Build.

Pour configurer le build, procédez comme suit:

  1. Dans le répertoire contenant votre fichier de configuration de compilation Cloud Build, créez un fichier nommé requirements.txt avec les dépendances suivantes:

    twine
    keyrings.google-artifactregistry-auth
    
    • Twine permet d'importer des packages dans Artifact Registry.
    • keyrings.google-artifactregistry-auth est le backend de trousseaux Artifact Registry qui gère l'authentification avec Artifact Registry pour pip et Twine.
  2. Pour importer un package Python dans le dépôt Python de votre compilation, ajoutez les étapes suivantes à votre fichier de configuration de compilation:

    steps:
    - name: python
      entrypoint: pip
      args: ["install", "-r", "requirements.txt", "--user"]
    - name: python
      entrypoint: python
      args:
      - '-m'
      - 'twine'
      - 'upload'
      - '--repository-url'
      - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/'
      - 'dist/*'
    

    Dans cet extrait, la première étape consiste à installer Twine et le backend de trousseaux Artifact Registry. La deuxième étape consiste à importer vos fichiers Python créés dans le sous-répertoire dist. Ajustez les chemins d'accès à requirements.txt et aux fichiers Python créés s'ils ne correspondent pas à l'extrait.

    Le chemin d'accès au dépôt inclut des substitutions Cloud Build. Cette approche est utile si vous souhaitez utiliser le même fichier de configuration de compilation pour importer des packages dans des dépôts pour différents environnements, tels que des tests, des préproduction ou de production.

    • ${_LOCATION} et ${_REPOSITORY} sont des substitutions définies par l'utilisateur pour l'emplacement du dépôt, le nom du dépôt et le nom du package. Vous spécifiez les valeurs de ces variables au moment de la compilation.
    • $PROJECT_ID est une remplacement par défaut que Cloud Build résout avec l'ID de projet Google Cloud de la compilation.

      • Si vous exécutez la commande gcloud builds submit, Cloud Build utilise l'ID de projet actif dans la session gcloud.
      • Si vous utilisez un déclencheur de compilation, Cloud Build utilise l'ID du projet dans lequel il est exécuté.

      Vous pouvez également utiliser une substitution définie par l'utilisateur au lieu de $PROJECT_ID afin de pouvoir spécifier un ID de projet au moment de la compilation.

  3. Pour installer le package à partir du dépôt Python, ajoutez les étapes appropriées à votre fichier de configuration de compilation.

    • Si les deux services se trouvent dans le même projet, il vous suffit d'exécuter la commande pip install.

      steps:
      - name: python
        entrypoint: pip
        args:
        - 'install'
        - '--index-url'
        - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/'
        - '${_PACKAGE}'
        - '--verbose'
      
    • Si Cloud Build et Artifact Registry se trouvent dans des projets différents, vous devez installer les dépendances dans requirements.txt avant d'installer des packages.

      steps:
      - name: python
        entrypoint: pip
        args: ["install", "-r", "requirements.txt", "--user"]
      - name: python
        entrypoint: pip
        args:
        - 'install'
        - '--index-url'
        - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/'
        - '${_PACKAGE}'
        - '--verbose'
      

    Cet extrait inclut une substitution ${_PACKAGE} supplémentaire pour le nom du package.

  4. Lorsque vous êtes prêt à exécuter le build, spécifiez des valeurs pour les substitutions définies par l'utilisateur. Par exemple, cette commande remplace:

    • us-east1 pour l'emplacement du dépôt
    • my-repo pour le nom du dépôt
    • my-package pour le nom du package.
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .