About six months back, I published the article Creating a CI/CD pipeline with Azure Pipelines and Cloud Run. This article describes how you can set up a pipeline in Azure Pipelines that builds a .NET application and deploys it to Cloud Run.
The challenge I faced when writing this article was that the Azure Pipeline build agents
did not have
gcloud pre-installed. Without
gcloud, deploying to Cloud Run is not
possible – or at least it’s pretty difficult.
One solution to the lack of a pre-installed
gcloud would have been to use a
But using a self-hosted agent to deploy a serverless application would be rather absurd, so
I described a different approach to overcome the lack of
docker run --entrypoint /bin/bash gcr.io/cloud-builders/gcloud-slim \ -c "echo $(ServiceAccountKey) | base64 -d > _key.json && \ gcloud auth activate-service-account \ --quiet \ --key-file=_key.json && \ gcloud run deploy musicstore \ --quiet \ --service-account=musicstore-runner@$(CloudRun.ProjectId.Development).iam.gserviceaccount.com \ --allow-unauthenticated \ --image=gcr.io/$(ContainerRegistry.ProjectId)/musicstore:$BUILD_BUILDID \ --platform=managed \ --region=$(CloudRun.Region) \ --project=$(CloudRun.ProjectId.Development)"
What this command does is run the
gcr.io/cloud-builders/gcloud-slim image (which contains
a gcloud installation without optional components), inject credentials from a pipeline variable,
and then run
gcloud run deploy.
Although this workaround works well, it’s not self-explanatory and more importantly, it’s pretty slow due to the Docker image pull.
Fortunately, this trick is not necessary anymore – Microsoft recently added
the list of tools that come pre-installed on Microsoft-hosted agents. With
you can now use a much simpler command to trigger a Cloud Run deployment
gcloud auth activate-service-account \ --quiet \ --key-file <(echo $(ServiceAccountKey) | base64 -d) && \ gcloud run deploy clouddemo \ --quiet \ --service-account=clouddemo-runner@$(CloudRun.ProjectId.Development).iam.gserviceaccount.com \ --allow-unauthenticated \ --image=gcr.io/$(ContainerRegistry.ProjectId)/clouddemo:$BUILD_BUILDID \ --platform=managed \ --region=$(CloudRun.Region) \ --project=$(CloudRun.ProjectId.Development)
I recently updated the article on the Google Cloud website
to take advantage of the pre-installed
gcloud and used this opportunity to make some other changes – including swapping out the
(deprecated) Music Store sample application against a
new ASP.NET MVC Core sample application.