vpc-sample/tests.cloudbuild.yaml (101 lines of code) (raw):

steps: - id: Deploy Restricted Function name: "gcr.io/google.com/cloudsdktool/cloud-sdk" entrypoint: gcloud dir: "${_SAMPLE_DIR}" args: [ "functions", "deploy", "restricted-${SHORT_SHA}", "--runtime=python311", "--trigger-http", "--no-allow-unauthenticated", "--ingress-settings=internal-only", "--entry-point=hello_world", ] - id: "Build Allow Container Image" name: "gcr.io/cloud-builders/docker:latest" dir: "${_SAMPLE_DIR}" args: ["build", "-t", "${_SERVICE_REGION}-docker.pkg.dev/${PROJECT_ID}/${_REPO_NAME}/${_SERVICE}:${SHORT_SHA}", "."] # Tag docker image with git commit sha waitFor: ["-"] # Run this step in parallel with Deploy Restricted Function - id: "Push Container Image" name: "gcr.io/cloud-builders/docker:latest" args: ["push", "${_SERVICE_REGION}-docker.pkg.dev/${PROJECT_ID}/${_REPO_NAME}/${_SERVICE}:${SHORT_SHA}"] waitFor: ["Build Allow Container Image"] - id: "Deploy to Cloud Run" name: "gcr.io/google.com/cloudsdktool/cloud-sdk:$_CLOUDSDK_VERSION" entrypoint: /bin/bash args: - "-c" - | gcloud run deploy ${_SERVICE}-$BUILD_ID \ --image ${_SERVICE_REGION}-docker.pkg.dev/${PROJECT_ID}/${_REPO_NAME}/${_SERVICE}:${SHORT_SHA} \ --no-allow-unauthenticated \ --update-env-vars=URL=https://${_SERVICE_REGION}-$PROJECT_ID.cloudfunctions.net/restricted-${SHORT_SHA} \ --vpc-egress=all \ --vpc-connector=samples-connector \ --region=${_SERVICE_REGION} waitFor: ["Push Container Image"] - id: "Get Cloud Run URL" name: "gcr.io/google.com/cloudsdktool/cloud-sdk:$_CLOUDSDK_VERSION" entrypoint: "/bin/bash" args: - "-c" - | set -e . /workspace/testing/cloudbuild-templates/common.sh echo $(get_url ${BUILD_ID}) > _service_url echo "Cloud Run URL for ${_SERVICE}-$BUILD_ID is $(cat _service_url)" echo $(get_idtoken) > _id_token env: # Make substitutions available in shell script. - "_SECRET_NAME=${_SECRET_NAME}" - "_RUNNER_IDENTITY=${_RUNNER_IDENTITY}" - "_SERVICE=${_SERVICE}" - "CLOUDSDK_RUN_REGION=${_SERVICE_REGION}" waitFor: ["Deploy to Cloud Run"] - id: "Testing: <-- Cloud Run <-- VPC Connector <-- Cloud Function" name: "gcr.io/cloud-builders/curl" entrypoint: "/bin/bash" args: - "-c" - | set -e # Ingress-restricted Cloud Function should return 404. msg=$(curl -si --show-error -H "Authorization: Bearer $(cat _id_token)" https://${_SERVICE_REGION}-$PROJECT_ID.cloudfunctions.net/restricted-${SHORT_SHA}) if grep -q "404" <<< "$msg"; then echo "Restricted Function Test: PASSED" else echo "Restricted Function Test: FAILED" echo $msg && exit 1 fi # Attempt to reduce flakiness sleep 10 # Cloud Run service should return "Hello World" from the ingress-restricted Cloud Function via the VPC Connector. msg=$(curl -si --fail --show-error -H "Authorization: Bearer $(cat _id_token)" $(cat _service_url)) if grep -q "200" <<< "$msg"; then echo "VPC Function Test: PASSED" else echo "VPC Function Test: FAILED" echo $msg && exit 1 fi waitFor: ["Deploy to Cloud Run", "Deploy Restricted Function"] - id: "Teardown" name: "gcr.io/google.com/cloudsdktool/cloud-sdk:$_CLOUDSDK_VERSION" entrypoint: "/bin/bash" args: - "-c" - | set -x gcloud --quiet run services delete ${_SERVICE}-$BUILD_ID --region ${_SERVICE_REGION} gcloud --quiet functions delete restricted-${SHORT_SHA} set +x echo "View build details in the console: https://console.cloud.google.com/cloud-build/builds/${BUILD_ID}" waitFor: ["Testing: <-- Cloud Run <-- VPC Connector <-- Cloud Function"] options: env: - "CLOUDSDK_RUN_REGION=${_SERVICE_REGION}" - "GOOGLE_CLOUD_PROJECT=${PROJECT_ID}" substitutions: _SERVICE: vpc-sample _SAMPLE_DIR: vpc-sample _SERVICE_REGION: us-central1 _REPO_NAME: samples # Artifact Registry repo, "samples", was manually created _CLOUDSDK_VERSION: latest