Conéctate a 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 en Artifact Registry, crea un repositorio nuevo.
  2. Si Cloud Build y tu repositorio están en proyectos diferentes o si usas una cuenta de servicio especificada por el usuario para ejecutar compilaciones, otorga el rol de escritor de Artifact Registry a la cuenta de servicio de compilación en el proyecto con los repositorios.

    La cuenta de servicio predeterminada de Cloud Build tiene acceso para realizar las siguientes acciones con un repositorio en el mismo proyecto de Google Cloud:

Configura una compilación de Docker

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

Para configurar tu compilación, haz lo siguiente:

  1. En tu 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', '${_LOCATION}-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 para enviar imágenes a repositorios para diferentes entornos, como pruebas, etapa de pruebas o producción.

    • ${_LOCATION}, ${_REPOSITORY} y ${_IMAGE} son una sustitución definida por el usuario para la ubicación del repositorio, el nombre del repositorio y la imagen. Los valores de estas variables se especifican en el momento de la 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 especificar un ID del proyecto en el momento de la compilación.

  2. Cuando estés listo para ejecutar la compilación, especifica valores para 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" .
    

Cómo configurar una compilación de Go

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

Para configurar tu compilación, haz lo siguiente:

  1. Para subir un módulo de Go al repositorio de Go en tu compilación, agrega los siguientes pasos al archivo de configuración de compilación:

    steps:
    - name: gcr.io/cloud-builders/gcloud
    args:
    - 'artifacts'
    - 'go'
    - 'upload'
    - '--project=$PROJECT_ID'
    - '--location=${_LOCATION}'
    - '--repository=${_REPOSITORY}'
    - '--module-path=${_MODULE_PATH}'
    - '--version=$TAG_NAME'
    

    El archivo de configuración de compilación 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}, ${_REPOSITORY} y ${_MODULE_PATH} son sustituciones definidas por el usuario para la ubicación del repositorio, el nombre del repositorio y la ruta del módulo. Los valores de estas variables se especifican en el momento de la compilación.
    • $PROJECT_ID y $TAG_NAME son sustituciones predeterminadas que Cloud Build reemplaza por lo siguiente:

      • $PROJECT_ID se reemplaza por 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 especificar un ID del proyecto en el momento de la compilación.

      • $TAG_NAME se reemplaza por el nombre de tu etiqueta para admitir la convención de Go de usar etiquetas Git como números de versión.

  2. Para instalar el paquete desde el repositorio de Go, agrega los siguientes pasos al archivo de configuración de compilación:

    • Agrega un extremo regional de Artifact Registry en la ubicación de tu repositorio al archivo .netrc.
    • Ejecuta la herramienta auxiliar de credenciales para actualizar los tokens de OAuth.
    • Ejecuta el comando go run. También puedes cambiar esto a go build para compilar el módulo, go test para ejecutar pruebas o go mod tidy para descargar las dependencias.

    Para el paso del comando go, GOPROXY se configura en el repositorio de Artifact Registry que aloja las dependencias privadas. Puedes agregar el proxy público a la lista GOPROXY separada por comas si el módulo tiene dependencias públicas.

    steps:
    - name: golang
      entrypoint: go
      args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'add-locations', '--locations=${_LOCATION}']
      env:
      # Set GOPROXY to the public proxy to pull the credential helper tool
      - 'GOPROXY=https://proxy.golang.org'
    - name: golang
      entrypoint: go
      args: ['run', 'github.com/GoogleCloudPlatform/artifact-registry-go-tools/cmd/auth@v0.1.0', 'refresh']
      env:
      # Set GOPROXY to the public proxy to pull the credential helper tool
      - 'GOPROXY=https://proxy.golang.org'
    - name: golang
      entrypoint: go
      args: ['run', '.']
      env:
      - 'GOPROXY=https://${_LOCATION}-go.pkg.dev/${_PROJECT_ID}/${_REPOSITORY}'
    options:
      env:
      # Disable GO sumdb checks for private modules.
      - 'GONOSUMDB=${_MODULE_PATH}'
    
  3. Cuando estés listo para ejecutar la compilación, especifica valores para las sustituciones definidas por el usuario. Por ejemplo, este comando sustituye lo siguiente:

    • us-east1 para la ubicación del repositorio
    • my-project para el ID del proyecto
    • my-repo para el nombre del repositorio
    • example.com/greetings para la ruta de acceso del módulo
    gcloud builds submit --config=cloudbuild.yaml \
      --substitutions=_LOCATION="us-east1",_PROJECT_ID="my-project",_REPOSITORY="my-repo",_MODULE_PATH="example.com/greetings" .
    

Cómo configurar una compilación de Java

Una vez que hayas otorgado los permisos al repositorio de destino, estarás listo para configurar tu 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 siguiente paso para subir el paquete con Maven:

    steps:
    - name: gcr.io/cloud-builders/mvn
      args: ['deploy']
    
  3. Cuando tu archivo de configuración de compilación esté listo, inicia la compilación con el siguiente comando:

    gcloud builds submit
    

Configura una compilación de Node.js

Una vez que hayas otorgado los permisos al repositorio de destino, estarás listo para configurar tu compilación. En las siguientes instrucciones, se describe 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. Agrega el repositorio de Artifact Registry al archivo .npmrc en el proyecto de Node.js. Se encuentra en el directorio con tu archivo package.json.

    @SCOPE:registry=https://LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY
    //LOCATION-npm.pkg.dev/PROJECT_ID/REPOSITORY:always-auth=true
    
    • SCOPE-NAME es el nombre del permiso de la Administración de socios de red que se debe asociar con el repositorio. Usar permisos garantiza que siempre publiques e instales paquetes desde el repositorio correcto.
    • PROJECT_ID es tu ID del proyecto de Google Cloud.
    • LOCATION es la ubicación regional o multirregional del repositorio.
    • REPOSITORY es el nombre del repositorio.
  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"
    }
    
  1. 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']
    - name: gcr.io/cloud-builders/npm
      args: ['publish', '${_PACKAGE}']
    

    ${_PACKAGE} es una sustitución de Cloud Build que representa el directorio del proyecto de Node.js. Puedes especificar el directorio cuando ejecutes el comando para ejecutar la compilación.

    Por ejemplo, este comando sube el paquete desde un directorio llamado src:

    gcloud builds submit --config=cloudbuild.yaml \
        --substitutions=_PACKAGE="src" .
    

Configura una compilación de Python

Una vez que hayas otorgado los permisos al repositorio de destino, estarás listo para configurar tu compilación. En las siguientes instrucciones, se describe cómo configurar tu compilación para subir un paquete de Python a un repositorio de Python y luego instalar el paquete con pip.

Para compilar y alojar 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 que contenga 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 al 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, el primer paso instala Twine y el backend del llavero de claves de Artifact Registry. En el segundo paso, se suben los archivos de Python compilados en el 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 y el nombre del repositorio y el nombre del paquete. Los valores se especifican en el momento de la 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 especificar un ID del proyecto en el momento de la compilación.

  3. Para instalar el paquete desde el repositorio de Python, agrega un paso a tu archivo de configuración de compilación que ejecute el comando pip install.

      steps:
      - name: python
        entrypoint: pip
        args:
        - 'install'
        - '--index-url'
        - 'https://${_LOCATION}-python.pkg.dev/$PROJECT_ID/${_REPOSITORY}/simple/'
        - '${_PACKAGE}'
        - '--verbose'
    

    Este fragmento incluye una sustitución adicional de ${_PACKAGE} para el nombre del paquete.

  4. Cuando estés listo para ejecutar la compilación, especifica valores para 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" .