Integra con Cloud Build

En esta página, se describe cómo configurar Cloud Build para almacenar artefactos compilados en un repositorio de Artifact Registry.

Antes de comenzar

  1. Si el repositorio de destino no existe, crea un repositorio nuevo.
  2. Si Cloud Build y el repositorio están en proyectos diferentes, o si usas un comando decuenta de servicio especificada por el usuario para ejecutar compilaciones,otorga la función de escritor de Artifact Registry a la cuenta de servicio de compilación del proyecto con los repositorios.

    La cuenta de servicio predeterminada de Cloud Build tiene permisos para subir y descargar desde repositorios en el mismo proyecto.

Configura una compilación de Docker

Una vez que hayas otorgado los permisos al repositorio de destino, estarás listo para configurar la compilación.

Para configurar tu compilación, haz lo siguiente:

  1. En el archivo de configuración de compilación, agrega el paso para compilar y etiquetar la imagen.

    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}'
    

    En este fragmento, se usan sustituciones de Cloud Build. Este enfoque es útil si deseas usar el mismo archivo de configuración de compilación a fin de enviar imágenes a repositorios para diferentes entornos, como pruebas, etapas de pruebas o producción.

    • ${_LOCATION}, ${_REPOSITORY} y ${_IMAGE} son la sustitución definida por el usuario por la ubicación del repositorio, el nombre del repositorio y la imagen. Debes especificar los valores para estas variables en el tiempo de compilación.
    • $PROJECT_ID es una sustitución predeterminada que Cloud Build resuelve con el ID del proyecto de Google Cloud para la compilación.

      • Si ejecutas el comando gcloud builds submit, Cloud Build usa el ID del proyecto activo en la sesión de gcloud.
      • Si usas un activador de compilación, Cloud Build usa el ID del proyecto en el que se ejecuta Cloud Build.

      Como alternativa, puedes usar una sustitución definida por el usuario en lugar de $PROJECT_ID para que puedas especificar un ID del proyecto en el tiempo de compilación.

  2. Cuando estés listo para ejecutar la compilación, especifica los valores de las sustituciones definidas por el usuario. Por ejemplo, este comando sustituye lo siguiente:

    • us-east1 para la ubicación del repositorio
    • my-repo para el nombre del repositorio
    • my-image para el nombre de la imagen
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_IMAGE="my-image" .
    

Configura una compilación de Java

Una vez que hayas otorgado los permisos al repositorio de destino, estarás listo para configurar la compilación. En las siguientes instrucciones, se describe cómo configurar tu compilación para subir un paquete de Java a un repositorio de Maven.

Para configurar tu compilación, haz lo siguiente:

  1. Configura la autenticación para Maven. Asegúrate de especificar el proyecto de destino y el repositorio correctos en tu archivo pom.xml.

  2. En tu archivo de configuración de compilación de Cloud Build, agrega el paso para subir el paquete con Maven:

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

Configura una compilación de Node.js

Una vez que hayas otorgado los permisos al repositorio de destino, estarás listo para configurar la compilación. Las siguientes instrucciones describen cómo configurar tu compilación para subir un paquete de Node.js a un repositorio de npm.

Para configurar tu compilación, haz lo siguiente:

  1. Configura la autenticación para la Administración de socios de red. Asegúrate de especificar el proyecto y el repositorio de destino correctos en tu archivo .npmrc.

  2. Agrega una secuencia de comandos al archivo package.json de tu proyecto que actualice el token de acceso para la autenticación con el repositorio.

    "scripts": {
     "artifactregistry-login": "npx google-artifactregistry-auth"
    }
    
  3. En tu archivo de configuración de compilación, agrega el paso para subir el paquete al repositorio.

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

    En este fragmento, se ilustra lo siguiente:

    • ${_PACKAGE} es la ubicación del paquete, la carpeta o un archivo comprimido en gzip que contiene package.json y otros archivos en tu paquete.
    • ${_NPMRC} es la ruta de acceso al archivo .npmrc.

    Especifica los valores para estas variables con las sustituciones de Cloud Build en el momento de la compilación.

    Por ejemplo, este comando sube un paquete en un directorio llamado src con configuración en /home/username/.npmrc:

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

Configura una compilación de Python

Una vez que hayas otorgado los permisos al repositorio de destino, estarás listo para configurar la compilación. Las siguientes instrucciones describen la configuración de tu compilación para subir un paquete de Python a un repositorio de Python y, luego, instalarlo con pip.

Para compilar y organizar en contenedores una aplicación de Python y, luego, enviarla a un repositorio de Docker, consulta Compila aplicaciones de Python en la documentación de Cloud Build.

Para configurar tu compilación, haz lo siguiente:

  1. En el directorio con tu archivo de configuración de compilación de Cloud Build, crea un archivo llamado requirements.txt con las siguientes dependencias:

    twine
    keyrings.google-artifactregistry-auth
    
    • Twine es para subir paquetes a Artifact Registry.
    • keyrings.google-artifactregistry-auth es el backend del llavero de claves de Artifact Registry que controla la autenticación con Artifact Registry para pip y Twine.
  2. Para subir un paquete de Python a tu repositorio de Python en tu compilación, agrega los siguientes pasos a tu archivo de configuración de compilación:

    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/*'
    

    En este fragmento, en el primer paso, se instala Twine y el backend de llavero de claves de Artifact Registry. El segundo paso sube los archivos compilados de Python al subdirectorio dist. Ajusta las rutas de acceso a requirements.txt y tus archivos de Python compilados si no coinciden con el fragmento.

    La ruta del repositorio incluye sustituciones de Cloud Build. Este enfoque es útil si deseas usar el mismo archivo de configuración de compilación a fin de subir paquetes a repositorios para diferentes entornos, como pruebas, etapa de pruebas o producción.

    • ${_LOCATION} y ${_REPOSITORY} son sustituciones definidas por el usuario para la ubicación del repositorio, el nombre del repositorio y el nombre del paquete. Debes especificar los valores para estas variables en el tiempo de compilación.
    • $PROJECT_ID es una sustitución predeterminada que Cloud Build resuelve con el ID del proyecto de Google Cloud para la compilación.

      • Si ejecutas el comando gcloud builds submit, Cloud Build usa el ID del proyecto activo en la sesión de gcloud.
      • Si usas un activador de compilación, Cloud Build usa el ID del proyecto en el que se ejecuta Cloud Build.

      Como alternativa, puedes usar una sustitución definida por el usuario en lugar de $PROJECT_ID para que puedas especificar un ID del proyecto en el tiempo de compilación.

  3. A fin de instalar el paquete desde el repositorio de Python, agrega los pasos adecuados a tu archivo de configuración de compilación.

    • Si ambos servicios están en el mismo proyecto, solo debes ejecutar el comando 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 y Artifact Registry están en proyectos diferentes, debes instalar las dependencias en requirements.txt antes de instalar paquetes.

      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'
      

    En este fragmento, se incluye una sustitución de ${_PACKAGE} adicional por el nombre del paquete.

  4. Cuando estés listo para ejecutar la compilación, especifica los valores de las sustituciones definidas por el usuario. Por ejemplo, este comando sustituye lo siguiente:

    • us-east1 para la ubicación del repositorio
    • my-repo para el nombre del repositorio
    • my-package para el nombre del paquete
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_REPOSITORY="my-repo",_PACKAGE="my-package" .