New to Kestra?
Use blueprints to kickstart your first workflows.
Build a Docker image from any GitHub repo and deploy it to local, GCP Cloud Run, or Azure with a single Kestra flow driven by one cloud_name input.
Ship the same container to multiple clouds without maintaining a separate pipeline for each target. This Kestra flow clones a public GitHub repository, builds and pushes a Docker image to Docker Hub, then deploys that image to local Docker, GCP Cloud Run, or Azure Container Instances based on a single cloud_name input. It solves the common problem of fragmented, copy-pasted CI scripts where build logic and per-cloud deployment logic drift apart and become impossible to audit.
io.kestra.plugin.core.flow.WorkingDirectory task wraps the build stage so all steps share one workspace.io.kestra.plugin.git.Clone checks out the repo from github_repo at github_repo_branch.io.kestra.plugin.docker.Build builds the image from the repo Dockerfile, tags it user/app:tag, and pushes it to Docker Hub with push: true.io.kestra.plugin.core.flow.Switch reads cloud_name and routes to one of three cases:local: io.kestra.plugin.docker.Run runs the container with a host port binding, then io.kestra.plugin.scripts.shell.Commands exposes it publicly through an ngrok static domain.gcp: io.kestra.plugin.gcp.cli.GCloudCLI runs gcloud run deploy to push the image to Cloud Run.azure: io.kestra.plugin.azure.cli.AzCLI runs az container create to launch an Azure Container Instance.Docker, gcloud, and az each have their own CLI but no shared scheduler, retry policy, or lineage across clouds. Kestra unifies them in one declarative YAML flow: a single Switch chooses the target, every task run is logged and observable, retries and error handling are built in, and the build artifact is traced through to each deployment. You get event triggers and scheduling that a standalone container CLI simply cannot provide.
Dockerfile.DOCKER_HUB_USERNAME, DOCKER_HUB_PATNGROK_AUTH_TOKEN, NGROK_STATIC_DOMAINGCP_PROJECT_ID, GCP_SERVICE_ACCOUNT, GCP_REGIONAZURE_APP_ID, AZURE_SERVICE_PRINCIPAL_PASSWORD, AZURE_TENANT_ID, AZURE_RESOURCE_GROUP, AZURE_LOCATIONcloud_name to local, gcp, or azure.github_repo and github_repo_branch at your app.docker_user_account_name, application_name, and docker_image_tag.Switch case for AWS ECS or Kubernetes.WorkingDirectory to build from a private repo with Git credentials.Schedule or webhook trigger to redeploy on every push.