From the root of your project (where the Dockerfile is):
docker build -t ai-newsletter .You now have a local image named ai-newsletter. You can test it with
docker run -p 8080:8080 ai-newslettergcloud config set project ai-newslteer
gcloud config set run/region us-central1gcloud services enable \
artifactregistry.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.comgcloud artifacts repositories create ai-newsletter-repo \
--repository-format=docker \
--location=us-central1 \
--description="Newsletter agent container repo"If it already exists, you will get a harmless error — you can ignore it.
docker tag ai-newsletter \
us-central1-docker.pkg.dev/ai-newslteer/ai-newsletter-repo/ai-newsletter:latestgcloud auth configure-docker us-central1-docker.pkg.devdocker push \
us-central1-docker.pkg.dev/ai-newslteer/ai-newsletter-repo/ai-newsletter:latestUse the pushed image:
gcloud run deploy ai-newsletter-service \
--image us-central1-docker.pkg.dev/ai-newslteer/ai-newsletter-repo/ai-newsletter:latest \
--region us-central1 \
--platform managed \
--allow-unauthenticated \
--set-env-vars PORT=8080You can get the service URL:
gcloud run services describe ai-newsletter-service \
--format="value(status.url)" \
--region us-central1Open the printed URL in your browser — you’ll see the ADK Web UI.
echo -n "YOUR_API_KEY" | gcloud secrets create google-api-key --data-file=-
echo -n "YOUR_SMTP_PASSWORD" | gcloud secrets create smtp-pass --data-file=-(Repeat for other variables)
gcloud secrets add-iam-policy-binding google-api-key \
--member=serviceAccount:$(gcloud projects describe ai-newslteer --format='value(projectNumber)')-compute@developer.gserviceaccount.com \
--role=roles/secretmanager.secretAccessor(Repeat for smtp-pass)
gcloud run deploy ai-newsletter \
--image gcr.io/ai-newslteer/ai-newsletter \
--region us-central1 \
--platform managed \
--allow-unauthenticated \
--set-env-vars GOOGLE_GENAI_USE_VERTEXAI=FALSE \
--set-env-vars SMTP_HOST=smtp.gmail.com \
--set-env-vars SMTP_PORT=587 \
--set-secrets SMTP_USER=smtp_user:latest \
--set-secrets NEWSLETTER_FROM_EMAIL=from_email:latest \
--set-secrets GOOGLE_API_KEY=google-api-key:latest \
--set-secrets SMTP_PASS=smtp-pass:latestAfter deployment:
- Go to Cloud Run → ai-newsletter → Revisions → Environment Variables
- You should see all of them set.