Documentation/Jutsu/Gitlab Ci/ skills /gitlab-ci-job-configuration

📖 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