Sign in or sign up before continuing. Don't have an account yet? Register now to get started.
Register now

Do not create deployment records for `skipped` deploy jobs

Context

We want to make sure that deployment records are only created for deploy jobs that are ready to run. This means that deploy jobs that are still at the created or at the skipped state should not have deployment records.

Create Deployments for processed (ready-to-run)... (#391291 - closed) ensures that deploy jobs with status=created do not yet have a deployment record by creating the deployment record only when the job is about to be processed.

Ensuring that a skipped job does not have a deployment record is a little more complicated since a job is mark as skipped during processing.

In this issue, we want to make sure that deployment records are not created for skipped jobs.

Illustration

Given this GitLab CI configuration:

stages: [other, stages, here, stage-4, stage-5]

# jobs in other stages here

canary:
  stage: stage-4
  environment:
    name: canary
    action: start
  script: exit 0
  when: manual

production-a:
  stage: stage-5
  environment:
    name: production-a
    action: start
  script: exit 0
  when: manual

production-b:
  stage: stage-5
  environment:
    name: production-b
    action: start
  script: exit 0
  when: manual
  needs: [canary]
  1. Once the pipeline has reached the canary job, we expect deployment records to be created for canary.
  2. We also expect a deployment record to be created for production-a because the canary job is set as allow_failure: true by default, meaning that production-a will be run regardless of whether canary succeeds or not.
  3. We do not expect a deployment record to be immediately created for production-b because it is set as needs: [canary], meaning that it will not run if canary fails. We only expect a deployment record to be created once canary succeeds.

Expectations 1 & 2 are met: deployment records are created for canary and production-a

Expectation 3 is not met: a deployment record is still immediately created for production-b. We need to change this so that a deployment record is created only when canary succeeds.

Step-by-step status changes + deployment records creation during processing

Expected behavior

processing states & deployment records
pipeline reaches canary job canary (manual with deployment) => production-a (manual with deployment) => production-b (skipped without deployment)
IF canary job succeeds canary (success with deployment) => production-a (manual with deployment) => production-b (manual with deployment)
IF canary job fails canary (failed with deployment) => production-a (manual with deployment) => production-b (skipped without deployment)

Current behavior

processing states & deployment records
pipeline reaches canary job canary (manual with deployment) => production-a (manual with deployment) => production-b (skipped with deployment)
IF canary job succeeds canary (success with deployment) => production-a (manual with deployment) => production-b (manual with deployment)
IF canary job fails canary (failed with deployment) => production-a (manual with deployment) => production-b (skipped with deployment)

Proposal

TBA

Assignee Loading
Time tracking Loading