](/en/actions/security-guides/using-githubs-security-features-to-secure-your-use-of-github-actions)
    * [ Automatic token authentication  ](/en/actions/security-guides/automatic-token-authentication)

  * Creating actions 

    * [ About custom actions  ](/en/actions/creating-actions/about-custom-actions)
    * [ Create a Docker container action  ](/en/actions/creating-actions/creating-a-docker-container-action)
    * [ Create a JavaScript action  ](/en/actions/creating-actions/creating-a-javascript-action)
    * [ Create a composite action  ](/en/actions/creating-actions/creating-a-composite-action)
    * [ Metadata syntax  ](/en/actions/creating-actions/metadata-syntax-for-github-actions)
    * [ Dockerfile support  ](/en/actions/creating-actions/dockerfile-support-for-github-actions)
    * [ Set exit codes  ](/en/actions/creating-actions/setting-exit-codes-for-actions)
    * [ Publish in GitHub Marketplace  ](/en/actions/creating-actions/publishing-actions-in-github-marketplace)
    * [ Share from your private repository  ](/en/actions/creating-actions/sharing-actions-and-workflows-from-your-private-repository)
    * [ Share with your organization  ](/en/actions/creating-actions/sharing-actions-and-workflows-with-your-organization)
    * [ Release and maintain actions  ](/en/actions/creating-actions/releasing-and-maintaining-actions)
    * [ CLI setup action  ](/en/actions/creating-actions/developing-a-third-party-cli-action)

  * [ Guides for GitHub Actions  ](/en/actions/guides)

  * [ GitHub Actions ](/en/actions "GitHub Actions") / 
  * [ Using jobs ](/en/actions/using-jobs "Using jobs") / 
  * [ Use jobs in a workflow ](/en/actions/using-jobs/using-jobs-in-a-workflow "Use jobs in a workflow")

#  Using jobs in a workflow

Use workflows to run multiple jobs.

##  In this article

  * Overview 
  * Setting an ID for a job 
  * Setting a name for a job 
  * Defining prerequisite jobs 

##  Overview

A workflow run is made up of one or more ` jobs ` , which run in parallel by
default. To run jobs sequentially, you can define dependencies on other jobs
using the ` jobs.<job_id>.needs ` keyword.

Each job runs in a runner environment specified by ` runs-on ` .

You can run an unlimited number of jobs as long as you are within the workflow
usage limits. For more information, see " [ Usage limits, billing, and
administration ](/en/actions/learn-github-actions/usage-limits-billing-and-
administration) " for GitHub-hosted runners and " [ About self-hosted runners
](/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-
self-hosted-runners#usage-limits) " for self-hosted runner usage limits.

If you need to find the unique identifier of a job running in a workflow run,
you can use the GitHub API. For more information, see " [ REST API endpoints
for GitHub Actions ](/en/rest/actions#workflow-jobs) ."

##  Setting an ID for a job

Use ` jobs.<job_id> ` to give your job a unique identifier. The key ` job_id `
is a string and its value is a map of the job's configuration data. You must
replace ` <job_id> ` with a string that is unique to the ` jobs ` object. The
` <job_id> ` must start with a letter or ` _ ` and contain only alphanumeric
characters, ` - ` , or ` _ ` .

####  Example: Creating jobs

In this example, two jobs have been created, and their ` job_id ` values are `
my_first_job ` and ` my_second_job ` .

    
    
    jobs:
      my_first_job:
        name: My first job
      my_second_job:
        name: My second job
    

##  Setting a name for a job

Use ` jobs.<job_id>.name ` to set a name for the job, which is displayed in
the GitHub UI.

##  Defining prerequisite jobs

Use ` jobs.<job_id>.needs ` to identify any jobs that must complete
successfully before this job will run. It can be a string or array of strings.
If a job fails or is skipped, all jobs that need it are skipped unless the
jobs use a conditional expression that causes the job to continue. If a run
contains a series of jobs that need