Skip to content

CircleCI orb to block/queue jobs to enforce max concurrency limits

License

Notifications You must be signed in to change notification settings

RealSelf/circleci-queue

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CircleCI Concurrency Control Orb

CircleCI GitHub license CircleCI Orb Version Bors enabled

CircleCI Orb to limit workflow concurrency.

Why? Some jobs (typically deployments) need to run sequentially and not parallel, but also run to completion. So CircleCI's native auto-cancel is not quite the right fit. See https://github.com/eddiewebb/circleci-challenge as an example using blue/green cloud foundry deployments.

Basic Usage

This adds concurrency limits by ensuring any jobs with this step will only continue once no previous builds are running. It supports a single argument of how many minutes to wait before aborting itself and it requires a single Environment Variable CIRCLECI_API_KEY - which can be created in account settings.

Screenshots / Examples

Suppose we have a workflow take takes a little while to run. Normally the build (#18) will run immediately, with no queuing. no queuing if only active build

Someone else on the team makes another commit, since the first build (#18) is still running, it will queue build #19. no queuing if only active build

It's late afternoon, everyone is pushing their commits in to ensure they are good before they leave for the day. Build #20 also queues. no queuing if only active build

Meanwhile, build #19 is now allowed to move forward since build #18 finished.

no queuing if only active build

Oh No! Since 1 minute is abnormally long for things to be queued, build #20 aborts itself, letting build #19 finish uninterrupted.

no queuing if only active build

Setup

See https://circleci.com/orbs/registry/orb/eddiewebb/queue#usage-examples for current examples

Note

Queueing is not supported on forked repos. If a queue from a fork happens the queue will immediately exit and the next step of the job will begin.

RealSelf fork changes

Forked eddiewebb/[email protected]. Fixed a bug when a git tag is released and the env variable CIRCLE_BRANCH is unset. Now there is a parameter circle-branch that by default has main as value, but can be set to any other branch name so that it doesn't break queueing in non-main branches.

Deployment steps

# Pack and validate orb
brew install circleci
circleci config pack src/ > pack.yml
circleci orb validate pack.yml

# Only for first time creation
circleci orb create realself/queue

# Push orb (change version to latest)
circleci orb publish ./pack.yml realself/[email protected]

About

CircleCI orb to block/queue jobs to enforce max concurrency limits

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 100.0%