ð gitlab-ci-job-configuration
Use when defining GitLab CI jobs, configuring scripts, setting up environments, or managing job dependencies. Covers job structure and execution options.
Overview
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: false
Environment 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: manual
Job Rules
Conditional Execution
job:
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: always
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
when: on_success
- when: never
Changes-Based Rules
test:frontend:
rules:
- changes:
- "src/frontend/**/*"
- "package.json"
Exists-Based Rules
docker:build:
rules:
- exists:
- Dockerfile
Job Dependencies
Using Dependencies
build:
stage: build
script: npm run build
artifacts:
paths:
- dist/
test:
stage: test
dependencies:
- build
script: npm test
Using Needs (DAG)
test:unit:
needs:
- job: build
artifacts: true
script: npm run test:unit
Parallel Jobs
Matrix Jobs
test:
parallel:
matrix:
- NODE_VERSION: ["18", "20", "22"]
OS: ["alpine", "bullseye"]
image: node:${NODE_VERSION}-${OS}
script: npm test
Simple Parallel
test:
parallel: 5
script: npm run test:shard
Resource Configuration
heavy_job:
tags:
- high-memory
resource_group: deploy
timeout: 2h
retry:
max: 2
when:
- runner_system_failure
- stuck_or_timeout_failure