← Назад к вопросам

Что такое GitLab?

1.0 Junior🔥 81 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

GitLab — Платформа для управления исходным кодом и CI/CD

Определение

GitLab — это веб-платформа для управления репозиториями кода, совместной разработки, непрерывной интеграции и развёртывания. Аналог GitHub и Bitbucket, но с более мощным встроенным CI/CD функционалом.

GitLab можно использовать в трёх вариантах:

  • GitLab.com — облачный сервис (SaaS), управляется GitLab Inc.
  • GitLab Self-Managed — установленный на собственный сервер (Enterprise Edition)
  • GitLab Community Edition — бесплатная локальная версия (open source)

Основные компоненты

1. Repository Management — хранение и управление кодом

GitLab организует код в:
- Projects (проекты) — репозитории с кодом
- Groups (группы) — иерархическая организация проектов
- Namespaces — пространства имён для отделения проектов

2. Version Control — управление версиями с Git

# Клонирование репозитория с GitLab
git clone https://gitlab.com/mygroup/myproject.git
cd myproject

# Работа с ветками
git checkout -b feature/new-feature
git commit -m "Add new feature"
git push origin feature/new-feature

# Создание Merge Request (аналог Pull Request в GitHub)
# Через GitLab UI или CLI

3. CI/CD Pipeline — непрерывная интеграция и развёртывание

# .gitlab-ci.yml — конфиг для автоматизации
stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - ./gradlew clean build
  artifacts:
    paths:
      - build/libs/*.jar

test_job:
  stage: test
  script:
    - ./gradlew test
  only:
    - merge_requests

deploy_job:
  stage: deploy
  script:
    - ./scripts/deploy.sh
  only:
    - main

Рабочий процесс в GitLab

1. Создание Feature Branch
   └─> git checkout -b feature/login-system

2. Разработка и коммиты
   └─> git commit -m "Implement login"
   └─> git push origin feature/login-system

3. Создание Merge Request (MR)
   └─> GitLab UI: New Merge Request
   └─> Описание изменений
   └─> Назначение reviewers

4. CI/CD Pipeline запускается автоматически
   └─> Build stage: компиляция
   └─> Test stage: unit тесты
   └─> Coverage: отчёт покрытия кода

5. Code Review
   └─> Reviewers смотрят код
   └─> Комментарии и обсуждения
   └─> Дополнительные коммиты

6. Merge и Deploy
   └─> Merge в main
   └─> Deploy stage запускается
   └─> Приложение обновляется на продакшене

Практический пример для Java приложения

Структура проекта:

myapp/
├── .gitlab-ci.yml
├── pom.xml (или build.gradle)
├── src/
│   ├── main/
│   └── test/
├── .gitignore
└── Dockerfile (для контейнеризации)

Конфиг GitLab CI для Maven проекта:

# .gitlab-ci.yml
image: maven:3.8-openjdk-11

variables:
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository

stages:
  - build
  - test
  - package
  - deploy

build:
  stage: build
  script:
    - mvn clean compile
  artifacts:
    paths:
      - target/
    expire_in: 1 hour

test:
  stage: test
  script:
    - mvn test
  coverage: '/Coverage: \d+\.\d+/'
  artifacts:
    reports:
      junit: target/surefire-reports/TEST-*.xml

package:
  stage: package
  script:
    - mvn package -DskipTests
  artifacts:
    paths:
      - target/*.jar
    expire_in: 1 week
  only:
    - main

deploy:
  stage: deploy
  script:
    - echo "Deploying to production..."
    - ./scripts/deploy.sh
  environment:
    name: production
    url: https://myapp.com
  only:
    - main

Развёртывание в Docker:

# Dockerfile
FROM maven:3.8-openjdk-11 as builder
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests

FROM openjdk:11-jre-slim
COPY --from=builder /app/target/*.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

Ключевые возможности GitLab

1. Issues — система отслеживания задач

- Create Issue → Assign to developer → Link to MR → Close on merge

2. Labels и Milestones — органтизация работы

Labels: bug, feature, documentation, urgent
Milestones: v1.0.0, Sprint #5, Release Q2

3. Protected Branches — защита основных веток

main (protected):
- Требует code review перед merge
- Требует прохождение CI/CD перед merge
- Требует одобрения от maintainers

4. Auto DevOps — автоматическая настройка CI/CD

GitLab может автоматически создать pipeline для:
- Компиляции
- Тестирования
- Сканирования безопасности (SAST)
- Развёртывания на Kubernetes

5. Security Scanning — проверки безопасности

- SAST (Static Application Security Testing)
- Dependency scanning
- Container scanning
- License compliance

GitLab vs GitHub

ФункцияGitLabGitHub
Встроенный CI/CDДа (мощный)Actions (платный)
Self-HostedДаНет
Free TierДаДа
Code reviewMR (Merge Requests)PR (Pull Requests)
IssuesВстроенныеВстроенные
WikiВстроеннаяВстроенная
БезопасностьУглублённое сканированиеЗависит от Actions

Интеграция с Java экосистемой

// Maven с GitLab
<distributionManagement>
    <repository>
        <id>gitlab</id>
        <url>https://gitlab.com/api/v4/projects/PROJECT_ID/packages/maven</url>
    </repository>
</distributionManagement>

// Gradle с GitLab
repositories {
    maven {
        url "https://gitlab.com/api/v4/projects/PROJECT_ID/packages/maven"
        credentials(HttpHeaderCredentials) {
            name = "PRIVATE-TOKEN"
            value = gitlab_private_token
        }
        authentication {
            header(HttpHeaderAuthentication)
        }
    }
}

Типичный рабочий процесс разработчика

# 1. Клонирование и создание ветки
git clone https://gitlab.com/company/java-app.git
cd java-app
git checkout -b feature/authentication

# 2. Разработка и коммиты
# ... редактируем код ...
git add src/
git commit -m "Implement JWT authentication"
git push origin feature/authentication

# 3. GitLab автоматически запускает CI/CD

# 4. Создаём Merge Request через GitLab UI
# GitLab проверяет:
# - Прошли ли все тесты
# - Есть ли конфликты мержа
# - Соответствует ли код стандартам

# 5. После одобрения и всех проверок
# MR мержим в main, и автоматически деплоится

Выводы

GitLab — это полнофункциональная платформа для:

  • Управления кодом — хранение, версионирование, ветвление
  • Совместной разработки — code review, обсуждения, issues
  • Автоматизации — CI/CD pipelines из коробки
  • Развёртывания — от коммита к production автоматически
  • Безопасности — сканирование уязвимостей, анализ зависимостей

Для Java разработчиков это особенно ценно благодаря встроенной поддержке Maven/Gradle и мощному CI/CD, который может заменить отдельные инструменты.

Что такое GitLab? | PrepBro