Link al lab

Recursos identificados

  • APIs: cloudbuild.googleapis.com, artifactregistry.googleapis.com.
  • Artifact Registry: repositorio devops-repo (formato Docker, regional).
  • Cloud Build trigger: devops-trigger — se dispara en cada push a main del repositorio GitHub.
  • Cloud Build config: cloudbuild.yaml que construye y pushea la imagen con tag $COMMIT_SHA.
  • GitHub repository: devops-repo (privado) — fuente del código del pipeline.
  • Imagen Docker: $REGION-docker.pkg.dev/$PROJECT_ID/devops-repo/devops-image:$COMMIT_SHA.
  • Compute Engine VMs: dos instancias de prueba creadas manualmente para validar el deploy.

Comandos ejecutados

Instalar GitHub CLI

curl -sS https://webi.sh/gh | sh

Autenticarse con GitHub

gh auth login

Obtener username de GitHub y configurar git

GITHUB_USERNAME=$(gh api user -q ".login")
echo ${GITHUB_USERNAME}

git config --global user.name "${GITHUB_USERNAME}"
git config --global user.email "<YOUR_EMAIL>"

Crear repositorio privado en GitHub y clonarlo

gh repo create devops-repo --private
gh repo clone devops-repo
cd devops-repo

Crear repositorio Docker en Artifact Registry

gcloud artifacts repositories create devops-repo \
  --repository-format=docker \
  --location=$REGION

Configurar autenticación Docker para Artifact Registry

gcloud auth configure-docker $REGION-docker.pkg.dev

Agregar archivos de la aplicación Python (main.py, requirements.txt, Dockerfile, cloudbuild.yaml)

Se crean manualmente en el directorio clonado. El Dockerfile usa Python 3.13 con gunicorn:

FROM python:3.13
WORKDIR /app
COPY . .
RUN pip install gunicorn
RUN pip install -r requirements.txt
ENV PORT=80
CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 main:app

El cloudbuild.yaml construye y pushea la imagen usando $COMMIT_SHA como tag:

steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', '$REGION-docker.pkg.dev/$PROJECT_ID/devops-repo/devops-image:$COMMIT_SHA', '.']
images:
  - '$REGION-docker.pkg.dev/$PROJECT_ID/devops-repo/devops-image:$COMMIT_SHA'
options:
  logging: CLOUD_LOGGING_ONLY

Primer commit y push

git add --all
git commit -a -m "Initial Commit"
git push origin main

Build manual inicial (antes del trigger)

gcloud builds submit \
  --tag $REGION-docker.pkg.dev/$DEVSHELL_PROJECT_ID/devops-repo/devops-image:v0.1 .

Commit con el Dockerfile (agrega soporte Docker)

git add Dockerfile
git commit -m "Added Docker Support"
git push origin main

Crear el build trigger (devops-trigger) desde Cloud Console

El trigger conecta el repositorio GitHub con Cloud Build usando cloudbuild.yaml. Se configura en: Cloud Build → Triggers → Create Trigger → GitHub (App).

Probar que el trigger funciona

git commit -a -m "Testing Build Trigger"
git push origin main