Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build GitLab CI/CD pipelines with multi-stage workflows, caching, and distributed runners for scalable automation. Use when implementing GitLab CI/CD, optimizing pipeline performance, or setting up automated testing and deployment.
.claude/skills/microck-gitlab-ci-patterns/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-10 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 102% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 67% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 4% | 0% |
| case-08 | ✓→✓ | = Same ✓ | 54% | 0% |
Comprehensive GitLab CI/CD pipeline patterns for automated testing, building, and deployment.
Create efficient GitLab CI pipelines with proper stage organization, caching, and deployment strategies.
yamlstages: - build - test - deploy variables: DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: "/certs" build: stage: build image: node:20 script: - npm ci - npm run build artifacts: paths: - dist/ expire_in: 1 hour cache: key: ${CI_COMMIT_REF_SLUG} paths: - node_modules/ test: stage: test image: node:20 script: - npm ci - npm run lint - npm test coverage: '/Lines\s*:\s*(\d+\.\d+)%/' artifacts: reports: coverage_report: coverage_format: cobertura path: coverage/cobertura-coverage.xml deploy: stage: deploy image: bitnami/kubectl:latest script: - kubectl apply -f k8s/ - kubectl rollout status deployment/my-app only: - main environment: name: production url: https://app.example.com
yamlbuild-docker: stage: build image: docker:24 services: - docker:24-dind before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA . - docker build -t $CI_REGISTRY_IMAGE:latest . - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA - docker push $CI_REGISTRY_IMAGE:latest only: - main - tags
yaml.deploy_template: &deploy_template image: bitnami/kubectl:latest before_script: - kubectl config set-cluster k8s --server="$KUBE_URL" --insecure-skip-tls-verify=true - kubectl config set-credentials admin --token="$KUBE_TOKEN" - kubectl config set-context default --cluster=k8s --user=admin - kubectl config use-context default deploy:staging: <<: *deploy_template stage: deploy script: - kubectl apply -f k8s/ -n staging - kubectl rollout status deployment/my-app -n staging environment: name: staging url: https://staging.example.com only: - develop deploy:production: <<: *deploy_template stage: deploy script: - kubectl apply -f k8s/ -n production - kubectl rollout status deployment/my-app -n production environment: name: production url: https://app.example.com when: manual only: - main
yamlstages: - validate - plan - apply variables: TF_ROOT: ${CI_PROJECT_DIR}/terraform TF_VERSION: "1.6.0" before_script: - cd ${TF_ROOT} - terraform --version validate: stage: validate image: hashicorp/terraform:${TF_VERSION} script: - terraform init -backend=false - terraform validate - terraform fmt -check plan: stage: plan image: hashicorp/terraform:${TF_VERSION} script: - terraform init - terraform plan -out=tfplan artifacts: paths: - ${TF_ROOT}/tfplan expire_in: 1 day apply: stage: apply image: hashicorp/terraform:${TF_VERSION} script: - terraform init - terraform apply -auto-approve tfplan dependencies: - plan when: manual only: - main
yamlinclude: - template: Security/SAST.gitlab-ci.yml - template: Security/Dependency-Scanning.gitlab-ci.yml - template: Security/Container-Scanning.gitlab-ci.yml trivy-scan: stage: test image: aquasec/trivy:latest script: - trivy image --exit-code 1 --severity HIGH,CRITICAL $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA allow_failure: true
yaml# Cache node_modules build: cache: key: ${CI_COMMIT_REF_SLUG} paths: - node_modules/ policy: pull-push # Global cache cache: key: ${CI_COMMIT_REF_SLUG} paths: - .cache/ - vendor/ # Separate cache per job job1: cache: key: job1-cache paths: - build/ job2: cache: key: job2-cache paths: - dist/
yamlgenerate-pipeline: stage: build script: - python generate_pipeline.py > child-pipeline.yml artifacts: paths: - child-pipeline.yml trigger-child: stage: deploy trigger: include: - artifact: child-pipeline.yml job: generate-pipeline strategy: depend
assets/gitlab-ci.yml.template - Complete pipeline templatereferences/pipeline-stages.md - Stage organization patternsgithub-actions-templates - For GitHub Actionsdeployment-pipeline-design - For architecturesecrets-management - For secrets handling| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-08 | pass→pass | 11,486 | 9,126 | -21% | 1 | 1 | 0% | 2,119 | 3,273 | +54% | 0 | 0 | — |
case-09 | fail→fail | 10,214 | 7,585 | -26% | 1 | 1 | 0% | 1,845 | 2,942 | +59% | 0 | 0 | — |
case-11 | pass→pass | 15,338 | 11,864 | -23% | 1 | 1 | 0% | 2,475 | 3,626 | +47% | 0 | 0 | — |
case-10 | fail→pass | 8,985 | 2,470 | -73% | 1 | 1 | 0% | 1,465 | 2,050 | +40% | 0 | 0 | — |
case-05 | pass→pass | 11,260 | 9,725 | -14% | 1 | 1 | 0% | 2,157 | 3,278 | +52% | 0 | 0 | — |
case-06 | pass→pass | 10,901 | 8,069 | -26% | 1 | 1 | 0% | 1,829 | 2,900 | +59% | 0 | 0 | — |
case-07 | fail→pass | 10,765 | 12,889 | +20% | 1 | 1 | 0% | 1,955 | 3,943 | +102% | 0 | 0 | — |
case-01 | fail→fail | 16,164 | 12,210 | -24% | 1 | 1 | 0% | 3,315 | 4,186 | +26% | 0 | 0 | — |
case-02 | fail→fail | 13,231 | 9,569 | -28% | 1 | 1 | 0% | 2,410 | 3,368 | +40% | 0 | 0 | — |
case-03 | fail→fail | 11,221 | 7,902 | -30% | 1 | 1 | 0% | 2,183 | 3,182 | +46% | 0 | 0 | — |
case-04 | pass→pass | 12,763 | 10,734 | -16% | 1 | 1 | 0% | 2,325 | 3,558 | +53% | 0 | 0 | — |
case-12 | pass→pass | 11,850 | 9,523 | -20% | 1 | 1 | 0% | 1,957 | 3,369 | +72% | 0 | 0 | — |
case-13 | pass→pass | 13,941 | 11,103 | -20% | 1 | 1 | 0% | 2,291 | 3,454 | +51% | 0 | 0 | — |
case-14 | pass→pass | 13,415 | 9,747 | -27% | 1 | 1 | 0% | 2,145 | 3,251 | +52% | 0 | 0 | — |
case-15 | fail→fail | 12,856 | 11,680 | -9% | 1 | 1 | 0% | 1,989 | 3,593 | +81% | 0 | 0 | — |
case-16 | fail→fail | 19,173 | 14,117 | -26% | 1 | 1 | 0% | 3,240 | 4,134 | +28% | 0 | 0 | — |
case-17 | fail→pass | 8,463 | 5,949 | -30% | 1 | 1 | 0% | 1,647 | 2,754 | +67% | 0 | 0 | — |
case-18 | pass→pass | 15,962 | 12,526 | -22% | 1 | 1 | 0% | 2,783 | 3,904 | +40% | 0 | 0 | — |
case-19 | pass→pass | 13,793 | 12,535 | -9% | 1 | 1 | 0% | 2,372 | 3,864 | +63% | 0 | 0 | — |
case-20 | pass→pass | 11,313 | 11,328 | +0% | 1 | 1 | 0% | 2,013 | 3,691 | +83% | 0 | 0 | — |
case-21 | fail→pass | 10,558 | 1,824 | -83% | 1 | 1 | 0% | 1,830 | 1,895 | +4% | 0 | 0 | — |
case-22 | fail→fail | 15,975 | 9,024 | -44% | 1 | 1 | 0% | 2,564 | 3,282 | +28% | 0 | 0 | — |
case-23 | pass→pass | 7,205 | 5,528 | -23% | 1 | 1 | 0% | 1,394 | 2,709 | +94% | 0 | 0 | — |
case-24 | pass→pass | 11,216 | 11,864 | +6% | 1 | 1 | 0% | 2,427 | 4,330 | +78% | 0 | 0 | — |
case-25 | pass→pass | 4,893 | 5,474 | +12% | 1 | 1 | 0% | 1,048 | 2,743 | +162% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +16 percentage points is the difference between those two pass rates over the 25 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.