Conecta GitHub a Google Cloud con Developer Connect

1. Introducción

En este codelab, crearás una conexión segura a un repositorio de GitHub con Developer Connect y usarás esa conexión para implementar directamente un agente con Agent Runtime en Gemini Enterprise Agent Platform.

Developer Connect establece la conectividad guiándote por los permisos, la autorización, la autenticación y las configuraciones de redes para las herramientas de desarrollo que no son de Google. Esto proporciona una forma directa y nativa de extraer el código de tu aplicación a los servicios de Google Cloud.

En este codelab, utilizaremos una conexión de repositorio de Git de Developer Connect para implementar directamente un agente con Agent Runtime en Gemini Enterprise Agent Platform. Developer Connect admite GitHub, GitHub Enterprise, Bitbucket Cloud, Bitbucket Data Center, GitLab y GitLab Enterprise. En este codelab, explicaremos cómo conectarse a GitHub.

Actividades

  • Crea un agente básico en Agent Runtime y envíalo a GitHub
  • Usa Developer Connect para vincular tu repositorio de GitHub a Google Cloud
  • Implementa el agente en Agent Runtime de forma nativa con tu repositorio conectado
  • Invoca y prueba tu agente remoto implementado

Requisitos

  • Un navegador web, como Chrome
  • Un proyecto de Google Cloud con la facturación habilitada.
  • Una cuenta de GitHub y un token de acceso personal (clásico) con acceso al repositorio

Este codelab es para desarrolladores de todos los niveles, incluidos los principiantes. Los recursos que se administran en este codelab son, en su mayoría, APIs sin servidores y deberían costar menos de USD 1.

2. Antes de comenzar

Crea un proyecto de Google Cloud

  1. En la consola de Google Cloud, en la página del selector de proyectos, selecciona o crea un proyecto de Google Cloud.
  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información para verificar si la facturación está habilitada en un proyecto.

Inicie Cloud Shell

  1. Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
  2. Una vez que te conectes a Cloud Shell, verifica tu autenticación:
    gcloud auth list
    
  3. Confirma que tu proyecto esté configurado:
    export PROJECT_ID=$(gcloud config get-value project)
    
  4. Si tu proyecto no está configurado como se esperaba, configúralo:
    export PROJECT_ID=<YOUR_PROJECT_ID>
    gcloud config set project $PROJECT_ID
    

Habilitar APIs

Ejecuta este comando para habilitar todas las APIs requeridas para Developer Connect y Vertex AI:

gcloud services enable \
  developerconnect.googleapis.com \
  aiplatform.googleapis.com

3. Prepara el código fuente del agente

Primero, crearás un repositorio de GitHub nuevo para almacenar el código fuente de tu agente y le agregarás un agente de razonamiento simple de Python.

  1. Accede a tu cuenta de GitHub.
  2. Crea un repositorio privado nuevo llamado devconnect-agent.
  3. No lo inicialices con un archivo README ni con .gitignore.

Crea los archivos del agente de forma local

De vuelta en la terminal de Cloud Shell, crea un directorio para tu agente y define sus dependencias:

mkdir -p devconnect-agent/test
cd devconnect-agent

Crea un archivo requirements.txt en el directorio test que especifique las bibliotecas de Agent Runtime:

cat <<EOF > test/requirements.txt
google-cloud-aiplatform[agent_engines]
EOF

Crea un archivo my_agent.py en el directorio test. Este script define un agente simple que responde consultas de listas:

cat <<EOF > test/my_agent.py
class MyAgent:

  def query_none(self):
    return None

  def query_list(self):
    return [1, 2, 3]

  def register_operations(self):
    return {
        "": ["query_none", "query_list"],
    }

agent = MyAgent()
EOF

Envía el código a GitHub

Inicializa un repositorio de Git y envía tu código al repositorio de GitHub que acabas de crear.

Reemplaza "<YOUR_GITHUB_USERNAME>" por tu nombre de usuario de GitHub y "<YOUR_GITHUB_TOKEN>" por tu token de acceso personal.

git init
git branch -M main
git add .
git commit -m "Initial commit of agent source"
git remote add origin https://<YOUR_GITHUB_TOKEN>@github.com/<YOUR_GITHUB_USERNAME>/devconnect-agent.git
git push -u origin main

4. Configura Developer Connect

Ahora que tu repositorio está en GitHub, Developer Connect lo vinculará de forma segura a tu proyecto de Google Cloud.

Configura los permisos de IAM

Para autorizar a Developer Connect a acceder a tu proyecto de Google Cloud, genera una identidad de servicio.

gcloud beta services identity create \
    --service=developerconnect.googleapis.com \
    --project=$PROJECT_ID

Puedes crear la conexión y la vinculación con la consola de Google Cloud o la CLI de gcloud.

Opción 1: Usa la consola de Google Cloud

  1. En la consola de Google Cloud, navega a Developer Connect.
  2. Haz clic en Conectar en GitHub.
  3. Asigna un nombre a tu conexión my-github-connection y selecciónala en us-central1.
  4. Sigue las indicaciones para autorizar la app de GitHub de Developer Connect.
  5. Selecciona el repositorio devconnect-agent para vincularlo a tu proyecto.

Opción 2: Usa la CLI de gcloud

Ejecuta los siguientes comandos en Cloud Shell para vincular tu repositorio de GitHub.

Primero, deberás otorgarle a la cuenta de servicio de Developer Connect acceso a Secret Manager.

# Get the service account
SERVICE_ACCOUNT=$(gcloud beta services identity create \
    --service=developerconnect.googleapis.com \
    --project=$PROJECT_ID \
    --format="value(email)")

# Grant access to Secret Manager
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SERVICE_ACCOUNT" \
    --role="roles/secretmanager.admin"
# 1. Create the general Developer Connect connection to GitHub
gcloud developer-connect connections create my-github-connection \
    --location=us-central1 \
    --github-config-app=developer-connect
# 2. Link your specific agent repository to the connection
# Replace <YOUR_GITHUB_USERNAME> with your actual GitHub username
gcloud developer-connect connections git-repository-links create devconnect-agent \
    --connection=my-github-connection \
    --location=us-central1 \
    --clone-uri=https://github.com/<YOUR_GITHUB_USERNAME>/devconnect-agent.git

5. Implementa el agente desde Developer Connect

Con tu repositorio conectado de forma segura, puedes implementar directamente un agente de Agent Runtime aprovechando el vínculo de Developer Connect de forma nativa.

Implementa Agent Runtime

Crea y ejecuta una secuencia de comandos de Python de forma local en Cloud Shell para implementar tu agente con el SDK de Vertex AI.

cd ~
cat <<EOF > deploy.py
import vertexai

PROJECT_ID = "$PROJECT_ID"
LOCATION = "us-central1"

vertexai.init(project=PROJECT_ID, location=LOCATION)
client = vertexai.Client(project=PROJECT_ID, location=LOCATION)

# Define the full URI string for the Developer Connect repository link
repo_link = f"projects/{PROJECT_ID}/locations/{LOCATION}/connections/my-github-connection/gitRepositoryLinks/devconnect-agent"

print("Deploying to Agent Runtime from Developer Connect...")

remote_agent = client.agent_engines.create(
    config={
        "developer_connect_source": {
            "git_repository_link": repo_link,
            "revision": "main",
            "dir": "test",
        },
        "entrypoint_module": "my_agent",
        "entrypoint_object": "agent",
        "requirements_file": "requirements.txt",
        "class_methods": [
            {"name": "query_list", "api_mode": ""}
        ],
        "display_name": "DevConnect Agent",
    },
)

print(f"Agent Runtime deployed successfully: {remote_agent.api_resource.name}")
EOF

Configura las credenciales predeterminadas de la aplicación en gcloud.

gcloud auth application-default login

Ejecuta la secuencia de comandos de implementación. Ten en cuenta que esta arquitectura permite que Vertex AI omita por completo los alcances de ejecución locales y compile la imagen del agente remoto desde la fuente.

python3 deploy.py

Prueba el agente

Una vez que finalice la implementación, ejecuta una secuencia de comandos para consultar el endpoint de tu agente.

cat <<EOF > invoke.py
import vertexai

PROJECT_ID = "$PROJECT_ID"
LOCATION = "us-central1"

client = vertexai.Client(project=PROJECT_ID, location=LOCATION)

# Retrieve the latest reasoning engine
engines = list(client.agent_engines.list())
if engines:
    agent = client.agent_engines.get(name=engines[0].api_resource.name)
    print("Invoking remote agent via endpoint...")
    # NOTE: Invoking remote agent
    response = agent.query_list()
    print(f"Agent response: {response}")
else:
    print("No deployment found.")
EOF

python3 invoke.py

Deberías ver un resultado similar a este:

Invoking remote agent via endpoint...
Agent response: [1, 2, 3]

6. Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud, borra los recursos que creaste durante este codelab.

Libera espacio de los recursos de Developer Connect y Agent Runtime:

cat <<EOF > cleanup.py
import vertexai

PROJECT_ID = "$PROJECT_ID"
LOCATION = "us-central1"

client = vertexai.Client(project=PROJECT_ID, location=LOCATION)

for engine in client.agent_engines.list():
    print(f"Deleting {engine.api_resource.name}")
    engine.delete()
EOF

python3 cleanup.py

Limpia los recursos de Developer Connect:

gcloud developer-connect connections git-repository-links delete devconnect-agent \
    --connection=my-github-connection \
    --location=us-central1 \
    --quiet

gcloud developer-connect connections delete my-github-connection \
    --location=us-central1 \
    --quiet

7. Felicitaciones

¡Felicitaciones! Estableciste de forma segura una integración del repositorio de GitHub con Developer Connect y, de forma nativa, implementaste un agente de IA directamente desde tu árbol de código fuente.

Qué aprendiste

  • Configuraste un proyecto de Google Cloud con Developer Connect y Vertex AI
  • Almacenaste de forma segura un token de acceso personal en Secret Manager.
  • Conexiones de Developer Connect generadas de forma explícita a través de la gcloud CLI
  • Se creó una instancia de Vertex AI Agent Runtime de forma programática, con la asignación de objetos developer_connect_source.

Próximos pasos

Documentos de referencia