Build and create a Shell job in Cloud Run
Before you begin
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
Enable the Cloud Run Admin API and the Cloud Build API:
gcloud services enable run.googleapis.com \ cloudbuild.googleapis.com
After the Cloud Run Admin API is enabled, the Compute Engine default service account is automatically created.
- For Cloud Build to be able to build your sources, grant the
Cloud Build Service Account
role to the Compute Engine default service account by running the following:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=roles/cloudbuild.builds.builder
Replace
PROJECT_NUMBER
with your Google Cloud project number, andPROJECT_ID
with your Google Cloud project ID. For detailed instructions on how to find your project ID, and project number, see Creating and managing projects.Granting the Cloud Build Service Account role to the Compute Engine default service account takes a couple of minutes to propagate.
Writing the sample job
To write a Cloud Run job that runs a Shell script:
Create a new directory named
jobs
and change directory into it:mkdir jobs cd jobs
Create a Dockerfile file with the following contents:
In the same directory, create a
script.sh
file for the actual job code. Copy the following sample lines into it:Cloud Run jobs allows users to specify the number of tasks the job is to execute. This sample code shows how to use the built-in
CLOUD_RUN_TASK_INDEX
environment variable. Each task represents one running copy of the container. Note that tasks are usually executed in parallel. Using multiple tasks is useful if each task can independently process a subset of your data.Each task is aware of its index, stored in the
CLOUD_RUN_TASK_INDEX
environment variable. The built-inCLOUD_RUN_TASK_COUNT
environment variable contains the number of tasks supplied at job execution time via the--tasks
parameter.The code shown also shows how to retry tasks, using the built-in
CLOUD_RUN_TASK_ATTEMPT
environment variable, which contains the number of times this task has been retried, starting at 0 for the first attempt and incrementing by 1 for every successive retry, up to--max-retries
.The code also lets you generate failures as a way to test retries and to generate error logs so you can see what those look like.
Your code is complete and ready to be packaged in a container.
Build jobs container, send it to Artifact Registry and deploy to Cloud Run
Important: This quickstart assumes that you have owner or editor roles in the project you are using for the quickstart. Otherwise, refer to the Cloud Run Source Developer role for the required permissions for deploying a Cloud Run resource from source.
This quickstart uses deploy from source, which builds the container, uploads it to Artifact Registry, and deploys the job to Cloud Run:
gcloud run jobs deploy job-quickstart \ --source . \ --tasks 50 \ --set-env-vars SLEEP_MS=10000 \ --set-env-vars FAIL_RATE=0.1 \ --max-retries 5 \ --region REGION \ --project=PROJECT_ID
where PROJECT_ID is your project ID and REGION is your
region, for example, us-central1
. Note that you can change the
various parameters to whatever values you want to use for your testing purposes.
SLEEP_MS
simulates work and FAIL_RATE
causes X
% of tasks to fail so you
can experiment with parallelism and retrying failing tasks.
Execute a job in Cloud Run
To execute the job you just created:
gcloud run jobs execute job-quickstart --region REGION
Replace REGION with the region you used when you created and deployed
the job, for example us-central1
.
What's next
For more information on building a container from code source and pushing to a repository, see: