Что такое GitLab и для чего он используется?

«Что такое GitLab и для чего он используется?» — вопрос из категории DevOps, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

GitLab — это единая DevOps-платформа с открытым исходным кодом, которая предоставляет полный набор инструментов для всего жизненного цикла разработки ПО: от планирования и управления кодом до непрерывной интеграции/доставки (CI/CD), мониторинга и безопасности.

Основные возможности GitLab:

Компонент Назначение
Git-репозитории Хранение исходного кода с полной историей, защитой веток, веб-интерфейсом для кода.
Issue Tracking & Boards Система задач (issues) и канбан-доски для планирования спринтов и отслеживания прогресса (аналог Jira).
CI/CD Pipelines Автоматизация сборки, тестирования и развёртывания через конфигурационный файл .gitlab-ci.yml.
Container Registry Встроенный приватный реестр для хранения Docker-образов.
Package Registry Хранение пакетов (NuGet, npm, Maven и др.).
Wiki Ведение документации проекта.
Security & Compliance Статический анализ кода (SAST), зависимостей (DAST), сканирование секретов.

Пример .gitlab-ci.yml для .NET проекта:

# Определяем стадии пайплайна
stages:
  - build
  - test
  - deploy

# Переменные
variables:
  DOTNET_VERSION: "8.0.x"

# Кэширование для ускорения сборок
cache:
  paths:
    - .nuget/

# 1. Стадия сборки
build:
  stage: build
  image: mcr.microsoft.com/dotnet/sdk:$DOTNET_VERSION
  script:
    - dotnet restore
    - dotnet build --configuration Release --no-restore
  artifacts:
    paths:
      - "**/bin/Release/**/*.dll"

# 2. Стадия тестирования
test:
  stage: test
  image: mcr.microsoft.com/dotnet/sdk:$DOTNET_VERSION
  script:
    - dotnet test --configuration Release --no-build --verbosity normal

# 3. Стадия деплоя (пример для staging)
deploy_staging:
  stage: deploy
  image: alpine:latest
  script:
    - echo "Deploying to staging environment..."
    # Здесь могут быть команды scp, kubectl, ssh и т.д.
  only:
    - main # Запускать только при пуше в main

GitLab vs GitHub: Главное отличие — GitLab из коробки предлагает полноценный встроенный CI/CD, в то время как для GitHub нужно использовать отдельный сервис (GitHub Actions, Travis CI, CircleCI). GitLab также можно развернуть на собственном сервере (self-hosted), что критично для проектов с жёсткими требованиями к безопасности и конфиденциальности.