Comprehensive toolkit for generating best practice GitLab CI/CD pipelines and configurations following current standards and conventions. Use this skill when creating new GitLab CI/CD resources, implementing CI/CD pipelines, or building GitLab pipelines from scratch.
Overall
score
93%
Does it follow best practices?
Validation for skill structure
Generate production-ready GitLab CI/CD pipeline configurations following current best practices, security standards, and naming conventions. All generated resources are validated using the devops-skills:gitlab-ci-validator skill before delivery.
CRITICAL: Before generating ANY pipeline, complete these steps in order:
Use the Read tool to load all four reference files plus the relevant template:
1. references/best-practices.md — Security, performance, and naming patterns
2. references/common-patterns.md — Standard pipeline patterns as foundation
3. references/gitlab-ci-reference.md — Syntax reference and keyword details
4. references/security-guidelines.md — Security-sensitive configurationsTemplate selection:
assets/templates/docker-build.ymlassets/templates/kubernetes-deploy.ymlassets/templates/multi-project.ymlassets/templates/basic-pipeline.ymlAfter reading references, output this confirmation before proceeding:
## Reference Analysis Complete
**Pipeline Pattern Identified:** [Pattern name] from common-patterns.md
- [Why this pattern fits]
**Best Practices to Apply:**
- [3–5 key best practices relevant to this pipeline]
**Security Guidelines:**
- [Security measures to implement]
**Template Foundation:** [Template file name]
- [What will be customized]Generate complete .gitlab-ci.yml files with proper structure, security best practices, and efficient CI/CD patterns.
Process:
assets/templates/basic-pipeline.yml as structural foundationreferences/best-practices.md and references/common-patterns.md:latest)expire_in always set)needs keyword for DAG optimizationrules instead of deprecated only/excepttimeout on ALL jobs (10–30 minutes typically)retry for flaky operations (network, external APIs)resource_group for deployment jobsMinimal example:
stages: [build, test, deploy]
variables:
NODE_VERSION: "20"
default:
image: node:20-alpine
timeout: 20 minutes
cache:
key: ${CI_COMMIT_REF_SLUG}
paths: [node_modules/]
interruptible: true
build-application:
stage: build
timeout: 15 minutes
script: [npm ci, npm run build]
artifacts:
paths: [dist/]
expire_in: 1 hour
test-unit:
stage: test
needs: [build-application]
script: [npm run test:unit]
artifacts:
reports:
junit: junit.xml
deploy-production:
stage: deploy
needs: [build-application, test-unit]
script: [npm run deploy:production]
environment:
name: production
url: https://example.com
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: manual
resource_group: production
timeout: 15 minutesCreate pipelines for building, scanning, and pushing Docker images to container registries.
Process:
assets/templates/docker-build.yml as foundation$CI_COMMIT_SHORT_SHA)Minimal example:
variables:
IMAGE_NAME: $CI_REGISTRY_IMAGE
IMAGE_TAG: $CI_COMMIT_SHORT_SHA
docker-build:
stage: build
image: docker:24-dind
timeout: 20 minutes
services: [docker:24-dind]
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker build --cache-from $IMAGE_NAME:latest --tag $IMAGE_NAME:$IMAGE_TAG .
- docker push $IMAGE_NAME:$IMAGE_TAG
retry:
max: 2
when: [runner_system_failure]Create pipelines deploying to Kubernetes clusters via kubectl, Helm, or Kustomize.
Process:
assets/templates/kubernetes-deploy.yml as foundation$KUBE_CONTEXTMinimal example:
deploy-k8s:
stage: deploy
image: bitnami/kubectl:1.29
timeout: 10 minutes
before_script: [kubectl config use-context $KUBE_CONTEXT]
script:
- kubectl set image deployment/myapp myapp=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA -n $KUBE_NAMESPACE
- kubectl rollout status deployment/myapp -n $KUBE_NAMESPACE --timeout=5m
environment:
name: production
url: https://example.com
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: manual
resource_group: k8s-productionCreate pipelines that trigger other projects or use parent-child patterns for monorepos and microservices.
Process:
assets/templates/multi-project.yml or parent-child templatesCreate modular, DRY configurations using extends, YAML anchors, and include.
Process:
.template-name)extends for inheritance (preferred over YAML anchors in GitLab CI)includetimeout in all templatesMinimal example:
.node-template:
image: node:20-alpine
timeout: 15 minutes
cache:
key: ${CI_COMMIT_REF_SLUG}
paths: [node_modules/]
before_script: [npm ci]
interruptible: true
build:
extends: .node-template
stage: build
script: [npm run build]When the user requests specific GitLab features (Auto DevOps, SAST, dependency scanning, etc.):
"GitLab CI/CD [feature] documentation 2025"mcp__context7__resolve-library-id then mcp__context7__get-library-docsdocs.gitlab.comWhen using GitLab include templates:
include:
- template: Jobs/SAST.gitlab-ci.yml
- template: Jobs/Dependency-Scanning.gitlab-ci.yml
variables:
SAST_EXCLUDED_PATHS: "spec, test, tests, tmp"Note: Customize included template jobs via global
variablesrather than partial job overrides. GitLab merges at runtime, but local validators only see your file—partial overrides will fail validation.
Every complete pipeline MUST be validated before presenting to the user.
devops-skills:gitlab-ci-validator| Severity | Action |
|---|---|
| CRITICAL | Must fix before presenting |
| HIGH | Must fix before presenting |
| MEDIUM | Fix or explain why acceptable |
| LOW | Acknowledge in output |
| SUGGESTIONS | Review and apply if beneficial |
When presenting the final pipeline, include:
MEDIUM issue example:
| Issue | Status | Explanation |
|---|---|---|
image-variable-no-digest | Acceptable | Using python:${PYTHON_VERSION}-alpine allows flexible version management; PYTHON_VERSION is internally pinned to "3.12". |
git-strategy-none | Acceptable | stop-staging only runs kubectl commands requiring no source code. |
See references/best-practices.md for the full set of security, performance, reliability, naming, and organization guidelines that all generated pipelines must follow.
references/best-practices.md — Security, performance, pipeline design, anti-patternsreferences/common-patterns.md — Standard patterns (basic CI, Docker, K8s, multi-project)references/gitlab-ci-reference.md — Full keyword and syntax referencereferences/security-guidelines.md — Secrets, image, script, and artifact securityassets/templates/basic-pipeline.yml — Basic pipeline templateassets/templates/docker-build.yml — Docker build pipeline templateassets/templates/kubernetes-deploy.yml — Kubernetes deployment templateassets/templates/multi-project.yml — Multi-project orchestration templateTemplate usage: Copy structure → replace [PLACEHOLDERS] → customize logic → remove unused sections → validate.
Install with Tessl CLI
npx tessl i pantheon-ai/gitlab-ci-generator@0.1.0