Skip to content

Component Pinning

CI/CD components in include: must use immutable version refs, not branch names like @main.

Bad

include:
  - component: gitlab.com/org/pipeline@main

Good

include:
  - component: gitlab.com/org/pipeline@1.2.0

Policy

From security/component-pinning.feature:

Scenario: Component includes must use semver
  Given I have include type "component" defined
  Then its version must match "^\d+\.\d+\.\d+(-[\w.]+)?$"

Consume in GitLab CI

Offline policy — no API token required:

include:
  - local: example-ci/compliance-jobs.yml

compliance:
  extends: .compliance:offline

The job runs all policies under policies/security/, including component-pinning.feature.

Run locally

gitlab-compliance check -f policies/security/ -p .gitlab-ci.yml

Scenarios skip when the pipeline has no component: includes (not applicable).

Back to Examples.