Use when defining GitLab CI jobs, configuring scripts, setting up environments, or managing job dependencies. Covers job structure and execution options.
Install
npx skillscat add thebushidocollective/han/gitlab-ci-job-configuration Install via the SkillsCat registry.
About this skill
This skill helps define GitLab CI job structures, scripts, and dependencies, enabling controlled execution through rules and environment settings. It solves the need to specify when and how jobs run, manage dependencies between jobs, and configure deployment environments. Use it when setting up CI/CD pipelines to ensure jobs execute correctly based on conditions or changes.
SKILL.md
GitLab CI - Job Configuration
Configure GitLab CI jobs with proper scripts, environments, and execution settings.
Basic Job Structure
job_name:
stage: test
image: node:20-alpine
before_script:
- npm ci
script:
- npm test
after_script:
- echo "Cleanup tasks"
rules:
- if: $CI_COMMIT_BRANCH == "main"Script Configuration
Multi-Line Scripts
build:
script:
- echo "Building application..."
- npm run build
- echo "Build complete"Script with Exit Codes
test:
script:
- npm test || exit 1
- npm run lint
allow_failure: falseEnvironment Configuration
deploy:production:
stage: deploy
script:
- ./deploy.sh
environment:
name: production
url: https://example.com
on_stop: stop:production
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: manual
stop:production:
stage: deploy
script:
- ./teardown.sh
environment:
name: production
action: stop
when: manualJob Rules
Conditional Execution
job:
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: always
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: on_success
- when: neverChanges-Based Rules
test:frontend:
rules:
- changes:
- "src/frontend/**/*"
- "package.json"Exists-Based Rules
docker:build:
rules:
- exists:
- DockerfileJob Dependencies
Using Dependencies
build:
stage: build
script: npm run build
artifacts:
paths:
- dist/
test:
stage: test
dependencies:
- build
script: npm testUsing Needs (DAG)
test:unit:
needs:
- job: build
artifacts: true
script: npm run test:unitParallel Jobs
Matrix Jobs
test:
parallel:
matrix:
- NODE_VERSION: ["18", "20", "22"]
OS: ["alpine", "bullseye"]
image: node:${NODE_VERSION}-${OS}
script: npm testSimple Parallel
test:
parallel: 5
script: npm run test:shardResource Configuration
heavy_job:
tags:
- high-memory
resource_group: deploy
timeout: 2h
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure