GitLab CI/CD - это встроенная система непрерывной интеграции и доставки (Continuous Integration / Continuous Delivery), которая является частью GitLab и не требует установки сторонних инструментов. Она позволяет автоматизировать сборку, тестирование, проверку безопасности и деплой приложений.
Что такое CI/CD простыми словами
CI (Continuous Integration) - практика, при которой разработчики часто сливают код в общий репозиторий, а система автоматически:
CD (Continuous Delivery / Deployment) - автоматизация доставки приложения:
GitLab CI/CD объединяет всё это в одном месте - прямо рядом с репозиторием.
Как работает GitLab CI/CD в целом
Stages - этапы пайплайна
Stages - это логические этапы, которые выполняются последовательно.
Пример типичного пайплайна:
build - test - deploy - cleanup
Пример описания stages:
stages: - build - test - deploy
Jobs - конкретные задачи
Job - это конкретное действие внутри stage:
Job:
Пример job:
unit_tests:
stage: test
script:
- php vendor/bin/phpunit
Runners - кто выполняет job'ы
GitLab Runner - это агент, который физически выполняет job.
Типы executors:
Типы runners:
Runner:
Triggers - как запускаются пайплайны
Pipeline может запускаться:
Пример ручного запуска:
deploy_prod: stage: deploy script: ./deploy.sh when: manual
Artifacts - файлы между job'ами
Artifacts - это файлы, которые:
Примеры:
Пример:
artifacts:
paths:
- vendor/
expire_in: 1 hour
Environments - окружения и деплой
Environment описывает целевое окружение:
GitLab умеет:
Пример:
environment: name: staging url: https://staging.example.com
Полный пример .gitlab-ci.yml для PHP приложения
image: php:8.2
stages:
- build
- test
- deploy
variables:
APP_ENV: test
cache:
paths:
- vendor/
build:
stage: build
script:
- apt-get update && apt-get install -y unzip git
- curl -sS https://getcomposer.org/installer | php
- php composer.phar install
artifacts:
paths:
- vendor/
phpunit:
stage: test
script:
- php vendor/bin/phpunit
lint:
stage: test
script:
- php -l src/
deploy_staging:
stage: deploy
script:
- echo "Deploy to staging"
environment:
name: staging
url: https://staging.example.com
only:
- main
- Подробное объяснение конфигурации
image: php:8.2
Docker‑образ, в котором будут выполняться все job'ы.
variables: APP_ENV: test
Переменные окружения, доступные во всех job'ах.
cache:
paths:
- vendor/
Позволяет переиспользовать зависимости между пайплайнами.
- build stage
- test stage
- deploy stage
Поддержка DevOps и DevSecOps
GitLab CI/CD поддерживает:
- DevOps
- DevSecOps
Всё это можно включить без внешних инструментов.
Source: Orkhan Alishov's notes