
Gitlab Ci
- 89 installs
- 44 repo stars
- Updated May 22, 2026
- bagelhole/devops-security-agent-skills
gitlab-ci is a Claude Code skill that configures GitLab CI/CD pipelines and runners for automated building, testing, and deployment via .gitlab-ci.yml.
About
A Claude skill for configuring GitLab CI/CD pipelines and runners. A developer uses it to author .gitlab-ci.yml files that automate building, testing, and deploying on gitlab.com or self-hosted GitLab. It covers stages, rules-based execution, parallel and matrix jobs, caching, artifacts, environments, Docker builds, and runner setup.
- Builds .gitlab-ci.yml pipelines with build, test, and deploy stages
- Covers rules-based execution, parallel and matrix jobs, caching, and artifacts
- Includes GitLab runner install/registration and multi-project pipelines
Gitlab Ci by the numbers
- 89 all-time installs (skills.sh)
- Ranked #570 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
gitlab-ci capabilities & compatibility
- Capabilities
- ci cd · testing · devops
- Works with
- gitlab · docker · aws
- Use cases
- ci cd · testing · devops
- Runs
- Runs locally
- Pricing
- Free
What gitlab-ci says it does
Configure GitLab CI/CD pipelines and runners for automated building, testing, and deployment.
Create `.gitlab-ci.yml` in repository root:
npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill gitlab-ciAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 89 |
|---|---|
| repo stars | ★ 44 |
| Last updated | May 22, 2026 |
| Repository | bagelhole/devops-security-agent-skills ↗ |
What it does
Automate build, test, and deployment pipelines for GitLab repositories via .gitlab-ci.yml.
Who is it for?
Developers running CI/CD on gitlab.com or self-hosted GitLab.
Skip if: Teams on GitHub Actions or Jenkins.
When should I use this skill?
Writing .gitlab-ci.yml, configuring GitLab runners, or building multi-stage GitLab pipelines.
What you get
Multi-stage GitLab pipelines that build, test, and deploy with configured runners.
- .gitlab-ci.yml pipeline configuration
- GitLab runner registration
- Reusable job templates via include/extend
By the numbers
- Example pipeline uses 3 stages (build, test, deploy)
Files
GitLab CI/CD
Automate your software delivery pipeline with GitLab's integrated CI/CD system.
When to Use This Skill
Use this skill when:
- Setting up CI/CD pipelines in GitLab
- Configuring GitLab runners (shared or self-hosted)
- Creating multi-stage deployment pipelines
- Implementing GitLab Auto DevOps
- Managing CI/CD variables and secrets
Prerequisites
- GitLab repository (gitlab.com or self-hosted)
- Basic understanding of YAML
- For self-hosted runners: Linux server or Kubernetes cluster
Pipeline Configuration
Create .gitlab-ci.yml in repository root:
stages:
- build
- test
- deploy
variables:
NODE_VERSION: "20"
build:
stage: build
image: node:${NODE_VERSION}
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 hour
test:
stage: test
image: node:${NODE_VERSION}
script:
- npm ci
- npm test
coverage: '/Coverage: \d+\.\d+%/'
deploy:
stage: deploy
script:
- ./deploy.sh
environment:
name: production
url: https://example.com
only:
- mainJob Configuration
Rules-Based Execution
deploy:
script: ./deploy.sh
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: manual
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: never
- when: on_successParallel Jobs
test:
stage: test
parallel: 3
script:
- npm test -- --shard=$CI_NODE_INDEX/$CI_NODE_TOTALMatrix Builds
test:
stage: test
parallel:
matrix:
- NODE_VERSION: ["18", "20", "22"]
OS: ["alpine", "slim"]
image: node:${NODE_VERSION}-${OS}
script:
- npm testCaching
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
policy: pull-push
build:
cache:
key: build-cache
paths:
- .cache/
policy: pullArtifacts
build:
artifacts:
paths:
- dist/
- coverage/
reports:
junit: junit.xml
coverage_report:
coverage_format: cobertura
path: coverage/cobertura.xml
expire_in: 1 week
when: alwaysEnvironments and Deployments
deploy_staging:
stage: deploy
script:
- deploy --env staging
environment:
name: staging
url: https://staging.example.com
on_stop: stop_staging
stop_staging:
stage: deploy
script:
- undeploy --env staging
environment:
name: staging
action: stop
when: manualDocker Builds
build_image:
stage: build
image: docker:24
services:
- docker:24-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHAGitLab Runners
Install Runner
# Download and install
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt install gitlab-runner
# Register runner
sudo gitlab-runner register \
--url https://gitlab.com/ \
--registration-token TOKEN \
--executor docker \
--docker-image alpine:latestRunner Configuration
# /etc/gitlab-runner/config.toml
[[runners]]
name = "docker-runner"
url = "https://gitlab.com/"
token = "TOKEN"
executor = "docker"
[runners.docker]
image = "alpine:latest"
privileged = true
volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"]Runner Tags
build:
tags:
- docker
- linux
script:
- make buildCI/CD Variables
Protected Variables
Define in Settings > CI/CD > Variables:
AWS_ACCESS_KEY_ID(protected, masked)AWS_SECRET_ACCESS_KEY(protected, masked)
Using Variables
deploy:
script:
- aws s3 sync dist/ s3://$S3_BUCKET
variables:
AWS_DEFAULT_REGION: us-east-1Include and Extend
Include Templates
include:
- template: Security/SAST.gitlab-ci.yml
- project: 'group/shared-ci'
file: '/templates/deploy.yml'
- local: '/ci/jobs.yml'Extend Jobs
.base_job:
image: node:20
before_script:
- npm ci
build:
extends: .base_job
script:
- npm run build
test:
extends: .base_job
script:
- npm testMulti-Project Pipelines
trigger_downstream:
stage: deploy
trigger:
project: group/downstream-project
branch: main
strategy: dependCommon Issues
Issue: Pipeline Stuck
Problem: Jobs stay pending Solution: Check runner availability and tags matching
Issue: Docker-in-Docker Fails
Problem: Cannot connect to Docker daemon Solution: Use docker:dind service with proper TLS configuration
Issue: Cache Not Working
Problem: Cache misses between jobs Solution: Verify cache key and ensure runners share distributed cache
Best Practices
- Use
rulesinstead ofonly/exceptfor complex conditions - Leverage GitLab's built-in security scanning templates
- Use job dependencies to optimize pipeline speed
- Implement review apps for merge requests
- Cache dependencies aggressively
- Use artifacts for passing data between stages
Related Skills
- github-actions - GitHub CI/CD alternative
- argocd-gitops - GitOps deployments
- container-registries - Registry management
GitLab CI Pipeline Patterns
Parent-Child Pipelines
# Parent pipeline
stages:
- triggers
trigger-services:
stage: triggers
trigger:
include:
- local: services/api/.gitlab-ci.yml
- local: services/web/.gitlab-ci.yml
strategy: dependDAG (Directed Acyclic Graph)
build:
stage: build
script: make build
test-unit:
stage: test
needs: [build]
script: make test-unit
test-integration:
stage: test
needs: [build]
script: make test-integration
deploy:
stage: deploy
needs: [test-unit, test-integration]
script: make deployDynamic Child Pipelines
generate-config:
stage: prepare
script:
- generate-pipeline.sh > child-pipeline.yml
artifacts:
paths:
- child-pipeline.yml
trigger-child:
stage: trigger
trigger:
include:
- artifact: child-pipeline.yml
job: generate-configMulti-Project Pipelines
deploy-downstream:
trigger:
project: group/downstream-project
branch: main
strategy: depend
variables:
UPSTREAM_VERSION: $CI_COMMIT_SHARules and Conditions
deploy:
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: manual
- if: $CI_COMMIT_TAG
when: on_success
- when: neverCaching Strategies
default:
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
policy: pull-push
test:
cache:
policy: pull # Only read from cacheServices
test:
services:
- name: postgres:15
alias: db
- name: redis:7
variables:
POSTGRES_DB: test
DATABASE_URL: postgres://postgres@db/testRelated skills
FAQ
What file configures a GitLab pipeline?
A .gitlab-ci.yml file in the repository root defines stages, jobs, and scripts.
Does it cover self-hosted runners?
Yes, it shows installing and registering GitLab runners with a Docker executor and config.toml.