Passer des données entre les étapes de compilation

Cette page explique comment transmettre des données entre les étapes de compilation. Si vous débutez avec Cloud Build, commencez par lire le Guide de démarrage rapide et la Présentation de la configuration de compilation.

Cloud Build exécute vos tâches sous la forme d'étapes de compilation, qui s'exécutent dans des environnements isolés et conteneurisés. Après chaque étape, le conteneur est supprimé. Cela vous permet de disposer d'outils et d'environnements complètement différents pour chaque étape et, par défaut, les données créées en une seule étape ne peuvent pas contaminer l'étape suivante. Toutefois, vous devrez peut-être conserver l'état d'une étape de compilation pour l'utiliser dans les étapes suivantes.

Dans ce cas, Cloud Build fournit des volumes, qui sont des chemins de fichiers en lecture-écriture que vous pouvez associer à n'importe quelle étape de compilation. Les volumes conservent leur contenu tout au long de la compilation. Vous pouvez définir votre propre volume ou utiliser /workspace, qui est le volume par défaut fourni par Cloud Build. Avant d'exécuter une compilation, Cloud Build extrait le code source dans /workspace. Tout ce qui est écrit dans un fichier volumes et /workspace seront disponibles pour les étapes suivantes.

Transmettre des données à l'aide d'espaces de travail

Pour transmettre des données entre les étapes de compilation, stockez les éléments produits par l'étape de compilation dans /workspace. Ces éléments seront disponibles pour toutes les étapes de compilation suivantes.

Dans l'exemple de fichier de configuration de compilation suivant, la première étape de compilation stocke la chaîne "First Value" dans /workspace/first.txt et la valeur 2 dans /workspace/second.txt. La deuxième étape de compilation lit et affiche les valeurs de /workspace/first.txt et /workspace/second.txt.

YAML

steps:
- id: "Store Values"
  name: ubuntu
  entrypoint: bash
  args:
    - -c
    - |
      # Save a value to persistent volume mount: "/workspace"
      echo "First Value" > /workspace/first.txt &&
      # Save another
      expr 1 + 1 > /workspace/second.txt
# In the next step, everything in the environment is discarded
# EXCEPT items in "/workspace"
- id: "Read Values"
  name: ubuntu
  entrypoint: bash
  args:
    - -c
    - |
      # Read from "/workspace"
      echo "First we saved " $(cat /workspace/first.txt) &&
      echo "Then we saved " $(cat /workspace/second.txt)

JSON

{
  "steps": [
  {
    "id": "Store Values",
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "echo \"First Value\" > /workspace/first.txt &&\nexpr 1 + 1 > /workspace/second.txt\n"
    ]
    },
    {
      "id": "Read Values",
      "name": "ubuntu",
      "entrypoint": "bash",
      "args": [
        "-c",
        "echo \"First we saved \" $(cat /workspace/first.txt) &&\necho \"Then we saved \" $(cat /workspace/second.txt)\n"
      ]
    }
    ]
}

Transmettre des données à l'aide de volumes spécifiés par l'utilisateur

Au lieu d'utiliser le volume /workspace par défaut fourni par Cloud Build, vous pouvez définir votre propre volume pour conserver les données entre les étapes de compilation.

Pour définir et utiliser votre propre volume :

  • Dans l'étape de compilation où vous souhaitez stocker les données :
    • Ajoutez un bloc volumes et définissez les champs suivants :
      • name : définissez la valeur de ce champ sur le nom du volume souhaité.
      • path : définissez la valeur de ce champ sur le chemin d'accès au fichier pour stocker vos données.
    • Stockez ls données dans le chemin de fichier spécifié dans path.
  • À l'étape de compilation où vous souhaitez utiliser les données :
    • Ajoutez un bloc volumes avec les valeurs pour name et path.
    • Utilisez les données du chemin de fichier spécifié dans path.

Dans l'exemple de fichier de configuration de compilation suivant, la première étape de compilation définit un volume nommé myvolume et stocke les données dans /persistent_volume/file. La deuxième étape de compilation affiche la valeur stockée dans /persistent_volume/file.

YAML

steps:
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      echo "Hello, world!" > /persistent_volume/file
  volumes:
  - name: 'myvolume'
    path: '/persistent_volume'
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
    - '-c'
    - |
      cat /persistent_volume/file
  volumes:
  - name: 'myvolume'
    path: '/persistent_volume'

JSON

{
  "steps": [
  {
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "echo \"Hello, world!\" > /persistent_volume/file\n"
     ],
     "volumes": [
     {
       "name": "myvolume",
       "path": "/persistent_volume"
     }
     ]
  },
  {
    "name": "ubuntu",
    "entrypoint": "bash",
    "args": [
      "-c",
      "cat /persistent_volume/file\n"
    ],
    "volumes": [
    {
      "name": "myvolume",
      "path": "/persistent_volume"
    }
    ]
  }
]
}

Étape suivante